↑ 需求首頁 ⌂ 需求中心

FR-139 · append-only

FR-139 交接日誌(LOG)

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

§1

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。
§2

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 四棒平行派出。
§3

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 端點已接上。
§4

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。
§5

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 欄位。
§6

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 改指向後才走得到,目前單元測試覆蓋。
§7

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 卡末。
§8

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。
§9

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 抓不到,以截圖為準。
§10

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 找。
§11

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 才改。
§12

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。
§13

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 等裁)。
§14

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。
§15

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 留雷門複測。
§16

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,等決策者下令。
§17

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

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

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。
§19

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 時只驗了活專案的鎖,沒驗「專案刪後解鎖」這條反向路徑。
§20

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

  • 決策者按複製後能按取消/X;ResourceLibraryCopyDialog.vue 只有複製鈕掛 loading。退 T-8 runner 純 FE 修,順帶把兩處守門 raise 一起做。
§21

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

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

2026-10-15 T-10 回歸修復 Done(決策者親測)

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

2026-10-15 複測裁示:暫存擴全頁+頁首群組鈕 → 開 T-14(CM-2767)

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

2026-10-15 複測裁示:差異著色在檢視頁、收比對頁 → 開 T-15(CM-2768)

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

2026-10-15 複測裁示:唯讀改文字顯示 → 開 T-16(CM-2769)

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

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 派出進行中。
§27

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)。
§28

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

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

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 前綴。
§30

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(流程編輯器存檔後才可按「套用到其他任務」、勾選樹、全選紅色二次確認;入口放編輯器不放超標的規劃頁)。首腦尚未核。
§31

2026-10-15 T-16 Done(決策者親驗)

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

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 現況缺「缺失修改建議」,首腦接著查。
§33

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 把兩邊接到同一份、排序抽新檔。不加群組列(會改匯入契約)。
  • 教訓:使用者說「缺」常是「找不到」,先問是哪一頁哪顆鈕哪個物件再動手查,首腦這次繞了三條路由才問。
§34

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 已標。
§35

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 是系統給的卻是黃的;全樣板沒有任何保護)。
§36

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

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

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

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

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

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

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 所在方法有沒有定義)。
§40

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

  • T-20 只接了現況資料兩支 writer;完整樣板的分頁是第三支(ssp_import_template_app_service 從 profile tree 組列),決策者下載樣板抓到。不另開卡:T-24 收斂後該分頁走 T-20 修好的那支,順序自然對。
§41

2026-10-15 T-20/T-21/T-22/T-23 Done(決策者親驗)

  • 四張一次收。T-23 做在舊版面上(runner 先於 T-24 開工),T-24 收斂時要把黃底/鎖定搬到新版面,已寫在 T-24 卡。
  • 剩 T-24 一張,做完進母卡收口;收口建議換 session。
§42

2026-10-15 T-23 退回:標頭顏色與內文相反(首腦卡寫錯)

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

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。
§44

2026-10-15 T-23 Done(決策者親驗標頭)

  • BE 32d0316a2 標頭與內文同規則。26/27,只剩 T-24。
§45

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 無待裁項。
§46

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 狀態選單沒有「取消」,只有「暫緩」。
§47

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 教訓)。
§48

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 發版等它。
§49

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 不用表格。
§50

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。
§51

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。
§52

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 三項。驗收紀錄要等指令跑完再寫,不可先寫結論再補跑。
§53

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);資源庫側行為要用資源庫入口驗。
§54

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。