FR-139 · 進度 · living 文件,就地 Edit

FR-139 進度總表(STATE)

母卡 CM-2745 · 二十張實作卡 · 五波派工+複測補強

只描述此刻。每棒回寫後更新本表;沿革進 FR-139-LOG.md 與 git log。問「做到哪」看這份。

§1

一眼看

  • 總進度:27 / 27 Done(實作卡全收)
  • 現在在做:(無)FR-139 已收口(2026-10-15):27 張實作卡+收口六卡全 Done,母卡 CM-2745 Done。下一個 FR「資源庫層任務初始化、顧問定任務名稱/描述/指南」走 big-feature-workflow,分析要點在 LOG 2026-10-15 T-24 block。
  • 擋住的:(無)
  • 等決策者裁的:(無)
  • 最近更新:2026-10-15 收口完成(C-1~C-6 全 Done);出貨前硬條件見「母卡收口待辦」🔴 項
§2

波次與平行

波 卡 可同時開 條件
1 T-1 1 地基,先做
2 T-2、T-2b、T-3、T-5 4 都只等 T-1;T-2/T-2b 各開子元件避免撞檔
3 T-6、T-7、T-8 3 T-6/T-7 等 T-5;T-8 等 T-2b
4 T-9 → T-10 1(序列) 同一批守門檔;T-9 等 T-8,T-10 等 T-5+T-9
5 T-11、T-12 → T-12b → T-13 2(T-11/T-12 平行) T-11 等 T-5;T-12 獨立;T-12b 等 T-12;T-13 等 T-11+T-12。T-12 的 CRA 整併 migration 等 T-6/T-7 驗收完才套 DEV(已完成,可套)
隨時 T-4 1 等 T-2 上線後任何時候
§3

卡片狀態

卡 Notion 做什麼(一句) 波 狀態 分支/commit 備註
T-1 CM-2749 BE props 新鍵+helper 收斂+批次存 API+實施狀態 seed 1 ✅ Done BE f94e9ef99/FE f65e15dc 批次存 API:PUT /module-frame/<uid>/control-defaults/<cid>/batch
T-2 CM-2750 FE 資源庫控制項區加欄位+狀態下拉讀 system_menus 2 ✅ Done FE 83c3c20a 卡片儲存鈕也改走批次只送改過欄位
T-2b CM-2751 建議附件表+API+FE 區塊 2 ✅ Done BE 0f5cd4554/FE 382930bb 主線 migration 一支,出貨基線待重產;複製方法 clone_by_id_map 給 T-5/T-8
T-3 CM-2752 Excel 兩路徑三欄+套件 props 逐鍵合併+資源庫匯入改合併 2 ✅ Done BE d62513d88/FE 7c78f0c8/套件 dca8e050 套件未發版,DEV 靠 path dependency(pyproject 139 行打開未 commit)
T-3b CM-2760 匯入預覽表三欄+確認框「覆蓋」改「合併」(純 FE) 隨時 ✅ Done FE e1354cee 首腦 Playwright 實跑兩個預覽流程
T-4 CM-2753 範本 460 缺失回填 隨時 ✅ Done BE 07eae5758 拆 26+10 條、殘留 0、存 v5;腳本 scripts/oneoff/
T-5 CM-2754 版本索引表+存版/暫存/匯入前備份 API+metadata 同步 2 ✅ Done BE 2f1036083/FE 254ac4ac 主線 migration 一支,出貨基線待重產;唯讀開舊版=版本 uid 放資源庫 uid 位置;補料 helper SspSnapshotExtras 給 T-7/T-8
T-6 CM-2755 FE 版本歷史頁+暫存/存版鈕 3 ✅ Done BE f79685514/FE 4e9cbbf4 首腦 Playwright 實跑;唯讀模式批次維護匯入項灰掉
T-7 CM-2756 比對(只控制項與 AO)+整份還原 3 ✅ Done BE b116c451a/8c65cdfb8/FE 6f291f21 首腦實打 429 還原往返;429 現停第 2 版內容共 6 版
T-8 CM-2757 啟動改指向+終身一對一+複製資源庫(先盤點複製鏈) 3 ✅ Done BE 5b96e02c6/FE d04f28c2 守門 is not None 靜默跳過要改成 raise(卡末);DEV 留 461~463+專案 1408~1410
T-9 CM-2758 規劃頁唯讀+範本 SSP 寫入守門分流 4 ✅ Done BE 790bb7bce/FE b76e28ad 範本判斷 template_ssp_id 直比;ssp_context_resolver 刻意不接;T-10 掛點 before_template_write
T-10 CM-2759 送審鎖版+稽核中鎖寫+覆核同套 4 ✅ Done BE 2297e7de9+回歸修 06bef3850/FE f50e1100 鎖寫實際掛在 verify_module_frame_exists_by_uid(writable=True)(T-9 的 before_template_write 留空);audit_lock 進資源庫詳情;守門 is not None 形狀同卡補強
T-11 CM-2761 SSP 匯出依框架群組排序+補欄位+版面對齊業界 5 ✅ Done BE 85d2cd7ef 狀態標籤先英文(menu 只有英文)、中文留 T-13;字典 ssp_docx_labels.py
T-12 CM-2762 catalog 三張翻譯表+套件 repo 接翻譯機制+讀取端依語言+CRA 中英整併 5 ✅ Done BE f248d7f41/套件 163d9ba0+回歸修 52c2a53d 010/011 已套 DEV;資源庫 catalog 是深複製品,011 連九份複製品一起翻;213 deprecated
T-12b CM-2763 框架匯入畫面加語言下拉、第二語言寫翻譯表、id 對不上整檔退 5 ✅ Done BE 6b7b42edf/套件 4f0b1fe9/FE 37c81f17 套件 012 加 framework_versions.language_code(已套 DEV);寫翻譯用 upsert_translations 不用 update(locale)(會改主表);FE 兩頁守 isPlatformAdmin,首腦注入 session 進不去,留雷門複測
T-14 CM-2767 編輯頁頁首兩顆選單鈕(儲存組/批次維護)+「暫存」改全頁儲存並改名 補強 ✅ Done FE c17f7c3f+133d7bf2 另順手做決策者五筆回饋:327d13b6/f07f7b2e/438f4731/56b77b93
T-17 CM-2772 任務流程「套用到其他任務」:控制項/AO 樹自選或全專案、只套 TODO、只換 BPMN、重做 job 注入 五 ✅ Done BE 9129fd196/FE 68805f78 新子需求五;清單+套用兩端點、FE 勾選樹對話框;最大坑是 XML 內 job uid 注入要重做
T-18 CM-2770 輪次流程跑完就凍結:該輪 closed 或主流程 COMPLETED 即整輪唯讀(任務/審閱/分類/問卷) 補強 ✅ Done BE 4a2685214/52029d477,套件 ea554468,FE fb44b3e6/aa64e4c9 決策者另開 session 當首腦做的;三套件只加選填掛點未發版
T-24 CM-2778 樣板「適用控制項」分頁與「匯出/匯入現況資料」收斂成同欄位/同 parser/同預覽/同寫入,預覽補與現值差異 補強 ✅ Done BE 5f56cdd22/FE a6ca2769+863bf160~44b0ad20 樣板 v5.0.0 舊檔要重下;預覽保留 SheetPreviewControls.vue 只補欄(沒嵌資源庫元件,runner 判會砍功能);「配對狀態」欄保留、預覽元件不換(裁示 15)
T-23 CM-2777 Excel 匯入樣板「適用控制項」:可填欄黃底、控制項資訊欄白底+工作表保護 補強 ✅ Done BE fbbf44463/32d0316a2 純 BE;ColumnDef 加 user_fillable;鎖定邏輯抽新檔
T-22 CM-2776 批次維護選單「匯入/匯出現況資料」對調;新模式專案規劃頁整顆不顯示「匯入現況資料」 補強 ✅ Done FE 497c8f45/f409148a 純 FE;新模式現況在資源庫維護,入口不留反灰鈕(比照 T-18)
T-21 CM-2775 三條匯入確認前自動存 import-backup 版(控制項現況 Excel、docx 兩條沒接) 補強 ✅ Done BE 37117b815 純 BE;用 T-5 現成 backup_before_import;守門 raise 不靜默
T-20 CM-2774 匯出現況 Excel 順序改走 T-11 resolver(專案側+資源庫側兩支 writer) 補強 ✅ Done BE 2dfa61c1f 純 BE;排序抽新檔,兩邊一行呼叫;不加群組列(會動匯入契約)
T-19 CM-2773 資源庫「基本資料」六欄進版本(存版記/檢視換值/比對加頁籤;發布狀態不存、還原不動) 補強 ✅ Done BE 6a0fdc4d2/FE 49461344 主線 migration 一支→出貨基線待重產;只改 _version_as_module_frame 一個入口
T-16 CM-2769 唯讀模式改文字顯示(規劃頁新模式+檢視舊版頁) 補強 ✅ Done FE 5697c176/f8a5f1dd/35d81f77/12f5aaea 純 FE;與 T-15 共用表單,著色以欄位容器為單位
T-15 CM-2768 版本差異著色在檢視舊版頁(全頁籤)、收獨立比對頁 補強 ✅ Done BE c1d3fbc2f/290cf834d/d3a556b04,FE efdf5d2b
T-13 CM-2764 SSP 匯出三語 zh/en/zh-en 5 ✅ Done BE 244efaeb0/FE 29119cbe lang 與 CRA 的 locale 分開;狀態中文進 messages.po;FE 匯出改彈窗;順手解 T-11 狀態只印英文

狀態符號:⬜ 未開始 / 🔵 進行中 / 🟡 修正待驗證(runner 回寫完、等決策者驗)/ ✅ Done / 🔴 卡住

§4

決策者已裁的(已回寫到卡)

  1. 子公司不用總部分享的資源庫開專案:資源庫可匯出匯入,就不走分享(2026-10-15)。T-9 的「分享庫對子公司唯讀」行為維持,不另開卡。

  2. 「完整稽核流程」母範本(compliance.flow_templates uid da8c2b81…)2026-10-15 12:21 已由 admin 帳號發布回去(決策者指示);1408~1410 可發起覆核。

  3. 資源庫刪除守門維持現狀(2026-10-15 複測時確認):綁著活的專案不准刪,專案先刪(軟刪)資源庫才可刪;刪除是軟刪。不加封存狀態、不放寬成警告後可刪。

  4. 暫存擴成全頁(含基本資料)並改名「儲存」;頁首四鈕合成一顆群組鈕照問卷頁(2026-10-15 複測裁示)→ T-14。

  5. 版本比對改成「檢視舊版頁上著色,所有頁籤都比」,獨立比對頁收起來(2026-10-15,推翻 D11「只比控制項與 AO」)→ T-15。理由:獨立頁寫「其他頁籤不比」只會被問為什麼沒做。

  6. 唯讀模式(規劃頁新模式、檢視舊版)改成文字顯示,不用反灰輸入框(2026-10-15,「真的超醜」)→ T-16。

  7. T-15 共用比對誤報(資產欄位兩種拼法、共用信箱配錯人):docx/Excel 匯入預覽可能同樣漏比,開一張小卡查證,有就修、沒有就結案(2026-10-15)。

  8. 雷門複測三項(T-12b 語言下拉與 PDF 更新、T-13 匯出彈窗與 CRA 三份文件、T-6 只讀帳號看不到存版還原鈕)已驗過(2026-10-15)。

  9. review 建議級五裁(2026-10-15):①docx 匯入資源庫改走合併(與 Excel 一致)②三處守門沒接線改 raise ③規劃頁狀態下拉讀選單表、匯出時 unknown→planned(D20 的 unknown 是產品擴充,DEV 既有 2,133 筆,OSCAL 標準不含)④ModuleFrame.vue 這次不拆 ⑤RLS 一條 FOR ALL 認可、改判準文字。①②③+四小項→C-6 CM-2798。

  10. T-24 兩件:預覽表內「配對狀態」欄不拿掉;預覽不換成資源庫同一套元件(2026-10-15)。

  11. 新需求「資源庫層任務初始化、顧問定任務名稱/描述/指南」先裁三條:只給顧問名稱/描述/指南;任務先不進版本;任務匯入 Excel 加描述/指南兩欄資源庫與專案共用(2026-10-15)。收口後另開 FR。

  12. 子需求五「任務流程套用到其他任務」併進 FR-139 不開新 FR(2026-10-15):不分範圍層、不用「同來源」,使用者從控制項/AO 樹自己勾,或全選=全專案(二次確認);只套 TODO;只換 BPMN、任務層欄位不動;各任務仍持有自己的複製品 → T-17。

  13. T-8:舊模式專案也算,驗收時複製三份新資源庫再啟動。

  14. T-10:鎖寫看最新一輪(不分主輪/覆核子輪),沿用既有當前輪次函式。

  15. T-4:拆得出來就拆,拆不出來留著,不列對照表等確認。

  16. 子需求四(2026-10-15):英文版連控制項標題也要(走 catalog 翻譯表);套件可動;框架匯入加語言下拉;CRA 現有中(213/catalog 2135)英(207/2112)兩版整併成英文主表+中文翻譯表,460/459 改指 207。

§5

留給 T-9 的(T-8 盤點標出、本卡不碰)

  • ssp_context_resolver.py:98 先試資源庫再試專案:指向後同一份 SSP 兩邊命中、一律判成範本,專案端寫入會走資源庫守門;目前 DI 未接這支 resolver(oscal_containers.py:345),現況影響有限,T-9 要處理。
  • ssp_project_resolver.py:153 resolve_round_for_ssp:範本 SSP 會解到專案當前輪,資源庫編輯頁控制項樹會走「本輪工作」路徑顯示專案的收證據工作;T-9 決定要不要在資源庫頁擋掉。
§6

接手指引(arc 已收口;只剩出貨前兩件)

先做這三件,做完停下等令:

  1. 讀本檔全部+ FR-139-LOG.md 最後六個 block。
  2. 盤點:git fetch 三 repo 確認 origin/feature/FR-139 與本機對齊;Notion 查母卡 CM-2745 與子需求 CM-2746~2748 狀態(應仍 Not started);pyproject 四支 path dependency 是否仍打開。
  3. 回報盤點,等決策者發令。收口項目逐條見「母卡收口待辦」,每項單獨發令單獨做;比對誤報查證小卡(裁示 12)收口時一起開。

冷接自檢(答得出才算讀懂):

  • 新模式專案跟舊模式專案差在哪?為什麼新模式規劃頁不能匯入現況資料?(T-9/T-22)
  • 「匯出現況資料」的 Excel 跟完整樣板的「適用控制項」分頁是什麼關係?T-24 要收斂成誰?(決策者原話:那個 sheet 就是現況資料拔出來)
  • 輪次什麼時候算「結束」?凍結看的是哪一輪?(T-18)
  • 存版快照包含什麼、不包含什麼?基本資料六欄為什麼不含發布狀態?還原為什麼不動基本資料?(D11+T-19)
  • 為什麼 T-23 退回過一次?(標頭與內文同一條規則,首腦卡分開寫就分開做)

驗收做法(本棒固定用法,照抄):

  • token:scratchpad/mk_token.py(在 session scratchpad,不在 repo),在 repo 根目錄跑、用乾淨 env 載 .env:env -i PATH=$PATH HOME=$HOME python3 -c "from dotenv import load_dotenv;load_dotenv(override=True);import runpy,sys;sys.argv=['mk','eac362ed-1fc7-48ac-b7e5-88c71f412c03'];runpy.run_path('<scratchpad>/mk_token.py',run_name='__main__')",否則 Fernet 鍵讀不到 create_app 在 DI 就炸。
  • 路由前綴:SSP 控制項 /api/1.0/ssp/...(無 /oscal)、資源庫 /api/1.0/module-frame/...、任務與輪次 /api/1.0/grc/...、審閱標記 /api/1.0/grc/project/<p>/ap/<round>/control/<cid>/review。Excel 現況匯出走 require_participant,資源庫範本 SSP 的 uuid 直接打會 404,要用專案的 ssp.id。
  • Playwright:test repo 的 node_modules/playwright/index.mjs,注入 localStorage cm_store={accessToken},FE localhost:5180。平台管理員頁注入進不去,留決策者。
  • 固定驗收資料:資源庫 469「首腦 T-16 驗收庫」+專案 1497(新模式、活);專案 1321(第 1 輪流程 COMPLETED、第 2 輪進行中,驗輪次凍結);專案 1484(決策者自己的新模式專案);舊模式 1404;429 有 6 版。探針寫入要原路清掉(本棒建的批次、審閱標記、改的描述都清了)。

本棒留給收口的(除「母卡收口待辦」段外):

  • T-12 同型回歸掃過一遍,只剩任務匯出那處已直修(5be32fc9a)。
  • 無卡號 commit 62be9edc4(任務指派先選部門)決策者在 runner 視窗直裁,沒核過。
  • 既有測試 test_ssp_excel_import_project_ssp::test_confirm_module_frame_source_merges_with_update_mode 紅(T-21 備份守衛,測試沒注入 ssp_version_service),收口 reviewer 時補。
  • 新需求已釐清(裁示 14),收口完走 big-feature-workflow 第一棒寫討論稿+可點雛形。
§7

母卡收口待辦(已拆成 CM-2780~2784 五張卡,本段留作對照)

  • 舊手冊 docs/user-manual/lifecycle-and-use-cases.md(v3.0/2026-03)決策者 2026-10-16 裁退役重寫 → CM-2801(屬 FR-139;派工時機等 FR-140 畫面複測過,prompt 到時由 FR-139 首腦給)。

  • 🔴 出貨前必做:jedi-compliance-audit 發版+主專案 pin 還原(C-2 因 FR-140 占用未發;pyproject 第 70 行 pin 仍註解、第 124 行 path 仍打開;1.3.7 沒有 T-18「輪次結束擋寫入」掛點,裝到舊版該守門靜默消失)。發版時一併補 GRC_403069/ssp_source 鏡像。歸 FR-140 收口。

  • 無卡號 commit 62be9edc4(任務指派先選部門再選人,新端點 participants/org-units):runner 視窗由決策者直接裁示,首腦未核、未開卡;收口 reviewer 一併掃。

  • T-12 同型回歸掃一遍:grep -rn "locale=locale" app/ infra/ 逐處確認所在方法有定義 locale(任務匯出已炸過一次,首腦直修)。

  • 守門「沒注入就靜默放行」:T-8 兩處已改 raise(9e4c1c9e1);T-10 的 module_frame_domain_service._audit_lock 仍是跳過,收口 reviewer 時一起改,不再退卡。

  • T-15 runner 抓到共用比對誤報兩處(current_inventory_view 資產欄位兩種拼法、match_parties 共用信箱配錯人),只在版本比對側補;決策者已裁開一張小卡查證 docx/Excel 匯入預覽(裁示 12),收口時開。

  • 「基本資料」頁籤沒進版本(決策者 T-15 實測;runner 分析在 CM-2768 卡尾):七個欄位在 compliance.module_frames 本列,存版不複製、檢視舊版只換範本 SSP、比對比不到;設計範圍從頭沒定義。首腦建議另開一卡:版本表加 JSONB 存六欄(發布狀態排除,它是假三態)、檢視舊版在 _version_as_module_frame 換值、compare 加 basic_info 頁籤、還原不換基本資料、舊版本顯示灰字「存版時尚未記錄」。決策者已裁(2026-10-15):照首腦建議開 T-19(CM-2773),T-15 維持 Done。

  • 雷門複測清單三項已驗過(裁示 13),母卡可收。

  • ddd-compliance-reviewer 掃整個 arc 的 diff(十六張卡、三 repo)+ arc-review skill 多 agent review;本 FR 碰到的超標檔至少拆一支(ssp_control_implementation_service.py 已 959→875,ProjectPlanningView.vue 2,616→2,585,ModuleFrameTemplateEditView.vue 2,106→2,078,都還超標)。

  • e2e 回歸到 test repo(母卡收口動作,另開一棒)。

  • 使用手冊與 spec-site 頁面 spec 更新(writing-feature-specs skill)。

  • jedi-oscal-v2 發版(dca8e050 合併規則)+主專案還原 pin 升版號(決策者裁示才動)。

  • jedi-oscal-v2 發版時機:決策者 2026-10-15 裁 arc 收口時一起發(T-3 合併規則+T-12 翻譯表一起)。

  • CRA 套件 seed 007/008 保留不併入 002:011 需要 007 當翻譯來源,新裝 002→007→010→011 即終局(T-12 runner 結論,首腦認可)。

  • 權限矩陣重跑 scripts/deliverables/gen_permission_matrix.py(T-5/T-6/T-7/T-9 累積 46+ 列待補)。

  • GRC_403069 與專案詳情 ssp_source 欄位:下次發 jedi_compliance_audit 一起補鏡像碼表與 schema。

  • follow-up 記錄不開卡:批次存 API 送空字串不清空備註(T-1 契約),比對頁如實標差異;框架版本編輯頁平面清單 sort_order 每群組各自編號、順序不固定(改前即如此,畫面分節不受影響)。

  • 出貨基線待重產(C-4 已產清單,188 等決策者排):依序 2026-10-14-fr139-ssp-control-attachments.sql → 2026-10-14-fr139-ssp-versions.sql → 2026-10-15-fr139-ssp-version-basic-info.sql;步驟照 sql-migration skill「出貨基線同步」段(備份→套三支→gen_schema/gen_stamp→diff 零刪除)。T-12 的 010/011 在套件 migrations 不進基線。

  • 上版檢查項新增:STG/POC 套 011 前先 dry-run 看 NOTICE 筆數;套後查各自的 CRA 資源庫改掛 207、213 deprecated。

  • 守衛既有 3 紅(survey 兩條 GET 未登記、FE 權限矩陣要重跑 scripts/deliverables/gen_permission_matrix.py)收口時處理。

  • 本機 BE 8000 已由首腦 17:10 重啟(pid 8486,載入 T-19+當時 T-20/T-21 runner 未 commit 的工作樹);runner 回寫「沒重啟共用 BE」時,首腦驗收前要先重啟再讓決策者看。

  • DEV 驗收殘留:461~463 與專案 1408~1410 已由決策者軟刪(14:35/14:44);468「只有軟刪專案」(T-8 runner 建);469「首腦 T-16 驗收庫」+專案 1497(新模式,活)可當新模式複測資料;429 停第 2 版共 6 版。

  • test/security 既有 3 紅(survey 兩支路由未登記、FE 權限矩陣漂移)與本 arc 無關,收口時確認歸屬。

§8

座標

  • design:../design.md 討論稿:../discussion.md 雛形:../prototype/index.html
  • 母卡:https://app.notion.com/p/FR-139-3f9346da4cd081e0afbce457d08bea06
  • 建卡結果:notion-cards.json
  • branch:BE/FE/jedi-python-package 三 repo feature/FR-139;本 arc 決策者授權首腦與 runner push 自己 branch