# FR-074 檢測工具整合教學影片系列（Act 04）— 全案收口 SUMMARY

> 2026-09-04 收口｜母卡 CM-1535、子卡 CM-1536～1542｜user 逐章驗片通過（04-04 最終版 2026-09-04 確認 OK）
> 成品六章 **75:42**、28 段分段 mp4，交付於 test repo `reports/training-videos/GuidantAI-檢測工具整合教學-v1.19/`（不入版控）
> 本檔由 Notion 七張子卡回寫＋`fr074-04-04-{STATE,LOG}.md`＋兩 repo git log 濃縮，時長以 ffprobe 實量為準。

## 1. 成品座標

`compliance-manager-test/reports/training-videos/GuidantAI-檢測工具整合教學-v1.19/`

| 檔 | 時長 | 大小 |
|----|------|------|
| `GuidantAI-檢測工具整合教學-完整版.mp4`（00～05 串接；章節起點 00:00／01:50／19:16／27:21／47:56／74:09，見同目錄 `完整版-章節時間.txt`） | **75:42** | 365 MB |
| `GuidantAI-檢測工具教學-00-總開場.mp4` | 1:51 | 17 MB |
| `GuidantAI-檢測工具教學-01-檢測工具管理.mp4` | 17:26 | 107 MB |
| `GuidantAI-檢測工具教學-02-掃描設定檔管理.mp4` | 8:04 | 42 MB |
| `GuidantAI-檢測工具教學-03-任務設為檢測工具執行.mp4` | 20:36 | 94 MB |
| `GuidantAI-檢測工具教學-04-執行與結果回收.mp4` | 26:12 | 89 MB |
| `GuidantAI-檢測工具教學-05-總結.mp4` | 1:33 | 15 MB |
| `分段/`：01 a～f、02 a～c、03 a～i、04 a1／a2／b1～b5／c 共 26 支（00／05 單段即成片） | — | — |

工作檔（分段＋各章合併版）仍在 `reports/training-videos/chapters/04-detection-*.mp4`；重錄單段 → `training/scripts/merge-phase-videos.sh` → 手動搬進歸檔目錄取代。Playwright 原始檔在 `test-results/videos/training/passed/`（FR-074 的 <30s dry-run 短檔 74 支已歸 `superseded/`）。

## 2. 最終章節與段數（28 段）

| 章 | 段數 | @phase | 角色 | 實錄 | 原估 |
|----|------|--------|------|------|------|
| 04-00 總開場 | 1 | `intro`（流程卡四步＋旅程地圖四站） | admin | 1:51 | ~2 |
| 04-01 檢測工具管理 | 6 | `a-catalog`（八支工具逐一導覽）`b-openvas`（＋SonarQube）`c-openscap`（私鑰遮罩、部署前提、逐網段測試）`d-govern` `e-zap-nmap` `f-dual-cred`（GCB＋CINC 雙憑證組含 WinRM） | admin | 17:26 | ~8 |
| 04-02 掃描設定檔管理 | 3 | `a-concept` `b-upload` `c-controls` | admin | 8:04 | ~6 |
| 04-03 任務設為檢測工具執行 | 9 | `a-openscap-task` `b-gcb-task` `c-cinc-task` `d-nmap-task` `e-openvas-task` `f-zap-task` `g-sonarqube-task` `h-multi-agent`（多組分派＋排程）`i-review` | PM Bob | 20:36 | ~7 |
| 04-04 執行與結果回收 | 8 | `a1-start-ssh`（PM 發動）`a2-start-api`（執行者確認＋SonarQube 上傳發動）【切點】`b1-result-os` `b2-result-cinc-nmap` `b3-result-web`（ZAP）`b5-result-vuln`（OpenVAS）`b4-result-sonar` `c-rerun`（PM 規劃頁） | Bob→Alex→Bob | 26:12 | ~7 |
| 04-05 總結 | 1 | `summary` | — | 1:33 | ~1.5 |
| **合計** | **28** | | | **75:42** | ~30 |

段數沿革：開案 13 段 → SonarQube 入戲 14 → 七支工具全示範 22（04-03 8、04-04 7）→ 04-01 加 E／F 成 6、04-03 加 Seg-H 成 9、04-04 拆 B5 成 8 → 28。

## 3. commits

### test repo `compliance-manager-test`（branch `feature/FR-069.5`，未 push）

| commit | 卡 | 內容 |
|--------|----|------|
| `3ee3a45` | 首腦 | Act README＋六章 outline（13 段） |
| `e1dd5a8` `2f87dff` `0cfcee5` `47c84e1` `afddc18` | 首腦 | outline 調整：50 網段目標改 190、SonarQube 入戲、Seg-C 逐網段測試、Seg-B 選 50 網段 Agent、OpenSCAP 基準改下拉 |
| `6457281` | CM-1536 | S0 地基：四頁 page object＋業務 step、私鑰遮罩、env 變數、smoke 全綠 |
| `1f03666` | CM-1536（含 CM-1538 staged 改動） | 設定檔 page object 三處修正（版更 header／送出鈕／Tab 收面板）＋ InputSwitch 改 `isChecked()` 兩處＋pages README 更正 |
| `335e1b4` `918afe7` | CM-1536 | 補報告預覽三支 step；補任務描述／完成留言 step、「第 N 筆任務」跨控制項連續編號 |
| `d015eb5` | CM-1537 | 04-00／04-05 純字卡兩支 |
| `9a6d13a` `7bee50e` `f93ef2b` `439f9b9` `0c641be` `5290537` `f3800ce` | CM-1538 | 04-01：四段→Seg-C 重錄（SCAP content）→Seg-A 補八支工具重錄（1:36→3:20）→加 Seg-E／F 七支全設定→六段合併 15:44→17:28 |
| `7276692` `219bcdc` `fea6197` | CM-1539 | 04-02：三段＋示範 profile zip→Seg-C 改公版→合併 8:06→清 190 五筆測試設定檔 |
| `20c5ceb` `86d0a3e` `cd17c12` | 首腦 | 04-03／04-04 擴七支工具；Nmap 改 60.168；OpenSCAP 目標改 60.162 |
| `ea736f9` `974a804` `325fcf2` `fe170e7` | CM-1540 | 04-03 八段錄完→指派人員改 id 定位＋冪等→user 驗片修正（merge 去頭 8 秒、ZAP 靶站、新增 Seg-H）九段 20:37→outline 同步 |
| `83db57b` `c745cb3` | 首腦 | 04-04 B 段是否等排程組：先改文案帶過，再撤回改等八組全成功 |
| `a1d2ace` `05f0941` `0e6dab8` `1346fa8` | CM-1541 第 1 棒 | 阻塞診斷→A1／A2 改劇本→A1 錄→A2 錄＋修 S0 上傳 bug |
| `4cb71f9` | CM-1541 第 2 棒 | B1～C 五段＋B5 新增，八段合併 26:23 |
| `15f7b7f` | CM-1541 第 3 棒 | 統計導覽 selector 誤圈＋OpenVAS PDF 卡死修正，B1～B5 重錄 |
| `772c9ec` | CM-1542 | 收口：README 對齊 28 段＋實錄時長、六章 03-status 填實、preview-overlays 補流程卡／旅程地圖對照、dry-run 短檔歸 superseded |

### BE repo `compliance-manager-be`（branch `feature/FR-069.5`，未 push）

| commit | 內容 |
|--------|------|
| `9cc83b6f` | 開案：design.md 定案（6 章 13 段、190 亮色、7 子卡） |
| `f997b494` `359fcb7b` `a8dc8fcd` | design 同步：50 網段目標改 190、SonarQube 入戲 14 段、七支工具 22 段 |
| `230e2862` | 對話歸檔：CM-1540 04-03 製作 |
| `be9ee974` `c19ed2b6` `699118ee` `5bbeb453` | 04-04 四棒 STATE／LOG |
| （本次） | 本 SUMMARY＋design 變更紀錄＋README 登記表狀態 |

## 4. 對原大綱的重大偏離（皆 user 拍板）

1. **七支可用工具全設定、全設任務、全執行**（2026-09-03）。原案只示範 OpenVAS＋OpenSCAP 設定、OpenSCAP＋GCB 兩任務；user 定調「證明每支都做得到」，04-01 4→6 段（E ZAP＋Nmap、F GCB＋CINC 雙憑證組含 WinRM）、04-03 4→8、04-04 3→7；Nessus 為 coming_soon 只提一句。總時長 ~30 → 75 分鐘。
2. **04-04 A 段改 PM 發動**。原案「執行者 Alex 逐一按開始執行」在產品上不成立——任務要 PM 在規劃頁按「開始執行任務」才轉 PROCESSING，且該動作 `_auto_dispatch_detection_scans` 會自動派掉六支非上傳型任務的第一次掃描；執行者抽屜沒有「開始執行」鈕。A1 改 PM 視角、A2 改執行者視角，只有 SonarQube（上傳型）保留手動發動示範。選「改劇本」而非「清資料」：清執行紀錄屬 190 寫入型異動，且 CINC 真實失敗反成 C 段素材。
3. **04-04 C 段改走規劃頁**。`vw_user_job_queue` 硬篩 `user_id = 當前使用者`，PM 在「我的任務」一筆都看不到（產品設計非 bug）；改在規劃頁任務面板回顧設定＋說明重跑取消。
4. **OpenSCAP 掃描目標改 60.162**（Ubuntu 24.04 原生 SSG content）。60.166～168 是 26.04，上游 ssg 0.1.79 沒出 26.04 內容檔；04-01 Seg-C 測試連線靠 `cp 2404 → 2604` 權宜通過（三台都做，`oscap info` 標題仍是 24.04，不適合真實稽核），04-03 任務則直接換目標避開。
5. **Nmap 任務執行主機改 60.168**。nmap 裝在被掃目標而非 Agent（NPSL 授權不隨 Agent 發布），190 沒裝；Agent 改 `60-ubuntu-2604-lab-03`。
6. **ZAP 靶站改 60.165 OWASP Juice Shop**（user 驗片後）。原掃主站 190 被動掃描 0 發現；換靶站順勢補「只掃有授權的練習靶站」說明卡。
7. **04-03 新增 Seg-H 多組分派與排程**（user 驗片要求）。拿 OpenSCAP 任務加第二組（guidant-server 掃 190、排程當晚 22:00），排在總覽之前成獨立段，原總覽順延 Seg-I；理由：多 Agent／排程是跨工具通用能力，塞進 A 段會被誤讀為 OpenSCAP 專屬。
8. 其他：04-01 Seg-A 補「八支工具逐一認識」（user 審片：所有工具都要說明）；04-02 Seg-C 控制項清單改用公版 TWGCB-01-014（190 api 容器沒裝 cinc-auditor，自有設定檔抽取必失敗，STG／POC 同樣）；04-03 Seg-A 掃描基準改「從下拉選」（190 param_schema 為純 select）；04-04 OpenVAS 自 B3 拆出 B5（第一輪逾時，merge 腳本改 B5 動態選配）。

## 5. 踩到的坑與教訓

| 坑 | 發生在 | 根因／修法 | 教訓 |
|----|--------|-----------|------|
| **CINC sudoers** | 04-04 A2 | 部署前提腳本只開 `oscap` NOPASSWD，CINC 死在 `Sudo cannot prompt for password because there is no terminal`；user 補 `NOPASSWD: ALL` 後重跑成功 | 部署前提說明與實際工具需求不對等（見 follow-up） |
| **OpenVAS 逾時** | 04-04 | 掃 190 一輪超過 3600s 上限逾時失敗、無報告；第二輪 42 分鐘成功（86 findings）。逾時不留 task_id 無法補拉 | 錄影前把 `timeout_sec` 調大或換小目標；交接檔的「正在跑」是快照不是承諾，接手要重查 |
| **PDF 報告 headless 不能預覽** | 04-04 B5 | OpenVAS 報告是唯一 PDF，headless Chromium 無 PDF viewer，iframe 走 download 流程永遠轉圈；改導覽「下載報告」鈕 | 沿用別段模板前先查該段特有資料形狀（`upload_files.file_ext`） |
| **統計導覽 selector 全段誤圈** | 04-04 B1～B5 七處 | `.exec-info-grid` 抓到 metadata 區塊不是「掃描結果統計」；改 `text="掃描結果統計" >> xpath=..` | `SKIP_OVERLAYS` 綠燈只證明元素存在、不證明圈對；最終驗收一定要真的看畫面 |
| **任務未發動無開始執行鈕** | 04-04 開錄前 | 見偏離 2；唯讀盤點（Playwright probe＋DB SELECT）定位到是產品前置流程，不是 selector | 開錄前唯讀盤點是最值錢的動作，否則會誤診成「S0 step 寫錯」去改 S0 |
| **Escape 關 dialog** | 04-02 S0 | AutoComplete 收面板按 Escape 會連 PrimeVue Dialog 一起關；改 Tab | PrimeVue quirk |
| **指派人員 placeholder 定位** | 04-03 | MultiSelect `display="chip"` 存過人 placeholder 消失，正式錄第一輪 A～G 七段全掛；改 `[id^='pp-task-assignees-']` 定位＋冪等（讀 `aria-selected` 不讀 class，突變測試驗證） | 「先驗證再正式錄」的標準流程必然觸發「同段錄第二次」狀態差，locator 不可綁一次性狀態 |
| **InputSwitch class 判斷** | 04-01 Seg-C | `p-inputswitch-checked` 是未用佈景的 class，永遠判「關」把 sudo 反手關掉且靜默綠燈；改 `isChecked()`＋點完再驗 | 佈景 class 不可當狀態來源；靜默寫反比報錯更危險 |
| **GCB／CINC 無 findings** | 04-04 B1／B2 | summary 只有 pass/fail/error/notapplicable，`應看到發現項目統計` 必逾時；拿掉斷言改字卡口徑 | |
| **auto 完成任務從預設清單消失** | 04-04 A2 | GCB auto 掃完即 COMPLETED，「我的任務」預設篩進行中；每段開頭先篩「全部」 | |
| **合併裸接閃爍** | 04-03 | 未照 SOP 關 4 去頭；merge 腳本加 `TRIM_HEAD`（預設 8，換章要實測）；04-01 逐段實測裁切（2～5s 不等）未寫死 | 裁切秒數是逐段實測值，各章各段不同 |
| **口頭秒數不可盲信** | 04-04 第 4 棒 | user 說「後 8 秒」剪掉，逐幀核對發現會切到總結卡，改 5 秒 | 下刀前先截圖核對邊界 |
| **平行 session commit 撞車** | CM-1538／1539 | 兩 session 同 branch，一方 staged 檔被另一方 commit 帶走（`1f03666` 訊息掛 CM-1536，內容含 CM-1538 改動）；未改寫歷史 | 同 branch 平行跑要錯開或分 branch；追溯以 Notion 卡回寫為準 |
| **unique constraint 症狀誤導** | 04-02 | 同名設定檔撞 `uq_dp_tool_tenant_name`，錯誤顯示在下一步「dialog mask 擋住搜尋框」 | 「後面那步壞掉」要往前一步看 |
| **字卡真實換行** | 04-04 第 2 棒 | Gherkin 參數要單行用 `\n` 字面值，貼真實換行 parse error | |
| **S0 上傳 bug** | 04-04 A2 | 直接對隱藏 input `setInputFiles` 跳過 `pickSourceFile(row)`，檔案落 `_default` key、按鈕維持 disabled 但 toast 顯示成功；改走 filechooser 真實路徑 | 症狀「看起來成功但按不下去」極具欺騙性 |

## 6. Follow-up（未結，需另開卡或決策）

1. **BE log 印 request body 含私鑰明文**：`app_mw.before_request` 印 Request Body 全文，儲存 OpenSCAP／WinRM 設定時私鑰／密碼明文進 `guidant-api` log（DB 是加密的，log 不是）。user 2026-09-03 裁「記錄不修」（memory `followup_be_logs_request_body_plaintext_credentials`）。
2. **OpenVAS 逾時不留 task_id、無法補拉報告**：逾時判失敗後 OpenVAS 端可能還在跑甚至跑完，但平台沒存 task id，事後拉不到報告；建議逾時時保留 task id 供補拉，或 `timeout_sec` 預設對 OpenVAS 放寬。
3. **部署前提腳本 sudoers 只開 oscap**：「部署前提說明」給的腳本只授權 `oscap`，CINC Auditor（以及其他需 sudo 的 SSH 型工具）掃描會失敗；腳本應依已啟用工具產生對應 sudoers 或明講需 `NOPASSWD: ALL`。
4. **PDF 報告 headless 預覽**：教學管線無法示範 PDF 報告預覽（環境限制）；若日後要錄，需 headed 或改用 pdf.js 內嵌檢視。產品端 iframe 預覽 PDF 在一般瀏覽器可用，非產品 bug。
5. **merge 裁切秒數各章要實測**：`TRIM_HEAD` 預設 8 是 04-03 規劃頁量的；04-01 逐段 2～5s 手裁、04-04 沿用 8 另加整片去頭 6／去尾 5。重錄任一章前先截圖量再合。
6. 其他已記在各章 `03-status.md`：60.166～168 的 2604 SCAP content 是 2404 複製品，上游補齊後應換回；190 api 容器未裝 cinc-auditor（STG／POC 同）；S0 smoke 的 SonarQube「停用」斷言已改啟用（`86d0a3e`）；04-01 Seg-A 錄在「已設定」狀態非純淨初始。

## 7. 190 留下的狀態（04-04 素材，不要清）

七支工具全 enabled＋test success；專案「2027 CMMC 2.0 Level1 年度稽核」第一群組前 7 個評估項目各掛一個檢測任務（OpenSCAP 兩組），全部指派 Alex Wang，七任務全成功（含 OpenVAS 重跑）、OpenSCAP 一組已人工結案 COMPLETED、GCB 自動結案；04-02 錄影產生的 5 筆自有設定檔已清。SonarQube 171 上有 `Guidant-AI-billows-portal` 專案。

## 8. 交接檔與文件座標

- 設計：`docs/features/FR-074-2609-detection-tools-training-videos/design.md`
- 04-04 四棒交接：同目錄 `handoff/fr074-04-04-STATE.md`（living，已結案）／`fr074-04-04-LOG.md`（append-only）
- test repo：`training/chapters/04-detection-tools/README.md`（Act 索引＋事前準備＋成品座標）、各章 `02-outline.md`（劇本 canonical）、`03-status.md`（實錄結果與坑）
- Notion：母卡 CM-1535；子卡 CM-1536（S0）、1537（00／05）、1538（04-01）、1539（04-02）、1540（04-03）、1541（04-04）、1542（收口）
