FR-134 交接紀錄(LOG)

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

§1

第 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

第 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 守衛盲區、更新站未定)。

§3

第 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 測試資料清理等令;跑版決策者環境未重現。

§4

第 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 表。

§5

第 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。

§6

第 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 紅)。

§7

第 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 發版、上線前檢查、更新站、跑版未重現、外呼守衛盲區)。