本卡屬 FR-166(母卡 CM-3109)收尾補齊(決策者 2026-10-27:沒有下期,不太大的支線這期一起做)。批 11(等 P5-1 合回;P5-3 同批,契約以 P5-1 回寫為準)。repo:agent。
這張卡做什麼(白話)
Agent 端一次補齊:總覽補「LDAP」「待傳/回傳失敗」兩盞燈,並顯示允許連入網段、監聽埠、離線操作者人數;只有「重啟」權限的人可以重啟(現在 ops 全要 configure);網路除錯每個 session 最多 20 個目標;手動第三方元件掃描結果經 outbox 回主系統;清冊有設備名時存下來給前端;主系統任務記派工人;掃描執行中回報逐台進度。
改哪些檔
改:core/console/overview.py(燈與資訊)
改:core/console/ops_routes.py(POST /restart 改要 restart scope,其餘維持 configure)
改:core/console/netdiag_routes.py(session 目標數上限)
改:core/outbox.py、core/task_sinks.py(LocalSink 對 sbom-scan 改送 P5-1 收件端)
改:core/allowed_targets.py(容忍帶名稱的新形狀,舊形狀照收)
改:core/local_runs.py、core/task_sinks.py(cloud 列 started_by 用派工人;逐台進度欄)
改:本機 DB 若要加欄,只能往 MIGRATIONS 尾巴加 v4
改:test/、test_fr166_guards.py(restart 路由權限變動要在守衛表態)
怎麼做
- restart 權限:只放寬 POST /api/ops/restart 一支;GET status 也給 restart 看得到;其餘 ops 照舊 configure。有突變測試。
- 20 目標:以 console session 計,超過回既有錯誤碼格式的 429/400,前端用 i18n。
- sbom 回傳:走 outbox 新 kind,冪等鍵 local_uid;主系統拒收照 P3-1 規則處理;離線時進待回傳。
- 逐台進度:掃描每完成一台更新 local_runs 的進度欄(例如 progress: {done, total}),GET runs/<uid> 回傳;不改既有欄位意義。
- 向下相容:主系統是舊版、沒帶設備名或派工人時照舊運作。
驗收
- Agent 全套 pytest 綠、test_fr166_guards.py 綠;各項有測試,權限與冪等有突變。
- 回寫列出給 P5-4(FE)的欄位契約。
紀律
- 先 git status;先 git merge ws-CM-3109 把前面批次併進來;顯式 git add 檔名,禁 -am;不切 branch;push 等令;不自派 subagent;只動 DEV。
- 不重複造輪子:先按行為 grep 既有實作,reuse → extend → 確認沒有才新增;不開 V2、不複製改兩行。檔案註解只寫為什麼與陷阱。超標檔只准拆不准塞。
- 資安規範讀 BE .claude/rules/security/ 八支;動到授權/密碼學要寫測試含突變。
- 做完 commit+卡上回寫(commit hash、改了哪些檔、reuse/extend/new、測試與突變、手測清單),狀態改「修正待驗證」。
建議模型與思考強度(首腦判斷)