本卡屬 FR-166(母卡 CM-母卡號(建完補)),卡 P2-8a,階段 P2 離線能做事、批 4。只改 evidence-agent。依賴:P1-3。
維運 API:優雅重啟、uptime、支援診斷包、證據檔儲存位置設定;把工具帳密的表單儲存抽成共用,儲存設定與 LDAP 都用它。
抽共用表單層是本案最重要的反義大利麵動作;重啟要優雅
extend(抽共用):tools.py 213 的表單儲存段抽成 secret_form.py,工具帳密與儲存設定、P4-1 的 LDAP 都用它;重啟掛 main_app.py 結束鉤子
repo:~/Projects/Billows/Audit-Manager/evidence-agent
改既有:main_app.py 31
改既有:core/console/tools.py 213(抽出)
改既有:core/console/ops_routes.py(P1-4 已掛的空殼,填內容;儲存設定路由也放這支)
新開:core/console/ops.py
新開:core/console/secret_form.py
新開:core/support_bundle.py
細節在 design.md 對應段(~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-166-2610-agent-standalone-console/design.md §5,開 design.html 看導覽),本段只列本卡要做到的點:
secret_form.py:通用「欄位定義→驗證→祕密欄進 credential_store、其餘進設定→測試 hook→套用 hook」;tools.py 既有工具帳密改用它,行數淨減。ops.py/ops_routes.py(P1-4 空殼填):重啟 when_idle/now(優雅:停接新、取消執行中標 cancelled、關 DB、exit 0;main_app.py 結束鉤子);uptime;支援診斷包(log 尾 2000 行、去敏設定、儀表板快照、最近 5 次診斷;不含證據、帳密、清冊);儲存設定四型別(欄位照 CLI configure-storage)套用後 storage reload。重啟 when_idle 等任務完才 exit 0、now 立即且任務標 cancelled;診斷包 zip 無帳密無清冊;儲存表單四型別存讀測;tools.py 行數淨減且既有工具帳密 tests 綠
對照雛形:~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-166-2610-agent-standalone-console/prototype/index.html(上方「跟著走」)。
docs/claude/domain-capabilities.md 與 FE docs/claude/frontend-overview.md §4。三擇一、預設不新增:reuse → extend 加參數 → 兩邊都確認沒有才新增。既有的是 stub/壞掉 → 修它或回報,不另寫繞過。回寫列出本卡 reuse 了哪些、新增了哪些、為什麼不能 reuse。if source == ... 分支。紅旗:複製一段既有函式改兩行、開 XxxV2/XxxForAgent、同一行為兩條路徑各自演化——出現就停下先抽共用。回寫列出哪些 extend 了既有的、哪些 new 及為什麼不能 extend。api//app//infra//scripts/sql/ 時 .claude/rules/security/ 八支自動載入(總覽 docs/claude/secure-coding-rules.md);FE 規則在 FE repo .claude/rules/security/frontend.md;Agent 與套件 repo 沒有自動載入,動手前讀 BE 的八支。本案特別要守:四種登入失敗同一回應、body 上限、subprocess 不經 shell、CERT_NONE 禁用、新表 RLS、argon2id 不回雜湊、密碼欄進遮罩。design §5.7 與討論稿 §13.6 有逐條對照。回寫列出本卡對到哪幾條、怎麼滿足。