建議 model:opus/effort:medium — 動的是出貨 build 線與安裝包,驗收要在乾淨環境做且有「驗收環境打折」的已知陷阱。
本卡屬 FR-107(母卡 CM-1843)第 .6 棒(子需求卡 CM-1849),子任務 T-6.4:把分類容器加進出貨的 build 與打包流程,讓客戶裝完就能用。
寫設計時查出來的缺口:現行安裝包根本沒有帶分類容器 image(scripts/build/ 與 scripts/installer/ 兩處 grep classifier 零命中)。落地版客戶裝完,就算 API 都在,按分類會因為 docker run 找不到 image 而失敗。
決策者裁示:進安裝包,隨三顆主 image 一起 build(走 FR-065 的 build 線)。這張卡做三件事:
scripts/build/build_all.sh 加第四顆 image(evidence-classifier)。build_bundle.sh 把它打包進安裝包。主專案
scripts/build/build_all.sh ← 加第四顆 image(現在是三顆)
scripts/build/build_bundle.sh ← 打包進安裝包
scripts/installer/ compose 設定 ← 加對應 service/image 參照
scripts/build/README.md ← build 細節的 canonical,要同步
image 來源:套件 repo 的 docker/(T-2.3 搬過去的)
image 名:evidence-classifier,tag=套件版號(T-6.2 發的那個版)
🔴 build 機座標(BE build 一律在這裡跑,不在本機)
188 的 /opt/guidant-ai-be(GitLab clone,更新走 git pull——部署機鐵律,禁 scp/rsync)
開跑前必做:
① git pull 到目標 commit
② pgrep -f 'nuitka|build_all' 查有沒有別人在跑(互撞會 linker crash)
產物落 .build/dist|bundle|logs/
這張卡的驗收條件是「全新裝機(不手動 docker pull/docker load 分類 image)後能跑完一次分類」。如果因為環境限制只能「模擬」乾淨環境(例如在已經有 stack 的機器上改埠避開佔用),當下就要把打折處寫進回報,不可以報成「通過」。
這條是 2026-08-22 用一次真事故換來的:T-6.6 的「乾淨 docker 機」是在有既存 stack 的 188 上靠改埠模擬的,而那台機器剛好早就有 SeaweedFS image,於是「交付包沒把第三方 image 包進去、封閉網路裝不起來」這個真缺口被驗收環境掩蓋,直到決策者提問才暴露。本卡驗的正是同一類問題(image 有沒有真的進包),特別容易被同樣的方式掩蓋。
scripts/build/README.md——那是 build 細節的 canonical,跨腳本的約定都在裡面。/opt/guidant-ai-be 跑,更新走 git pull,禁止 scp/rsync/直接編輯部署機上的檔(部署機鐵律)。pgrep -f 'nuitka|build_all' 查有沒有別人在跑,互撞會 linker crash。grep/tar -tf 確認 image tar 真的在包裡,不要只看 build log 說成功。commit 沒進包=對客戶端不存在。scp 那支過去,不要為此重出整包(只有「要驗交付包本身」時才重出包)。