本卡屬 FR-114(母卡 CM-2019)。188 全量 build 連四次失敗後,首腦派唯讀 agent 對 v1.20.0 與 fix/security-b1 整批盤點打包差異,本卡收掉盤點出的所有 build 腳本問題。只改 BE scripts/build/,不動產品程式、不發套件。

問題是什麼(白話)

① smoke 探針⑥用外部 python 在產物目錄跑,但 CM-2053 把 cryptography 編進主程式後,產物目錄裡沒有 cryptography 的 .py,外部 python 找不到 → pdfminer、googleapiclient 兩項報 FAIL,擋住 build。產品本身沒壞:產品開機時 DI 就走過 pdfplumber→pdfminer→cryptography 與 googleapiclient→google.auth→cryptography 兩條 import,開機探針全 PASS。探針自己判斷「是不是在產品內」的方式(cwd 有 guidant-ai 就算)在 smoke 裡永遠成立,邏輯是反的。② 真壞:run5 產物頂層與 guidant-ai 是 700、manifest 600、另 900 個檔缺其他人可讀(首腦 09-24 實查);v1.19 同批檔是 775/664。image 用 COPY 保留權限、擁有者變 root,程式用 setpriv 降到 uid 1000 執行 → 讀不到也執行不了,而且會一路過 image、封包,裝機才炸。推測是跑 build 的 shell umask 077。③ 真壞:188 /opt/guidant-ai-fe 停在 origin/main 的 9708a065,連 fix/security-b1 都沒 fetch 過;build_fe_image.sh 只找目錄不查 commit,會默默用舊前端出 image,前端資安修正全部沒進去。

在哪裡

scripts/build/excluded_pkgs_probe.py:61-89   IN_PRODUCT=cwd 有 guidant-ai;check(binary_only) 在 IN_PRODUCT 時實跑
  :190 pdfminer(binary_only)、:200 googleapiclient(非 binary_only)
scripts/build/smoke_release.sh:280-306      探針⑥ 以外部 venv python -S、cwd=dist 目錄執行
scripts/build/build_all.sh                  開頭無 umask 設定
scripts/build/build_release.sh              產物組裝完無權限正規化/斷言
scripts/build/build_image.sh:126            rsync -a 原樣保留權限
scripts/build/build_fe_image.sh:32-38       只找 FE 目錄、不檢查 commit
docker/production/Dockerfile:159            COPY dist/ /app/;entrypoint.sh:121,127 setpriv 降 uid 1000

怎麼修

① 探針⑥

② 產物權限

③ FE commit 斷言

驗證(本機,批次做完)