---
title: "FR-139 交接日誌（LOG）"
eyebrow: "FR-139 · append-only"
---

> 每棒收棒追加一 block：commits、決策、教訓、推翻了什麼。只追加不改舊 block。

## 2026-10-14 首腦：討論→定案→開卡

- commits：`7f1413116` 討論稿與四頁雛形；`54dec49b9` design.md；`4e2691b46` 補定七條；`b188135fb` 卡號回填。
- 決策者裁定過程：P1～P8 逐題裁；附件獨立一表（推翻首腦「沿用程序書池加種類欄」）；比對只做控制項與 AO；還原整份不逐項（推翻首腦提的 Google Sheet 式逐項還原）；資源庫終身只綁一個專案（推翻首腦「結案後可再啟動」建議）；資源庫無公版、scope 留著。
- 撰稿者查到的現況陷阱（已進 design 坑節）：範本 SSP 管理員守門因解析器未 wire 走不到；「複製資源庫」不存在；實施狀態 DEV 2,133 筆 unknown。
- 開卡者調整：守門分流從卡 1 併入 T-9。

## 2026-10-14 T-1 驗收 Done、第 2 波派出

- T-1（CM-2749）BE `f94e9ef99`／FE `f65e15dc`。首腦以 test client 走 `LoginService.generate_jwt_token` 產 token 實打四條手測全過（token 是白名單制，自造 token 會回 TOKEN_401005；`create_app()` 不註冊 blueprint，要照 main.py 迴圈自己 register）。
- 批次存 API 契約定在卡上，T-2 照接。實施狀態單筆 PUT 與專案側未加驗證，留 T-3 統一收。
- 第 2 波 T-2／T-2b／T-3／T-5 四棒平行派出。

## 2026-10-14 T-2 驗收 Done

- FE `83c3c20a`。首腦用 Playwright 注入正規 token（localStorage `cm_store.accessToken`）開 DEV 資源庫 460 實測：欄位、六項下拉、暫存計數、單一批次 PUT、DB 帶 ns；只改備註按儲存不洗掉缺失。runner 自主把卡片單筆儲存改走批次 API，避免舊單筆 API 把沒送的欄位當清空——首腦認可。
- 順帶看到 `/control-defaults/<cid>/attachments` GET 已回 200，T-2b 的 BE 端點已接上。

## 2026-10-14 T-2b 驗收 Done

- BE `0f5cd4554`／FE `382930bb`。瀏覽器實跑上傳→DB 落地→刪除→實體檔保留；migration 合規；148 測試綠。
- runner 三個卡上沒寫、首腦認可的決定：①表加 `ssp_id` 冗餘欄（範圍檢查與存版複製都以 SSP 為單位）；②刪附件只刪列不刪實體檔（跨版共用 file_id，同程序書池慣例）；③補 `_file_ownership.py` 的 provider（沒補則預覽／下載一律 404；讀放行、從檔案端刪拒）。
- 留給 T-5／T-8：`SspControlAttachmentDomainService.clone_by_id_map(src_ssp_id, dst_ssp_id, ir_id_map, statement_id_map, user, ...)`，稽核凍結不呼叫。
- 工作樹觀察：T-3 runner 與首腦共用同一個 BE checkout（26 個未 commit 改動在 Excel 匯入相關檔），首腦不 pull／不 checkout；驗收用 origin 比對＋test client。

## 2026-10-14 T-3 驗收 Done

- BE `d62513d88`／FE `7c78f0c8`／jedi-oscal-v2 `dca8e050`（未發版）。端到端只填缺失匯入，現況未洗、104 筆 skipped；套件突變紅。
- 套件改 update 模式 IR／statement props 逐鍵合併（空字串刪鍵、None 忽略）；資源庫完整匯入由 replace 改 update 合併；實施狀態驗證改讀 system_menus，連 T-1 刻意沒做的單筆 PUT 與專案側也補了。DEV 無 `not_implemented`／`inherited` 殘值，不必搬。
- 順手修的陷阱：完整匯入原本每列都寫「適用」，合併後會把不適用翻回適用，改成只有狀態有填或標不納入才寫。
- 首腦踩到：verify 回的 item 含 `errors` 鍵，原樣送 save 會 422；FE 不會這樣送。後續 runner 用 test client 打匯入時只送 schema 欄位。

## 2026-10-14 T-5 驗收 Done、第 2 波全收

- BE `2f1036083`／FE `254ac4ac`。實打存版→版本 uid 讀舊版→寫入 409；快照 frozen、筆數一致、revisions 帶 predecessor。
- runner 開工前先回寫契約（T-6／T-7／T-10 照接）再動手，是好做法；完成後兩處調整（版本 uid 放資源庫 uid 位置、備份同交易）都比原契約簡單且正確。
- 留給後棒：`SspVersionService.create_version(...)`（T-7 還原／T-10 送審在交易內呼叫）、`SspSnapshotExtras.build_id_maps／copy`（T-7／T-8 在 deep_clone／snapshot 之後補程序書掛載、附件、風險）。
- 路徑 B（控制項現況匯入）的匯入前備份要等 T-8 改指向後才走得到，目前單元測試覆蓋。

## 2026-10-15 首腦換手（第 1 棒 → 第 2 棒）

- 第 1 棒首腦 session「[R1]SSP 重構-1」：討論→定案→開卡→驗收 T-1／T-2／T-2b／T-3／T-5，context 過半，於第 3 波五張剛派出、尚無回寫時換手。
- 換手時狀態：T-6／T-7／T-8 In progress；T-4／T-3b prompt 已給、卡尚未改狀態。
- 第 2 棒首腦第一件事：確認 T-4／T-3b 是否動起來；**T-8 runner 會先回寫「複製鏈盤點」然後停下等首腦看過才動程式**，這是硬前置，要主動去看 CM-2757 並回寫「可以動」或修正意見。
- 驗收固定做法見本 LOG 前幾個 block（test client token、blueprint 註冊、Playwright 注入、不 pull 工作樹）。
- 決策者 2026-10-15 裁：jedi-oscal-v2 發版等 arc 收口一起；T-3 四項補裁見 CM-2752 卡末。

## 2026-10-15 第 2 棒首腦：T-4／T-3b 驗收 Done、T-8 盤點審過

- T-4 BE `07eae5758`：DB 直查 460 範本 SSP 控制項 26／AO 10 條帶 gap、「缺口：」殘留 0；test client 打控制項與 AO 端點、訪談表匯出 36 列缺失非空；Playwright 開 CRA.I.2.b 看到現況與缺失分開。token 產法補一條：`generate_jwt_token` 的 claims callback 要查 user，必須包在 `system_context()`＋`session_scope()` 裡，否則 RLS fail-closed 回 None。
- T-3b FE `e1354cee`：runner 誠實標未跑瀏覽器，首腦補跑兩個預覽流程（資源庫匯入現況資料對話框、SSP 完整匯入預覽）三欄都在、確認框文案是「合併」；驗收後刪 parse job 42 與 upload_files 4893／4894。Playwright 上傳用 `setInputFiles` 直接餵 `input[type=file]`，別等 filechooser。
- T-8 盤點審過：核對三個斷言（準備期工作啟動模式會回寫 AO props、409010 已被 T-5 用掉、IN_USE 無人用）都成立。六項裁示回寫卡末：啟動時補控制項改只讀；軟刪專案算綁過、刪資源庫只看未軟刪；複製資源庫連 AO 流程範本各複製一份；準備期工作不再回寫 AO props；一對一 `MODULE_FRAME_409011`、刪除 reuse 409003；複製邏輯新檔。盤點第二節兩點屬 T-9，已記進 STATE。

## 2026-10-15 第 2 棒首腦：T-6／T-7 驗收 Done、子需求四開卡（第 5 波）

- T-7 BE `b116c451a`／`8c65cdfb8`、FE `6f291f21`：實打 429 比對 v1→v2、跨資源庫比對 400、還原預覽；還原到 v1 再還原回 v2，指標與備份版各換一次、附件跟著複製；Playwright 比對頁四態與還原確認框正確。429 多了 v5／v6（首腦往返），不刪。
- T-6 BE `f79685514`、FE `4e9cbbf4`：runner 無瀏覽器，首腦補跑——存版對話框、版本歷史、唯讀開舊版（提示列、鈕全消失、欄位鎖）、批次維護匯入項灰掉。
- 決策者新增子需求四：匯出排序怪、版面對齊業界、中英文匯出。首腦查明根因（`sorted(titles)` 字串排序、無群組層、要求原文空、三欄沒印）；上網比對 FedRAMP Rev 5／CMMC L2／NIST 800-18 r2 版面；OSCAL 無多語系機制，用本專案既有 `_trans`＋failover 機制接 catalog。決策者裁：控制項標題也要英文、套件可動、匯入加下拉、CRA 中英整併。
- 開四張卡 CM-2761～2764（opus subagent 撰寫，七處行號／路徑修正已進卡：task_execution_query 實際在 infra/flow_control、`_resolve_inscope_catalog` 所在檔 959 行超標要抽新檔、`/ssp/<uid>/export` 已有 `locale` 參數、兩支 FE view 超標要抽 composable、框架 error code 在 flow_control_error_code、T-8 工作樹有未 commit 改動、整併 migration 新裝要安全跳過）。
- 首腦踩到：Playwright 上傳用 `setInputFiles` 餵 `input[type=file]`；PrimeVue 列操作是 icon button 無 name，用 `tbody tr >> button` 依序點；textarea 的值 innerText 抓不到，以截圖為準。

## 2026-10-15 第 2 棒首腦：T-8 驗收 Done、T-11／T-12 派出

- T-8 BE `5b96e02c6`／FE `d04f28c2`：DB 核三份複製品與三個專案指向、無新 SSP、資源庫 AO props 未被污染、AO 流程範本零重疊；實打 409 兩條與刪除守門；在資源庫改備註直接落在專案 living SSP；Playwright 走複製對話框再刪複製品。
- 抓到一處形狀：兩條守門 `if query is not None and …`，與 T-5 匯出「漏接線寧可炸」相反，請 runner 同卡補強不另開卡。
- 順帶看到專案側 `GET /ssp/<uid>/control-implementations/<cid>` 不回 remarks，記給 T-9。
- Playwright 坑：資源庫列表 `/module-frame/module-frame`（不是 `/module-frame`）；列操作是 Button 開 Menu，選單項用 `.p-menuitem-text` 找。

## 2026-10-15 第 2 棒首腦：T-11 驗收 Done

- BE `85d2cd7ef`：匯出 460 docx／pdf，五群組順序＝左樹、40 條 H3 依 sort_order、AO 表帶狀態／現況／缺失、Revision History v1～v5、無 `partial` 代碼與「缺口：」殘留；規劃頁樹改走抽出的 `inscope_catalog_resolver` 後專案側 control-tree 不變。
- runner 自主判斷認可：狀態標籤先英文（`system_menus` 實查只有英文 value）、修訂表去作者欄。
- 踩到：runner 回寫寫「已 push」時 origin 還沒有，驗收先用本機 commit、Done 等看到 origin 才改。

## 2026-10-15 第 2 棒首腦：T-12 驗收 Done、011 套 DEV

- BE `f248d7f41`／套件 `163d9ba0`。runner 推翻卡上「460／459 profile 改指 2112」前提：資源庫 catalog 是深複製品（2138／2137），011 改成連九份 zh 複製品一起「存中文進翻譯表、主表換英文」。首腦 DB 複核無漏網、自跑 dry-run 筆數一致後套 DEV 並登記；重跑 0 列。
- 套後 docx 匯出與專案 control-tree 依 Accept-Language 切中英，三張翻譯表 47／382／1,968。
- 推翻了什麼：上一棒收口待辦寫「007／008 合併進 002」，runner 指出 011 要 007 當翻譯來源，改為保留；STATE 已改。
- 踩到：`/ssp/<uid>/control-tree` 對資源庫範本 SSP 回 404 是既有行為（範本不綁專案），不是 T-12 弄壞，驗資源庫側要用匯出或專案 SSP。

## 2026-10-15 第 2 棒首腦：T-9 驗收 Done

- BE `790bb7bce`／FE `b76e28ad`。共用 SSP 寫入守門先判範本（`template_ssp_id` 直比，含軟刪）再要 `oscal.resource-library.update`；舊 `is_admin` 範本守門拿掉。runner 自跑 reviewer、寫 analysis 文件、19 支 `living_ssp_id` 讀取端盤點全只讀。
- 首腦驗：`ssp_source` 兩模式正確、blsadmin 兩模式寫入 200、Playwright 1408 唯讀＋提示、1404 不變。403 路徑信 runner 實打＋9 條測試與突變。
- runner 決定首腦認可：`ssp_context_resolver` 不接（會失去讀取的專案成員檢查）；共用路由能力點不放寬。
- 轉決策者一題：子公司能否用總部分享資源庫開專案（記進 STATE 等裁）。

## 2026-10-15 第 2 棒首腦：T-10 驗收 Done（子需求一～三全收）

- BE `2297e7de9`／FE `f50e1100`。DB 核送審版帶輪次 id、送審快照與凍結是兩份 SSP、附件只進送審快照；實打三個資源庫 412／412／201 與詳情 `audit_lock` 一致；Playwright 鎖寫提示文字正確。
- runner 決定首腦認可：鎖寫掛共同入口一處而非 T-9 掛點（掛點被呼叫前必先過共同入口）；送審存版放在凍結前（凍結後已鎖存不進）。
- 同類形狀再現：`_audit_lock is not None` 靜默放行，與 T-8 一併請 runner 補 raise。
- 兩題轉決策者（STATE「等決策者裁的」）。首腦探針在 461 留 v1。

## 2026-10-15 第 2 棒首腦：T-12b 驗收 Done

- BE `6b7b42edf`／套件 `4f0b1fe9`／FE `37c81f17`。首腦在交易內用 CMMC 195 真實結構實跑：改一個代號→`GRC_400148` 零寫入；全中文→6／15／59 列、主表不變；rollback。
- 推翻了什麼：卡上寫「用 `repo.update(entity, locale=…)` 寫翻譯」是錯的——jedi_common 翻譯列不存在時會連主表一起改；runner 改用只寫 `_trans` 的 upsert。首腦寫卡時沒實查這條，記教訓。
- 首腦踩到：token 注入 session 的 `currentTenant` 是使用者自己的租戶（102），平台管理員頁（`isPlatformAdmin` 要 root 租戶）與 `v-can` 守的鈕都進不去；要驗這類頁面得走真登入或注入 `tenants`＋`currentTenant=1`＋capability 清單。本卡 FE 留雷門複測。

## 2026-10-15 第 2 棒首腦：T-13 驗收 Done——十六張實作卡全收

- BE `244efaeb0`／FE `29119cbe`。runner 無 token 走不了 HTTP，首腦補打三語＋400＋CRA locale 回歸；docx 逐份核三處兩語並列無重複；Playwright 走匯出彈窗下載 `_zh.docx`。
- runner 決定首腦認可：`lang` 與 `locale` 分開（CRA 路徑零改動）；狀態中文進 `.po` 而非程式對照表；FE 用彈窗取代下拉（選單內放不下）。
- 本棒統計：第 2 棒首腦共驗收 T-4／T-3b／T-7／T-6／T-8／T-11／T-12／T-9／T-10／T-12b／T-13 十一張，開第 5 波四張卡，套件 011 整併套 DEV，兩題轉決策者。
- 母卡收口待辦已整理進 STATE，等決策者下令。

## 2026-10-15 決策者裁示兩題

- 子公司不用分享資源庫開專案（資源庫可匯出匯入即可），T-9 行為維持。
- 母範本已於 12:21 由 admin 發布回去；首腦先前查錯表（在 `workflow_templates` 找，實際在 `compliance.flow_templates`，`status` 欄在那張表）。

## 2026-10-15 T-12 複測回歸：catalog-tree 500

- 決策者點框架版本「2024/2847」500；首腦查 log 定位 `framework_version_edit_service._flatten` → jedi_common `get_all_by_fields` 帶 locale 走 failover 對 `CatalogGroupQueryEntity.to_dict()`，三個 catalog query entity 都沒有。runner 套件 `52c2a53d` 補 `to_dict`＋真 entity 測試；首腦實打四組 200、回歸掃四條 200。
- 教訓：翻譯 failover 只有真 entity 打得到，單元替身測不到；動 translatable repo 的卡，驗收必實打帶語言的讀取端。首腦自己驗收 T-12 時也只打了匯出與 control-tree，沒打框架編輯頁的 catalog-tree——漏掉一支讀取端。
- 母範本查錯表：`compliance.flow_templates` 才有 `status`，不是 `workflow_templates`。

## 2026-10-15 T-10 複測回歸：軟刪專案仍鎖資源庫

- 決策者刪 462／463（專案 1409／1410 已軟刪）回 412。根因 `module_frame_audit_lock._latest_round_of` 用 `get_by_living_ssp_id` 找專案沒排除 `deleted_at`，軟刪專案的輪次仍鎖。T-8 的刪除守門只看活專案是對的，被 T-10 鎖寫蓋過。
- 決策者裁：專案刪了資源庫就要能刪。退 T-10 runner 修。
- 教訓：T-8 與 T-10 各自定義「綁定專案」時沒對齊（一個排除軟刪、一個不排除）；首腦驗收 T-10 時只驗了活專案的鎖，沒驗「專案刪後解鎖」這條反向路徑。

## 2026-10-15 T-8 複測問題：複製對話框進行中可取消

- 決策者按複製後能按取消／X；`ResourceLibraryCopyDialog.vue` 只有複製鈕掛 loading。退 T-8 runner 純 FE 修，順帶把兩處守門 raise 一起做。

## 2026-10-15 T-8 複測追加：一對一與刪除守門要在 UI 反灰＋提示

- 決策者點名 UI 沒擋（建專案下拉仍列綁過的庫、列表「建立專案」「刪除」可按，到最後才 409）。BE 守門正確；追加 menu／list 回 `ever_bound`／`has_live_project` 兩旗標＋FE 三處反灰與 tooltip。併進 T-8 回歸段一起修。
- 教訓：BE 擋了不等於功能完成——使用者看得到的入口沒反灰，就是填完整張表才撞牆。開卡時「手測」段要寫到「入口反灰」這一層。

## 2026-10-15 T-10 回歸修復 Done（決策者親測）

- BE `06bef3850`：軟刪專案不再鎖資源庫。runner commit 留本機未 push，首腦代 push。決策者畫面複測通過，免首腦重打。
- T-10 的 `_audit_lock` raise 補強併進 T-8 那輪。

## 2026-10-15 複測裁示：暫存擴全頁＋頁首群組鈕 → 開 T-14（CM-2767）

- 決策者發現暫存只存控制項、基本資料另有儲存鈕，語意混淆；裁暫存擴成全頁（基本資料併入）、改名「儲存」、四鈕合成 SplitButton（先例 SurveyManage.vue:588）。設計 D12／§6.3 原本就把暫存限在控制項層，屬設計層級的修正，不是 runner 的錯。

## 2026-10-15 複測裁示：差異著色在檢視頁、收比對頁 → 開 T-15（CM-2768）

- 決策者先說「先不動看反應」，半小時內改裁「藏比對頁、在預覽頁用顏色標變動、所有資料都比」。推翻 D11「只比控制項與 AO」。首腦點出 restore_preview 已把 12 張子表配對算筆數，擴成回明細即可、不另寫 diff。
- 推翻了什麼：STATE 第 9 條「先不動」改成定案；首腦原本要改的「hint_scope 文案」不做，整頁收掉。

## 2026-10-15 複測裁示：唯讀改文字顯示 → 開 T-16（CM-2769）

- 決策者看規劃頁唯讀（T-9）灰框「真的超醜」。T-6 檢視舊版同一套，一張卡兩頁一起改：ReadonlyField 元件＋狀態 Tag，兩個旗標餵同一個 displayMode prop。與 T-15 著色協調：以欄位容器為單位標色。
- T-14 runner 回寫修正待驗證（FE c17f7c3f），首腦讀 code 無問題，瀏覽器驗收被決策者暫停、改談需求，待續。

## 2026-10-15 子需求五：流程套用到其他任務 → 開 T-17（CM-2772）

- 決策者裁併進 FR-139。首腦先提「同來源／同控制項／全專案」三層，決策者推翻：不要分層概念，讓使用者從 AO 樹自己勾或全選就好。首腦查 DEV：1404 58 任務／43 種來源範本，證明全蓋會抹平刻意不同的流程，故全選要二次確認、只套 TODO。卡上點出最大坑：啟動時 XML 有注入目標 job uid，套用不能原封搬、要重做注入。
- 推翻了什麼：首腦的「同來源預設」設計；首腦第一版 T-17 spec 已作廢重寫。
- T-15／T-16 派出進行中。

## 2026-10-15 T-8 補修／T-14／T-15 Done

- T-8：守門 raise 兩處、list／menu 旗標一次 GROUP BY、FE 反灰＋對話框鎖；首腦實打旗標與 DB 一致、142 綠。T-10 的 `_audit_lock` 跳過未改，收口統一。
- T-14：決策者直接在 runner 視窗給五筆回饋（兩顆選單鈕、匯出改對話框、歷史頁去存版鈕、列表 tooltip／改名），runner 順手做完；決策者親測，首腦只讀 code。
- T-15：compare 契約向下相容（新鍵 tabs／tab_counts）、135 綠、路由停用。runner 抓到共用比對兩個誤報根源在匯入差異程式，記 follow-up 待裁。
- 決策者追加：輪次規劃頁不掛 T-9 同步提示列（那頁本來整頁不可改），併 T-16。
- 首腦教訓：決策者會直接在 runner 視窗裁示擴大範圍（五筆回饋），首腦事後從 commit 訊息「決策者回饋」識別並入表，不回頭質疑授權（既有 memory）。

## 2026-10-15 T-16 主體驗過、缺追加項退回

- FE `5697c176`：新模式規劃頁與檢視舊版頁唯讀改文字（標籤＋段落＋清單），兩支超標頁變短。runner 回寫在首腦 append 追加項之前，「輪次頁不掛提示列」沒做，退回補。
- 首腦踩到：1408～1410 已被決策者軟刪，規劃頁空白一度看起來像 T-16 回歸；查 log「GRC 專案不存在」＋DB deleted_at 才確認是資料不是 code。另建 469／1497 當新模式固定驗收資料。

## 2026-10-15 T-16 追加修正複核；T-15 抓到基本資料沒進版本

- FE `f8a5f1dd`（決策者複測回饋：規劃頁要看得到備註／缺失／缺失修改建議／建議附件）首腦用 469／1497 Playwright 核過：控制項與 AO 兩層六項全文字顯示、附件只列清單、零寫入。**輪次規劃頁提示列仍未拆**，卡維持 In progress；FE 工作樹另有 runner 未 commit 的版面整理，首腦不碰。
- FE `aa64e4c9`（T-18）：決策者在 runner 視窗裁「本輪流程走完時自動分類鈕整顆不顯示」，runner 已做。T-18 仍修正待驗證。
- T-15 決策者實測抓到設計缺口：資源庫「基本資料」七欄不在 SSP、存版沒帶、舊版永遠顯示最新值、比對也比不到。首腦查過 `_version_as_module_frame` 與 `ssp_versions` 結構確認屬實，不是哪棒做錯。建議另開卡（JSONB 存六欄、檢視換值、compare 加頁籤、還原不動、舊版灰字），待裁。
- 首腦踩到：驗收 token 腳本要在 repo 根目錄跑且 `.env` 的 Fernet 鍵要載進來（shell 先 export 過空值會蓋掉 `load_dotenv`），否則 create_app 在 DI 初始化就炸；SSP 控制項路由掛在 `/api/1.0/ssp/...`，沒有 `/oscal` 前綴。

## 2026-10-15 裁示：基本資料進版本 → 開 T-19（CM-2773）；T-16 二次排版核過；T-17 回寫

- 決策者裁照首腦建議：另開卡不併 T-15；快照存六欄、發布狀態不存（假三態）；還原不動基本資料；舊版本灰字不補。T-15 維持 Done，卡尾指路。
- FE `35d81f77`（T-16 第三版，決策者三點：大框可收合、狀態不重複、不要帶框帶底的提示卡）首腦 1497 實看過：平鋪段落、標題列只一個狀態標籤、附件併在建議底下。**輪次頁提示列仍未拆**，卡維持 In progress。
- T-17 runner 回寫修正待驗證：BE `9129fd196`（同輪 AO 任務清單、只套待辦、保留目標自己的任務）、FE `68805f78`（流程編輯器存檔後才可按「套用到其他任務」、勾選樹、全選紅色二次確認；入口放編輯器不放超標的規劃頁）。首腦尚未核。

## 2026-10-15 T-16 Done（決策者親驗）

- FE 四版收斂：`5697c176` 唯讀改文字 → `f8a5f1dd` 六欄補齊 → `35d81f77` 可收合／狀態不重複／去提示卡 → `12f5aaea` 條列懸掛縮排＋補充欄位兩欄表。
- **「輪次規劃頁不掛同步提示列」作廢**：追加項從頭沒實作，決策者實看後裁可收。STATE 表格欄位名已拿掉那半句，別再當待辦追。
- 教訓：追加項掛在卡尾、runner 回寫在 append 之前就看不到；之後追加要改標題或直接改狀態退回，不只 append。

## 2026-10-15 T-17／T-18 Done

- T-18：決策者裁「要加」後 runner 動了三支套件加選填掛點（`ea554468`）＋宿主 `52029d477`。首腦實打 1321 第 1 輪三個寫入點全 412、第 2 輪放行，探針資料原路清掉。套件未發版、path dependency 未 commit，進收口清單（jedi 發版從一支變四支）。
- T-17：決策者親驗收。runner 把入口放流程編輯器存檔鈕旁而非卡上寫的規劃頁 AO 卡（規劃頁超標＋套用本來就是存檔後的動作），判斷正確，首腦不退。
- 另見無卡號 commit `62be9edc4`（任務指派先選部門），決策者在 runner 視窗直裁，首腦只登記不質疑。
- 決策者新報：匯出 SSP 現況缺「缺失修改建議」，首腦接著查。

## 2026-10-15 決策者報匯出缺欄 → 實為順序錯，開 T-20（CM-2774）

- 決策者先報「匯出 SSP 現況缺缺失修改建議」。首腦用 469／1497 實匯三條（專案 Excel、資源庫 Excel、docx）三欄都在；決策者再看確認是**順序**不對：Excel 控制項照識別碼字母排、無群組、AO 照標題排，與左側樹不一致。
- 根因：T-11 只把 docx 接到 `inscope_catalog_resolver`，兩支 Excel writer 各自 `sorted()`。T-20 把兩邊接到同一份、排序抽新檔。不加群組列（會改匯入契約）。
- 教訓：使用者說「缺」常是「找不到」，先問是哪一頁哪顆鈕哪個物件再動手查，首腦這次繞了三條路由才問。

## 2026-10-15 T-19 Done；決策者報匯入沒自動存版 → 開 T-21（CM-2775）

- T-19 決策者親驗：BE `6a0fdc4d2`／FE `49461344`，migration 已套 DEV、基線待重產清單多一支。
- 匯入存版缺口：design D11 定「匯入前自動存一版」，實際三條匯入只有 SSP Excel 整份匯入接了 `backup_before_import`；控制項現況 Excel 與 docx 兩條沒接。DEV 全庫 import-backup 僅 1 筆。T-5 LOG 早記「路徑 B 要等 T-8 改指向後才走得到」，T-8 後無人回頭——**「等 X 之後再接」這種待辦要在 X 的卡上掛尾註，不能只留在 LOG**。
- 首腦 context 已長（摘要過一次），建議決策者換 session 冷接；STATE 已標。

## 2026-10-15 決策者看不到基本資料差異＝BE 沒重啟；開 T-22／T-23

- T-19 runner 回寫明寫「沒重啟共用 BE」，首腦收卡時沒先重啟就讓決策者看，決策者看不到著色。首腦重啟後 compare 回 basic_info 兩筆差異。**教訓：runner 標「沒重啟」的卡，首腦驗收第一步是重啟，不是看 commit。**
- 決策者看畫面追加兩張：T-22 批次維護選單匯入／匯出對調（FE 兩行）；T-23 Excel 樣板「適用控制項」黃底語意改「可填」、控制項資訊欄白底＋工作表保護（原本黃底跟著 required 旗標走，control_id／statement 是系統給的卻是黃的；全樣板沒有任何保護）。

## 2026-10-15 決策者定原則：樣板「適用控制項」＝現況資料 Excel 拔出來 → T-24 改收斂卡

- 首腦先把 T-24 寫成「樣板預覽補三件事」，決策者糾正：那個 sheet 就該等同現況說明的匯入匯出，只是特別拔出來成一份獨立 Excel。改成收斂卡：同欄位／同 parser／同預覽／同寫入，差異提示做一次。
- 盤點：欄位（9+3 同列 vs 12 父子列）、parser、預覽各兩套，差異提示兩邊都沒有。留一件要裁：版面 (a)/(b)，首腦建議 (b)。T-23 黃底鎖定連動等裁。
- 教訓：使用者報「缺欄位」時先問「這東西應該跟誰一樣」，答案常是「跟既有那套一樣」而不是「補到一樣」——收斂優先於補丁（先查再寫鐵則的設計版）。

## 2026-10-15 T-24 版面裁定：照現況資料那份，不另選

- 首腦提 (a)/(b) 兩案要決策者選，決策者一句「不是就跟現況資料的內容一樣就好」——樣板分頁照現況資料 Excel 的欄位與版面，現況檔不動。首腦多想了一層。
- T-24 可派；T-23 排在 T-24 之後做在收斂後版面上。

## 2026-10-15 決策者裁：新模式專案規劃頁不顯示「匯入現況資料」→ 併入 T-22

- 理由：現況資料顧問一律去資源庫維護，專案側唯讀（T-9），反灰鈕只會被當成壞掉。整顆不顯示、匯出保留、舊模式照舊。與 T-18「入口整顆不顯示」同一原則：**唯讀是暫時狀態才反灰附原因，永久不可做的入口直接拿掉**。

## 2026-10-15 任務配置匯出 500（T-12 回歸）首腦直修 `5be32fc9a`

- 決策者按「匯出任務配置」撞 500，log 一查是 `job_export_query.py` NameError：T-12 把 `locale = resolve_locale()` 放進 `resolve_project_uid`，用到的 `get_export_data` 沒定義。一行搬家，守衛綠，重打 200。
- 首腦破例直修而不開卡：一行、無設計決策、正在擋決策者手測。
- 教訓：T-12 改了 20 支讀取端只驗「重啟無錯」，按需觸發的端點（匯出）沒實打。**改多支讀取端的卡，驗證清單要逐支列端點實打**，收口 reviewer 掃 T-12 的其他 19 支是否也有同型錯（grep `locale=locale` 所在方法有沒有定義）。

## 2026-10-15 樣板「適用控制項」順序也跑掉 → 併 T-24

- T-20 只接了現況資料兩支 writer；完整樣板的分頁是第三支（`ssp_import_template_app_service` 從 profile tree 組列），決策者下載樣板抓到。不另開卡：T-24 收斂後該分頁走 T-20 修好的那支，順序自然對。

## 2026-10-15 T-20／T-21／T-22／T-23 Done（決策者親驗）

- 四張一次收。T-23 做在舊版面上（runner 先於 T-24 開工），T-24 收斂時要把黃底／鎖定搬到新版面，已寫在 T-24 卡。
- 剩 T-24 一張，做完進母卡收口；收口建議換 session。

## 2026-10-15 T-23 退回：標頭顏色與內文相反（首腦卡寫錯）

- 決策者開樣板抓到「適用控制項」標頭還是照 required 上色（識別碼黃、可填欄灰），與內文黃底相反。首腦卡上明寫「標頭列維持不動」，runner 照做——**錯在首腦**，不在 runner。退回補：標頭與內文同規則，其他分頁不動。
- 教訓：定「顏色＝語意」的規則時，標頭與內文是同一條規則的兩個落點，卡上分開講就會分開做；寫卡時把「哪些地方要一致」列成一句。

## 2026-10-15 第 2 棒首腦交接（收 21 張、開 6 張補強）

- **本棒做了什麼**：驗收並收 T-4、T-3b、T-6～T-16、T-17、T-18、T-19、T-20、T-21、T-22 共 21 張；開 T-19～T-24 六張補強（全部來自決策者複測）；直修兩處回歸（T-10 軟刪專案不鎖 `06bef3850`、T-12 任務匯出 NameError `5be32fc9a`）。
- **交接時狀態**：T-23 標頭補回（`32d0316a2`）待決策者驗；T-24 runner 進行中。收完兩張進母卡收口，收口另開 session。
- **本棒三條最值得留的教訓**：① runner 回寫「沒重啟共用 BE」的卡，首腦驗收第一步是重啟（T-19 決策者看不到著色）；② 使用者說「缺／壞」先問「這東西應該跟誰一樣」，答案常是「跟既有那套一樣」（T-24 從補丁改成收斂）；③ 「顏色＝語意」這種規則，標頭與內文是同一條規則的兩個落點，卡上分開寫就會分開做（T-23 退回）。
- **決策者下一棒**：有一個較大的新需求，收口後走 big-feature-workflow。

## 2026-10-15 T-23 Done（決策者親驗標頭）

- BE `32d0316a2` 標頭與內文同規則。26／27，只剩 T-24。

## 2026-10-15 T-24 Done（第 3 棒首腦實跑驗收）；27 張全收，進母卡收口

- 決策者複測後追加六筆 FE 調整（順序、拔摘要欄、分頁順序、拿徽章、外觀、基本資料欄序），runner 全只跑 build；首腦用 DEV 469 實跑：樣板欄位＝現況資料 12 欄＋「納入 Profile」、順序＝樹、黃灰與鎖定對；改檔上傳預覽只標改過兩列、程序書紅字「找不到」、徽章「3 處變動」；預覽二改 AO 建議後 confirm 存的是預覽值；零變動匯入自動存 import-backup 版。探針原路清回。
- 坑：首腦第一次用 `POST /ssp/<uuid>/excel-import/upload` 上傳，那條強制 `source_type=ssp`，confirm 不替資源庫存備份版；資源庫頁走通用 `/ssp-excel-imports/parse` 帶 `source_type=module_frame` 才會。**驗 T-21 類「資源庫側」行為要用資源庫入口**，不要拿 SSP 範圍入口頂。
- runner 判「完全嵌用資源庫預覽元件並退役 `SheetPreviewControls.vue`」會砍功能（納入 Profile／配對／移除），只補欄不換元件；首腦認可，另列待裁。
- 決策者三裁：比對誤報開小卡查證匯入預覽；雷門複測三項驗過；新需求「資源庫層任務初始化」釐清三條（只給顧問名稱／描述／指南、任務不進版本、任務匯入加兩欄共用），收口後開 FR。
- 新需求分析要點（討論稿材料）：任務是流程實例子項、資源庫階段無輪次；建資源庫時跑既有 `PrepJobGenerationService` 長任務、啟動改認領不複製；必修缺口兩個——啟動展開只認第一個 userTask、覆核輪重長任務會洗掉名稱／描述／指南且只配一筆；守門要加資源庫編輯權分流；既有資源庫與範圍變更要「同步任務骨架」只補不刪；複製資源庫連任務帶走。
- 補裁（同日）：T-24 預覽「配對狀態」欄不拿掉、預覽元件不換成資源庫那套。T-24 無待裁項。

## 2026-10-15 收口開卡：CM-2779 母卡＋C-1～C-5（CM-2780～2784）

- 五張：C-1 程式收口（守門 raise、70 處 locale、62be9edc4 補核、T-21 紅測試、比對誤報查證）／C-2 四支套件發版與 pin 還原＋GRC_403069 與 ssp_source 鏡像／C-3 arc review 三 repo＋拆一支超標檔／C-4 基線重產清單（只回報）＋權限矩陣／C-5 spec、手冊、Notion 收 Done。e2e 不做。
- 決策者中途問「需要拆這麼多嗎、這次不包版」，首腦先縮到三張又被補「基線也要做」，最後決策者理解 arc review 用途後裁「全做」。Notion 卡狀態來回改了三次（C-3 暫緩→Not started、C-4 取消註記→撤回）。**教訓：決策者提疑問先答問題，不要先動卡**——問「需要這麼多嗎」是在問用途，不是下令縮範圍；首腦把疑問當指令，多做了三輪 Notion 回寫。
- Notion 狀態選單沒有「取消」，只有「暫緩」。

## 2026-10-15 C-1 程式收口 Done（首腦實打驗收）

- BE `d4427e319`（守門 raise＋T-21 紅測試補注入）、`fc136b50a`（匯入預覽共用比對修共用信箱配錯人與資產底線欄位，版本比對側刪重複繞路）。70 處 locale 逐支核全有定義，端點實打表 20 餘條全 200。`62be9edc4` 核過無改動。
- 首腦驗：重啟 BE 後 460 已填樣板原封重傳，責任人員三筆「無變更」（修前一筆變更、一筆消失、一筆新增）。
- follow-up 不開卡：① 460／469 原檔重傳預覽「元件」頁固定多一筆「This System 新增」——匯出樣板印「本系統」列、DB 無對應，FR-038 時代既有，與 FR-139 無關；② runner 報三支打不到：`workflow_execution_service.start_workflow_execution` 全專案無呼叫者、`module_frame_import_service`（YAML）前端沒用、`module_frame_item` 新增子項回 500（子範本沒帶租戶被 RLS 擋、方法無 transaction）前端只用 `/item/xml`——C-3 reviewer 看要不要下架。
- 坑：首腦驗收前 BE 跑的是 C-3 改匯入 app service 之前的程式，先重啟再驗（照 2026-10-15 教訓）。

## 2026-10-15 C-3 arc review Done（首腦實打驗收）；建議級 22 條首腦歸類

- 六支 reviewer 平行掃三 repo。阻斷級 7 條：6 條 runner 已修（資源庫匯入現況沒存備份版 `a51072ec1`——T-21 接在規劃頁那條、T-22 又把那顆鈕拿掉，顧問實際用的路徑從沒備份過；批次存清空備註寫 None 被 repo 略過 `188668b9f`；三支超標檔拆 `de4de7503`／`43f8ece80`；GRC_400150 FE i18n `01fb4acd`；docx 匯入紅測試 `ee3680bb0`），1 條套件 pin 歸 C-2。
- 首腦實打 B1／B2 通過。坑：資源庫「匯入現況資料」是三步（`/file/upload` 的 `json` 要當檔案 part 帶 `upload_type=REFERENCE_DOCUMENT`→verify→import，items 要去掉 `errors` 鍵），直接丟 multipart 到 import 會當零筆成功。
- 建議級 22 條首腦歸類：**要決策者裁 5 條**——①docx 重複匯入資源庫會靜默洗掉建議附件與三欄（二擇一：快照掛回／改走合併）②「沒接線就跳過」同型還有三處（送審存版、匯入確認端稽核鎖、鎖元件本身）要不要一次改 raise（連帶改既有測試）③規劃頁實施狀態下拉寫死五值少「未評估」違反 D20（舊模式仍可編）④`ModuleFrame.vue` 超標淨增 33 行要不要這次拆⑤兩張新表 RLS 一條 FOR ALL 認不認可（認可就改判準文字）。**建議這次就修的小項 4 條**（可併一張小卡）：套用到其他任務的 FE 按鈕權限與 BE 不一致會 403、部門載入失敗清掉已選指派、框架匯入語言必填沒檢查、三處註解帶卡號。**記錄不修 13 條**：清最後一個值存不進（arc 前既有、共用 helper）、套用單目標錯記跳過整批照存、變動比對失敗只 log、三套件守門選填無測試鎖、DI 檔越線、app 層 new query 七處、resolve_current_ssp 壞掉被繞、AO 驗證三份、長函式變長、備份四份同段、型別設計七點、design 版本來源字眼（C-5 改 spec）。
- 教訓：runner 卡上寫「拆 ssp_control_implementation_service」，runner 順手把另外兩支也拆了（是阻斷級），好事；但 `ModuleFrame.vue` 同為阻斷卻沒拆，理由是「要手測」——**前端拆檔要有 Playwright 可跑的手測清單才派得動**，開卡時要先給。
- 補裁（同日）：五條全照首腦建議——docx 改合併、三處守門 raise、狀態下拉讀選單＋匯出 unknown→planned、`ModuleFrame.vue` 不拆、RLS FOR ALL 認可。決策者對「未評估」問「不是 OSCAL 標準可以加嗎」——答案在 D20：產品擴充值、DEV 既有 2,133 筆、匯出轉標準值；**設計裁過的事決策者會忘，回答時指回 D 編號並附資料筆數**。開 C-6 CM-2798 收七件修正，排第二波，C-2 發版等它。

## 2026-10-15 C-4 回報兩組守衛紅；首腦歸屬：A 非本 arc、B 併 C-6、survey 非本 arc

- C-4 runner 重跑權限矩陣後 `test_permission_matrix_three_way` 1 紅變 2 紅，另 `test/security` 有 survey 兩條 GET 未登記。runner 正確地沒 commit（工作樹混 C-6／FR-140 未 commit 改動）。
- 歸屬（首腦 blame）：**A** 任務抽屜證據連結／留言寫入掛讀權限——FE `4b8384495`／`fe986245b` 2026-10-07～08 FR-132 時代，非本 arc，**follow-up**；**B** 四個寫入觸發點沒掛 v-can——T-2b／T-7／T-8 新元件，本 FR 漏掛，併 C-6；**survey 兩條 GET**——FR-069 CM-1482 搬套件殘留，非本 arc，**follow-up**。
- C-4 等 C-6 commit 後重跑矩陣只 add 自己五個檔；預期只剩 A 一條紅。
- 事故：C-4 runner 誤跑 `git stash`＋`pop`，首腦核工作樹與 stash 清單沒丟東西。**派 sonnet 跑機械卡仍要在 prompt 寫「禁 stash」**。
- 教訓：runner 回寫 Notion 時把測試輸出貼成表格，兩組紅的內容被截掉，首腦得自己重跑才看得到——**回寫貼錯誤用 code block 不用表格**。

## 2026-10-15 C-6 review 修正批 Done（首腦實打 docx 合併）

- BE `cbe0211d4`／FE `b2792a58`。首腦用 CMMC 資源庫 437 植入附件＋缺失＋備註後，把它自己的 docx 匯入確認：三樣都在、import-backup v1 出現。
- 坑三個：① 463 是決策者 14:35 軟刪的（STATE 早記了），parse 回「模組框架不存在」是對的，首腦花了四輪才想起來——**實打前先看 STATE 的驗收資料清單**；② docx parse 要帶 `framework=cmmc-l1`＋`mode=statement_only`，CRA 無 docx adapter，469 不能當 docx 驗收資料；③ SSP 的 JSON／YAML 匯出已退役，C-6 ③ 的匯出轉值只有單元測試可證，無 live route。
- 連帶：design D4「docx 匯入不動」推翻 → C-5 改 spec。

## 2026-10-15 C-4 Done；C-2 範圍改三支（jedi-compliance-audit 留給 FR-140）

- C-4 `79f625eaf`：矩陣與路由清單重產、守衛登記頁頭選單；守衛 7 過 1 紅（A 組 FR-132 遺留）。基線重產三支清單進 STATE，188 等決策者排。
- 決策者裁 C-2 只發 oscal-v2／survey／evidence-classification 三支；compliance-audit 因 FR-140 正在改，pin 維持註解、path 維持打開，`GRC_403069`／`ssp_source` 鏡像順延到 FR-140 發版。**兩個 FR 共用一支套件時，發版歸後動的那個 arc**。

## 2026-10-15 C-2 Done（三支發版、pin 還原；compliance-audit 留 FR-140）

- 套件 `d66fb255` bump oscal-v2 2.6.0／survey 1.2.5／evidence-classification 1.6.7 推 Nexus；BE `5354198bf` 還原三支 pin、指定套件名 `poetry update`。首腦核：site-packages 無 editable、lock source 為 nexus、poetry 快取 nexus 目錄有三個 wheel、Nexus simple 頁最新版相符；CRA 207 catalog-tree zh／en 翻譯表讀取正確。
- **出貨前硬條件**：compliance-audit 仍 path dependency（1.3.7 無 T-18 掛點），FR-140 收口發版時一併還原 pin＋補鏡像兩項。STATE 已標 🔴。
- 坑：Nexus simple 頁匿名 401、pip index 因 http 非 trusted 被忽略；驗「真的在 Nexus」要讀 `~/Library/Application Support/pypoetry/auth.toml` 的 http-basic.nexus 帶 Basic 打 simple 頁，或看 poetry 快取 `cache/repositories/nexus` 與 lock 的 source。
- 更正：上 block 寫「Nexus simple 頁最新版相符」是首腦先寫後跑、腳本炸在 keychain 取密碼，**沒驗到**；Nexus 證據只有 lock source、poetry 快取 wheel、無 editable 三項。**驗收紀錄要等指令跑完再寫，不可先寫結論再補跑**。

## 2026-10-15 C-5 Done → FR-139 收口完成

- C-5 `0ae4ceda0`：九頁 spec、RLS 判準三處、新手冊 `resource-library-interview-guide.md`、FR 站與 spec 站重 build；Notion 母卡與三張子需求 Done。首腦核 mkdocs strict exit 0、沿革字眼零命中。
- 收口六卡 CM-2780～2784＋2798 全 Done，收口母卡 CM-2779 Done。
- **出貨前兩件歸 FR-140／決策者**：① compliance-audit 發版＋pin 還原＋兩項鏡像；② 188 基線重產三支。
- 本 arc 教訓彙整（給 memory）：runner 回寫「沒重啟 BE」首腦先重啟再驗；使用者說「缺／壞」先問「應該跟誰一樣」；顏色＝語意規則標頭與內文同寫；決策者提疑問先答再動卡；驗收紀錄等指令跑完再寫；實打前先看 STATE 驗收資料清單（軟刪的 463）；資源庫側行為要用資源庫入口驗。

## 2026-10-16 舊手冊 lifecycle-and-use-cases.md 裁退役重寫 → CM-2801

- 首腦查：檔頭 v3.0／2026-03-29，內文仍是 AP 四階段、嵌 API 表、產品名舊，零星補過週期與 CRA 段；掛在 spec 站使用手冊群與 README。決策者裁退役重寫。
- 開卡 CM-2801 掛 FR-140（需求編號），**派工時機放 FR-140 畫面複測過後**——新手冊「稽核怎麼走」章要照一輪多次稽核寫，現在寫會立刻過時。卡上已列章節骨架、內容來源（spec 站＋FR-140 design，不抄舊檔）、退役步驟、驗收 grep。
