# FR-134 交接紀錄（LOG）

> append-only：每棒追加一個 block，寫完不改。現況看同資料夾 `FR-134-STATE.md`。

## 第 1 棒 — 2026-10-10 — 首腦（需求討論→設計→開卡→派工驗收 29 張）

**做了什麼**
- 照 big-feature-workflow：草稿 → 四路探脈 → 討論稿（D1–D14 逐項拍板）→ design.md v1 → 登記 FR-134 → Notion 母卡 CM-2625＋30 張子卡 → 依序派工驗收。
- 追加 5 張：V0（DEV 真實掃描環境）、D4（結果頁匯出按鈕，漏項）、D5（改名＋專業用語＋CVE 連結）、D6（弱點表改版＋SBOM 元件分頁）、R1（整體風險評級）。
- 完成 29 張；剩 B2、R1、D5、G1～G4。

**關鍵 commit（首腦自己的）**
- BE `5c789beed` design 落地；`50bcd3ac6` 開卡產物；`88b70201c` H1 manifest 補登；`05726f1ee` C1 解析點清冊補登；`9c4ad4980` FR-132 守衛加 N 類；`710528dd1` source-scan 能力點補給既有 is_admin 角色
- PKG `759c2463` jedi-detection 整合測試套 008；`e77c551b` 沙箱 syft 開 javascript-package-cataloger

**決策**
- 第一版只收上傳、Git 第二版且畫面不出現；不做 CLI；工具併進既有沙箱；檢測工具入口同版做、伺服器端執行不派 Agent
- 新功能能力點由自己的 migration 發給既有 is_admin（FR-132 N 類），守衛驗檔存在且含該能力點
- 弱點資料庫權限 `system.vulndb.*` 非平台專屬＋SaaS 寫入要平台管理員
- 188／189、出貨基線重產、正式鑰驗章全進母卡「上線前檢查」

**推翻了什麼**
- **D6「不做總評、只給統計」→ 推翻，改採 R1 整體風險評級**（KEV→極高、Critical 或 EPSS≥10%→高、High→中、其餘→低；規則全引公開來源、附判定依據）。決策者看畫面後要一句話結論。
- **D2「嚴重度不上色」→ 推翻**，顏色是工具分級非系統總評。
- 顯示名「原始碼掃描」→「第三方元件風險」（名實不符、與 SonarQube 撞名）。
- 派工順序從 A→B→C 字母序改為「先讓功能在開發機跑起來」，出貨面全延後。

**教訓**
- **開卡沒先查程式就下指令，連錯三次**：B4 指定了 `is_platform=True` 的權限（客戶管理員拿不到）；B2 要 shell 另寫驗章（B3 已有）；匯出按鈕沒有任何卡負責。都是 runner 動手才發現。→ 開卡前先 grep。
- **首腦驗收曾用 `git stash`＋`git checkout <rev> -- .`** 想比對舊版，把 C1 runner 未 commit 的檔捲走，精準救回。→ 驗收只用唯讀 git，比對舊版另開 worktree。
- **只跑「相關」守衛就收卡，漏三處登記**（manifest、解析點清冊、FR-132 分類表）。→ 每張跑全套。
- **BE 守衛看不到套件內部測試**：H1 加欄位讓 jedi-detection 整合測試 24 支掛，到 A3 才抓到。→ 動到套件也跑該套件全套。
- **DEV 原本無法掃出真弱點**（inprocess 走 stub），畫面卡一直只能假資料驗。→ 開 V0 建真實環境後全面改用真資料驗收。
- 共用工作樹上的 dev server 會被 runner 改到一半的檔弄壞（路由指向還沒寫的檔）——屬正常現象，重新整理即可。

**未解**：route_guards.json 待統一重產；外呼守衛 httpx.stream 盲區；更新站未定。見 STATE §4。

## 第 2 棒 — 2026-10-11 — 首腦（裁示三案、驗收 R1／B2／D7、開 D7／D8／D9）

**做了什麼**
- 接手盤點；決策者三項裁示：①任務發起的掃描在清單看不到 → B 案開 D7；②結果頁改三分頁（風險總覽／弱點明細／元件清單），SBOM 元件分頁拿掉、原檔線上攤表 → D8；③報表只留完整技術版 → D9。另 D5 追加報表「公告」改「來源頁」。
- 派 R1 ∥ B2 ∥ D7，三張驗收通過 Done；派 D5。

**關鍵 commit（首腦）**：BE `06d6b07ce`、`f74af5d51`（裁示與開卡）。

**決策**
- 任務掃描清單權限沿用能力點、不加專案守門（要加須連結果頁一起，另案）。
- 報表不隱藏內部備註，顧問自行消化。

**推翻了什麼**
- 卡 D7 上「反查專案走 `task_assignees.project_id`」被 runner 推翻，改 canonical `JobProjectOwnershipQuery`——首腦採納，卡上那句是錯的。

**教訓**
- **開卡只 grep 程式、沒查 `domain-capabilities.md`**，寫進卡的反查路徑正是索引明禁的那條。runner 守了「先找既有能力」才沒錯下去。→ 開卡前兩樣都查。
- 首腦驗收在共用工作樹上有別棒半成品時，守衛改在 detached worktree 跑；worktree 會多 5 個環境紅（i18n 編譯檔、venv 內 license 套件路徑），要用「同環境前後 commit 各跑一次」排除，不能只看紅燈數。

**未解**：同 STATE §4（route_guards 待 D5 後重產、httpx.stream 守衛盲區、更新站未定）。

## 第 2 棒（續）— 2026-10-11 凌晨 — 首腦（D5／D9／D10／D11／D8 到站，三項新裁示）

**做了什麼**
- 驗收 D5、D9 Done；D8、D10、D11 程式面通過、畫面待決策者複測。功能卡全部到站。
- 決策者看畫面追加並處理：報表「公告」改「來源頁」（進 D5）；伺服器端工具畫面殘留（開 D10）；可刪除含批次（開 D11）；列操作統一專案風格、重掃併入操作欄（追加 D11／D8，決策者親自貼給跑中的 session）；結果頁「整體風險評級」卡隱藏（首腦直改 FE `7d3a3fd4`）；刪除被擋提示保留後端明細（首腦直改 FE `1e6bab41`）。

**決策**
- 報表只留完整技術版，不隱藏內部備註。
- 任務發起的掃描：所屬任務已刪的不列。
- 掃描紀錄只刪失敗的；受評系統可批次刪。
- **不再做無謂的突變測試**（決策者明令）。

**推翻了什麼**
- R1「整體風險評級」結果頁卡先藏：決策者質疑四級疊法非業界標準、我們非具公信力單位。首腦承認「規則全引公開來源」說得太滿——材料公開、公式自家。去留待 PM。

**教訓**
- **「給了 prompt」又被當成「已派」寫進 STATE**（D10），決策者糾正。runner 狀態一律以決策者確認為準。
- 決策者問「評級公式是業界的嗎」時，首腦答案一開始想把整個 R1 拔掉，被決策者攔下：**裁示要照字面做，不要自行放大範圍**。
- runner 推翻卡上指示（D7 反查路徑）是對的，首腦開卡沒查能力索引。
- 首腦補充給跑中的 runner，**唯一管道是決策者在那個 session 貼話**，寫 Notion 卡它看不到；要主動把「請貼給 X」講清楚。

**未解**：route_guards.json 待重產；R1 去留待 PM；DEV 測試資料清理等令；跑版決策者環境未重現。

## 第 2 棒（收尾）— 2026-10-11 清晨 — 首腦（G3 直做、arc 告一段落休眠）

**做了什麼**
- 決策者裁：本 FR 這次不進版；G3 現做、G1／G2 等進版前、G4 不發版；R1 暫緩；DEV 測資清空；四 repo push。
- 首腦直做 G3（`ac56ce8ab`）：規則 paths 六支補 FR-134 主專案檔、能力索引新四列（safe_extract／SandboxClient.scan／伺服器端工具／VulndbUpdateService.apply）＋「任務→專案」列補 D7 誤寫案例、超標檔清單更新、FR 登記表改「功能完成、未進版」。
- 重產 route_guards 時抓到三顆寫入鈕漏 v-can（匯出／清理失敗紀錄／開始掃描），補 FE `5f5934a3`。
- STATE 改成休眠版，§3 換成 12 項未完成清單；SUMMARY `2026-10-11-FR-134-SUMMARY.md`。

**arc 數字**：40 張卡、Done 36、G3 待驗、G1／G2／G4 等進版；BE 約 58 個 FR-134 commit、FE 26、套件 27。

**決策**：見第 2 棒兩個 block。

**教訓（本棒新增）**
- 重產 route_guards 要在「所有畫面卡 commit 後、沒有 runner 在跑」做，才抓得到漏 v-can 又不夾帶半成品——這次時機對了，一次抓到三顆。
- 決策者說「告一段落」時功能若未進版，SPEC／手冊不是本次收尾範圍，但**未完成清單要寫成表、每項寫誰裁與前置**，不然下次開工又要從母卡卡尾十幾段追加裡拼。

**未解**：全部在 STATE §3 表。

## 第 3 棒（上午）— 2026-10-11 — 首腦（D12～D14 開卡與驗收）

**做了什麼**
- D12 CM-2666：加 OSV-Scanner 第三家（套件 f51cd67b／0d16084e、BE 713b1c8e5、FE 8faca8c4）；新增主線 migration `2026-10-11-fr134-d12-findings-osv.sql`（出貨基線待重產）。
- D13 CM-2667：產物檔名改「名稱_種類_時間」（套件 b714842b）。驗收退回兩項：中文檔名炸 HTTP 標頭讓所有下載無回應（BE d738d4831、FE 398af281）、任務掃描檔名退路改用任務名／專案名／zip 名（套件 c225cb61）。
- D14 CM-2668：抽屜執行詳情時間格式、報告可預覽（FE a3c6b29d、BE 256adf4c5 重產權限矩陣）。

**決策**
- 任務重掃沿用建任務時的工具快照（`config.job_execution_detection_tools.tool_params`），D12 之前建的任務重掃沒有 OSV 屬設計。

**推翻了什麼**
- STATE／D12 回寫曾寫「DEV 下載卡住是 188 物件儲存讀檔問題」——誤判。真因是 D13 中文檔名炸標頭，已修。

**教訓**
- 下載整批無回應時先看回應標頭能不能編碼，再怪儲存層。

**未解**：見 STATE §3。

## 第 3 棒（下午）— 2026-10-11 — 首腦（D15～D18、退回補修、孤兒清理、守衛基準）

**做了什麼**
- D15 CM-2669 結果頁「顯示工具」勾選、沒掃的灰掉（FE b18add13）。
- D16 CM-2670 整體風險評級對外全藏、計算保留（套件 f8cad6c4、BE f3718c83a、FE ac92061a）；開關 FE `RISK_RATING_VISIBLE`＝false、BE `SOURCE_SCAN_RISK_RATING_VISIBLE` 預設 false。
- D17 CM-2671 工具格子顯示各家自己的編號與分數差異（FE 8f0c0b9b）。
- D18 CM-2672 畫面拿掉「伺服器端」字樣、重新執行旁加「沿用任務參數」提示（FE 1a53b3bb）；錯誤碼 `DETECTION_TOOLS_412003` 訊息保留。
- DEV 清理：7 筆 SBOM 孤兒 detection_executions 與群組已刪、對應證據軟刪（只動 DEV）。

**決策**
- R1 評級：全藏、計算保留、PM 要開再開開關（取代 STATE 原「待 PM 討論」）。
- Agent 與 Server：決策者問工具該不該放 Agent，首腦依隔離、工具形式、弱點庫更新模型三點答維持 Server，決策者接受。
- 錯誤碼 412003 訊息保留，首腦裁。

**推翻了什麼**
- STATE §3 第 2 項與 §4 第一點「R1 待 PM 討論」改為已裁。

**守衛基準變了**：全套守衛現為 8 紅——原基準 3 紅（permission_matrix job-evidence、unguarded survey、host_capabilities_are_seeded）＋5 紅在 D18 開卡前的 `6df463c1d` 就紅、非 FR-134 造成（notify_escaping 四案例、license-status 路由能力點）。套件基準 jedi-source-scan 155。

**教訓**
- 驗收退回要寫清楚退回項，補修才不漏（D13 退回兩項）。
- 基準變動要當場寫進 STATE，不然下棒把別人的紅算成新卡造成。

**未解**：見 STATE §3（新增第 13 項：非本 FR 的 5 紅）。

## 第 3 棒（傍晚）— 2026-10-11 — 首腦（G5／G6／G1／G2 驗收，STATE 收終局）

**做了什麼**
- 驗收 A 線：G5 CM-2673（`a99e865b8`）、G6 CM-2674（`4a7554a3c`）。G6 直連 188 基線庫實查 10 支／255 筆、STG 0 筆未碰、備份在；02-schema 刪除行只有 `\restrict` 與 `connection_type NOT NULL` 放寬。
- 驗收 B 線：G1 CM-2652（`80a5f8eb6`）、G2 CM-2653（`67afb114d`）。乾淨 worktree `mkdocs build --strict` 零警告且重 build 後 `site/` 與 HEAD 無差；禁句、「伺服器端」、「評級」零命中；手冊 `docs/user-manual/` 與 spec 站鏡像兩邊都改。
- STATE 收終局：§1 四卡狀態、10 支已套基線庫、守衛基準 8→7 紅；§3 第 3／4／6 項劃掉；§4、§9 改現況。

**決策**
- runner 寫進舊站 `docs/specs/current/` 的 10 支 `.dot` 判定不違規：只是流程圖圖源，CLAUDE.md 明寫「.dot 圖源仍以舊站為準」，既有 66 支同處。
- `docs/spec-site/site/` 兩百多個 HTML 被改屬正常：build 產物入版控，skill 要求一併 commit。

**推翻了什麼**
- 四位 runner（G5／G6／G1／G2）都回報「全套守衛 2 紅」，首腦乾淨 worktree 實跑皆為 7 紅。不是新紅，是 runner 跑的範圍較窄；STATE 基準改寫為「以全套實跑為準」。
- STATE 原寫「10 支只套 DEV」「G6 待排」「磁碟 4.4／9GB」，皆改為 G6 後實況。

**教訓**
- 收尾紀錄卡（G5）與基線重產卡（G6）平行跑時，G5 寫的 STATE 必然落後 G6 一步，要留一棒收終局；下次把「STATE 終局」排在所有收尾卡之後，不要與 G6 同批派。

**未解**：見 STATE §3（G4 發版、上線前檢查、更新站、跑版未重現、外呼守衛盲區）。
