本卡屬 FR-111(母卡見建卡後補號),第 1 棒:容器執行鏈:docker 命令組裝/金鑰下發/容器端程式/log 遮蔽(jedi-evidence-classification,7 檔 1,476 行)。只掃不修。

這一棒在做什麼(白話)

宿主怎麼把 docker run 命令組起來、AI 金鑰怎麼交給容器、容器端程式怎麼讀證據檔並呼叫 AI 服務、容器跑完的紀錄怎麼遮蔽落地。

為什麼切這一塊

這是整支套件最該看的一塊:唯一直接拿 AI 金鑰、唯一跑外部程式的地方。容器跑在客戶主機上,金鑰經過的每一段(宿主→命令列→容器環境變數→AI 服務)都可能留下痕跡。跨 arc 總表 §3.4 記著「遮蔽只靠字串比對、docker 白名單擋不擋得住繞過要驗證」——就是這一棒。

重點看什麼(工具不照清單走,掃完逐項回頭核,沒碰的自己開檔查並標「(工具未報,人工查證)」)

已知背景(未經本輪面板驗證,只是參照)

本套件從未掃過。 主專案 2026-07 semgrep 掃描(docs/features/security-scan-2607/)曾標 classifier_container_runner.py 的 subprocess 為 audit 類,當時加了 _SAFE_ARG_RE 白名單(:40-53 註解自陳)。跨 arc 總表 §3.4「等於沒查」列了「遮蔽只靠字串比對、docker 白名單要驗證」兩項——本棒是那兩項的正式驗證。容器端 docker/ 有 unit test(test_container_entrypoint.py 378 行、test_llm_clients.py 245 行),focus=attack-surface 會跳過。CM-1877 剛把容器改成多供應商(Anthropic+OpenAI),OPENAI_BASE_URL 也會經 -e 進命令列(core/plugins/evidence_classification.py:199-202,主專案側,不在本棒)。

怎麼做

第一步:驗 scope 檔數與行數,對上 7 檔/約 1,476 行才啟動(scope 以套件 HEAD 955e409 為準;git log -1 --format=%h 不是它就先回報,不自行改 scope):

cd /Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-evidence-classification && git ls-files -- jedi_evidence_classification/infra/classifier_container_runner.py jedi_evidence_classification/domain/exceptions.py docker/container_entrypoint.py docker/llm_clients.py docker/Dockerfile docker/rebuild.sh docker/requirements.txt | wc -l   # 要 = 7
cat jedi_evidence_classification/infra/classifier_container_runner.py jedi_evidence_classification/domain/exceptions.py docker/container_entrypoint.py docker/llm_clients.py docker/Dockerfile docker/rebuild.sh docker/requirements.txt | wc -l   # 要 ≈ 1476

第二步:把啟動指令交給決策者(你不能自己啟動)。/claude-security 這個 skill 帶 disable-model-invocation: true,模型用 Skill tool 叫會被擋;也不可以自己叫 Workflow 或自己派研究員/verifier 代替它——面板票數是工具算的、報告的驗證章蓋在那個數字上。這是刻意設計不是故障,撞到不要 debug、不要找繞路。

檔數對上後停下回報:說「檔數 7 已對上,可啟動」,並把下面兩行原樣附在回報裡交還給決策者,由決策者在本 session 親手打(單次送出、第二行不能省、每個新 session 都要重打):