FR-058 收尾派工單(2026-07-31)

給接手收尾的 session。 你的角色是協調者:把六項工作拆給多個 subagent 平行做,自己只做派工與抽查。 派 subagent 時不要帶 model 參數(繼承 1M context model),文件類派工單必寫「分段寫檔:先 Write 骨架再多次 Edit,不要一次寫完整份」。

項目 內容
範圍 B:完整收尾(SPEC / 手冊 / SUMMARY / Notion / memory)+ 三項技術債清理,但不 push、不進版
Notion 追蹤卡 見 §6(協調者已開,接手時 fetch 確認卡號)
Branch BE / FE / agent 三 repo 皆 feature/FR-058不切 branch、不 push
前置狀態 實作與實機驗證全部完成(見 §1)

§1 FR-058 做了什麼(寫文件的事實基礎)

1.1 四個工具接入

工具 code 連線型態 驗收狀態
ZAP zap API(客戶自備 daemon) 被動 ✅/主動 ✅/登入後對 SPA ❌(會打掛共用 ZAP,列後續案 CM-984)
CINC Auditor inspec SSH(Linux)+ WinRM(Windows) ✅ 雙 transport 實跑通過:151 pass 131/fail 60、160 pass 300/fail 472
Nmap nmap SSH(登入客戶的執行主機再掃目標) ✅ 實跑通過,HTML 證據可產出
GCB gcb 同 CINC(複用引擎,D7) ✅ 實跑通過(Demo profile 僅 2 項,鏈路驗證用)

1.2 平台級能力(不屬單一工具)

能力 說明 Notion
任務層敏感參數(FR-058.0) 原本只有租戶層憑證有 Fernet 加密,任務層參數是明文且 FE 執行紀錄會顯示。補上「DB 密文、僅派工傳輸與執行期明文、agent 用完即丟、FE 一律剝除」 CM-961
ID 解耦(D11) 派工 payload 夾帶 detection_tool_code,agent factory 改依 code 取 connector,移除硬編 id 映射 CM-958
互斥憑證組別 credential_group_schema 宣告欄位;測試連線由使用者明確選一組(不做自動偵測)、設定頁分區顯示 CM-986
憑證部分更新改 merge FE 只送有填值的 secret,BE 原本整包覆蓋 → 多 secret 工具(InSpec 三個)會洗掉沒動的憑證。改 merge 語意 CM-987
取消執行中任務 新 endpoint POST /detection-tools/jobs/<job_uid>/cancel,復用 CM-931 既有取消鏈路 CM-988
requires_credentials / requires_target_host 宣告欄位,解 FE 對 connection_type 的硬判耦合 CM-981

1.3 UI 改善(本輪)

  • 憑證分組左右並排獨立面板,Dialog 依組數動態加寬(≥2 組給 64rem)
  • 測試連線 Dialog 欄位標題改深色(淺灰被誤讀為停用)
  • 部署前說明 Dialog 加寬 64rem + 每段指令各自可複製(原本整份合併複製,兩套互斥腳本混在一起)
  • 工具卡同列等高、footer 貼底
  • 執行紀錄取消按鈕縮小並與 info icon 對調
  • 檢測工具摘要卡分開顯示執行主機與掃描目標(nmap 兩者不同)
  • 八個工具描述文案全面擴充(132–179 字,原 OpenVAS 只有 7 字)
  • profile 欄位改 select_or_text(下拉預置 + 自行輸入)

1.4 兩次改案(寫 discussion.html 必須反映)

  • D4:ZAP 證據 PDF → HTML。reports.generate 只把檔案寫進 ZAP 主機磁碟、回傳路徑字串,遠端部署模型下 agent 拿不到(ZAP issue #7821)。改走 core.htmlreport() + core.jsonreport() 雙格式
  • D9:Nmap 由 CLI 型改 SSH 型。容器化矛盾(agent 在 container 內看不到主機的 nmap)+ NPSL v0.95 §3 衍生作品條款明文涵蓋「專門執行 nmap 並解析結果」的軟體,但同條末段不主張控制「執行使用者早已安裝的 nmap」,SSH 型正落在此出口

1.5 D12(SPA 限制,嚴重度容易被低估

ZAP 登入後掃描對 SPA 不只是掃不到——logged_in_indicator 誤判引發登入無限重試,認證失敗累積到 ZAP 2.17.0 Insights 門檻後 daemon 主動關閉自己;而 ZAP 是全租戶共用服務,會連帶打斷其他租戶執行中的掃描。這是營運級風險,setup_guide 已明白標示「請勿對 SPA 使用登入後掃描」。


§2 六項工作

建議拆法:①②可各派一個 subagent;③④可合併給一個(都是小改動);⑤獨立;⑥要等前五項完成才寫。 各項彼此獨立,除 ⑥ 外可平行。

① SPEC 更新(走 writing-feature-specs skill)

檔案 要改什麼
docs/specs/current/system-admin/tool-plugin-manage.md(393 行) 主戰場。已有變更紀錄表(檔頭下方),照格式加一行。內文需更新:目前寫「已上線 OpenVAS / OpenSCAP 兩款」→ 實際已八款;補憑證分組、測試連線選組、部署前說明逐段複製、卡片等高、profile 下拉
docs/specs/current/project-management/project-task-edit.md 任務參數表單:四個新工具的參數、secret 欄位渲染、必填驗證、profile 下拉
docs/specs/current/audit-execution/my-tasks.md 執行紀錄:取消按鈕、摘要卡分開顯示執行主機與掃描目標

⚠️ 只改 docs/specs/current/,不要碰 docs/specs/v<X.Y.Z>/(那是凍結快照,永不再改)。

② 使用手冊更新

docs/user-manual/ — ⚠️ 實查該目錄目前對「檢測工具」grep 零命中,即完全沒有相關章節。現有檔案:lifecycle-and-use-cases.md教育訓練-全生命週期情境腳本.mddeveloper-setup-guide.md 等。

接手時先讀 docs/user-manual/README.md 決定要新增章節還是併入既有文件,不要憑猜。內容方向:四個新工具各自的用途、前提條件(客戶要準備什麼)、操作流程。寫給客戶看,不是寫給工程師看。

③ T-9.1 清 FE 硬編死碼工具清單

FE src/views/plugin/WorkflowSetupEditor.vuetoolsMenu = ["Nessus","Nmap","OWASP ZAP","Wireshark"]config.detection_tools 完全脫鉤。本案加入 ZAP 與 Nmap 後畫面上兩處都出現,其中一處是死的

先確認那段 code 的實際用途與呼叫端再改——若它有實際功能(不只是選單裝飾),要改成讀 API 而非直接刪。

④ T-9.2 補 docs/claude/database-schema.md

目前完全沒有 config schema 與 detection 三表的記載(grep 零命中): config.detection_toolsconfig.detection_tool_param_schemasconfig.tenant_detection_tool_configs (另有 config.job_execution_detection_toolscompliance.detection_executionscompliance.agent_tasks

照該檔既有格式寫。欄位以 DEV 實際 schema 為準(psql \d),不要照 migration 檔推測。

⑤ discussion.html 更新

docs/features/FR-058-2607-detection-tools-expansion/discussion.html(1060 行)。實查過期項:D12 零命中、SPA 零命中、requires_target_host 零命中、NPSL 僅 1 處(D9 改案前的舊記載)。互斥憑證組別也未反映。

🔴 不要動 mermaid 圖首行的 %%{init:...}%% —— 那是三次踩坑後的解:Artifact 雲端用內建 mermaid 渲染 pre.mermaid不執行頁面 script,頁尾自寫的 mermaid.initialize 只有本機直開有效,線上會糊成深底深字。

更新後是否要 republish Artifact 由協調者問決策者,不要自行發佈。

⑥ SUMMARY

docs/features/FR-058-2607-detection-tools-expansion/handoff/2026-07-31-fr058-arc-SUMMARY.md

內容:本案做了什麼(§1 可直接取用)、驗到哪、剩什麼、教訓。等前五項完成後才寫,才能把文件落點寫進去。


§3 明確排除(不要做)

項目 原因
push 三 repo 皆未 push,決策者裁示等全案驗收通過才推
進版(version-bump) 本輪不發版
更新 121 / 122 agent 🔴 環境異動鐵律:開發階段只動 DEV,非 DEV 部署等放行
動 STG / POC 的 DB 🔴 同上。任何 migration 只套 DEV
GCB content 產製 Demo profile 僅 2 項不足以給客戶展示,屬後續案 CM-992
改 Notion 22 張「修正待驗證」卡的狀態 等決策者驗證後才轉

§4 已知待處理(不在本單,但寫 SUMMARY 要提)

  • POC / STG 上四個工具顯示 available,但兩地 agent 停在 0.2.11 沒有對應 connector——使用者若設定並派工會拿到跑不動的結果。目前無人使用(租戶設定 0 筆、派工 0 筆)。上版時要一併處理
  • GCB Demo profile 只有 2 項,決策者實測後表示不能拿去給客戶 Demo(CM-992)
  • CM-974 第 5 條假設(SIGTERM 取消路徑)未驗——本輪走正常完成路徑,未觸發取消。可用新做的取消按鈕順便驗
  • config.detection_tools 沒有 i18n 機制——name / description / setup_guide / param_schema 的 label 全是中文寫死,切英文介面整頁仍是中文。決策者裁示先不動,屬平台級缺口(FR-056 建表時就存在)

§5 鐵則

  • 顯式 git add 檔名,禁 -am。BE working tree 有一批與本案無關的 untracked docs(v1.9-bugfix handoff、v1.8.0 交付 docx、ddd-layer-audit/ 等),絕不可帶進
  • 各 repo 分開 commit,message 中文說明,結尾帶 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
  • 不切 branch——發現 branch 不對停下問決策者
  • 憑證禁入版控
  • 文件類 subagent 派工單必寫「分段寫檔」(本專案已三次遇到一次寫大檔時 API 中斷)
  • subagent 不帶 model 參數(繼承 1M context)
  • 收尾類動作以外的事(新功能、改行為)不要順手做,發現問題回報決策者

§6 必讀座標

用途 路徑
本案完整脈絡(決策、教訓、經過) docs/features/FR-058-2607-detection-tools-expansion/handoff/2026-07-31-fr058-coordinator-midarc-handoff.md
設計與決策表 D1–D12 docs/features/FR-058-2607-detection-tools-expansion/design.md
GCB 三棒派工單 handoff/2026-07-31-fr058-batch4-gcb-dispatch.md
Notion 母案 CM-957 https://app.notion.com/p/3ad346da4cd081859d2ed8b21ca2697c
環境異動鐵律 CLAUDE.md「環境異動鐵律」段 + .claude/skills/sql-migration/SKILL.md 開頭

Notion 追蹤卡:協調者已開(接手時用 notion-search 找「FR-058 收尾」確認卡號),完成後回寫狀態與白話說明。


§7 派發用的短 prompt

接手 FR-058 的收尾工作(範圍 B:完整收尾但不 push、不進版)。

派工單:docs/features/FR-058-2607-detection-tools-expansion/handoff/2026-07-31-fr058-closing-dispatch.md
先完整讀該文,再依 §2 拆給多個 subagent 平行處理。

你的角色是協調者:派工 + 抽查,不自己寫文件。
subagent 不帶 model 參數;文件類派工單必寫「分段寫檔」。
§3 列的事情不要做(不 push、不進版、不動 STG/POC、不動 121/122)。

每完成一項回報一次,全部完成後寫 SUMMARY。