FR-154 feature/FR-139 合回 main 收尾 — 首腦 STATE(living,只描述此刻)

日期:2026-10-22(第 3 棒:arc-review 驗收、七張修正卡+CM-3009 驗收、2.7.1 發版、基線重產、三 repo push) | branch:BE/FE/jedi 皆 feature/FR-139 | 已 push origin(2026-10-22 決策者放行;BE ee88d5e6d、FE 7ba85915、jedi 223cc823);未合 main、未 bump、未出包 | LOG:FR-154-LOG.md | 母卡:CM-2975

0. 這個 FR 是什麼(接手先懂這個)

feature/FR-139 這條 branch 從 2026-10 初做到現在,裝了 FR-139~151 十餘個功能(顧問訪談欄位、稽核計畫/稽核作業/改善計畫逐 AO 工作表、結案報告、資源庫任務說明、任務關卡、SSP 顧問範本、責任分工與風險總表…),BE 領先 main 約 700 個 commit。功能各自做完了,但「整條 branch 能不能合回 main、出 1.27.0」是沒有人負責的空白——總驗收 arc acceptance-2610-fr139-147 停在 10-17 且只管到 FR-147。本 FR 就是那個負責人:把發版前所有收尾動作收成一批、派出去、驗收、排順序,直到決策者 push 合 main、188 出包。

不做的:各 FR 自己的功能修正(回各 FR 開卡)、STG/POC 上版(決策者放行後另排)。

1. 已完成(首腦第 1 棒親做,commit 在 FR-151 時期)

項目 commit 備註
六支 jedi 套件發版 jedi 56a2f0de+bdd5b90c iam 1.6.0、oscal-v2 2.6.1、compliance-audit 1.3.8(oscal-v2 下限 >=2.6.1)、task-platform 1.3.3、flow-engine 1.4.4、detection 1.2.10。iam 兩條紅在 branch 起點就紅、非本批
還原 pin BE 7bc35752c 六支固定版號+lock;守衛+FR-135~151 測試 438 綠
出貨基線重產 BE 8f7cc9bc5 188 備份 guidant_ai_baseline_20261021_0022_before_FR139-151.dump;補套 38 支;乾淨庫 init+兩輪 migrate 通過;順手修 04 產生器漏 is_menu、FR-144/148 seed 斷言寫死中間態
FR-149.3 派出並驗收 BE b6e835785 CM-2903 修正待驛證,等決策者手測(需重啟 8000)
四題裁定 — 見 §2

2. 決策者裁定(2026-10-21,照首腦建議)

  1. 風險 Excel 匯出加「說明/受影響資產/備註」三欄(29→32)、三欄皆可匯入;專案頁「風險等級」只改名「剩餘風險等級」、不加固有等級欄 → CM-2965。
  2. compliance.job_executions.template_id、compliance.workflow_templates_trans.workflow_template_id 兩個 FK 欄索引這版補(主線 active migration 1 支,做完出貨基線要再重產一次)→ CM-2966。
  3. FR-147 Excel 空格語意(資源庫端清空/專案端不動)這版不統一,SPEC 寫明差異 → 併 CM-2971。驗收時發現前提過期:4d(bfda2fe8a)早已把兩端都改成「空白=不變動」,差異只剩版面與「專案端無法用 Excel 清掉描述/指南」,SPEC 照現況寫;此題實際無事可裁,FR-147-STATE 過期段已劃掉。
  4. FR-138 #69(1.26.0 發行說明補 10-10 重出、出包只從 tag 產生)併進這次進版 → CM-2973;#71(出包改收 SPEC 站手冊)下版。

3. 子卡(母卡 CM-2975;spec handoff/notion-cards.json、結果 notion-cards-made.json)

卡 需求編號 做什麼 Stage Model 狀態
CM-2965 FR-154.1 風險 Excel 加三欄且可匯入;風險等級改名(FR-151) 1 sonnet/high ✅ 驗收通過待確認(BE fcbf9793f、FE bdbdeaa5)
CM-2966 FR-154.2 兩個 FK 欄補索引,主線 migration 1 支 1 sonnet/medium ✅ 驗收通過待確認(BE 75053e163;基線待重產)
CM-2967 FR-154.3 權限矩陣與 FE 權限常數重產 1 sonnet/medium ✅ 驗收通過待確認(BE 2e8f791b8;守衛 3 紅 → 衍生 CM-2976)
CM-2968 FR-154.4 FR-142 SPEC+手冊 1 sonnet/high ✅ 驗收通過待確認(BE 8be4fffa1)
CM-2969 FR-154.5 FR-143 SPEC 1 sonnet/high ✅ 驗收通過待確認(BE 99e09040d)
CM-2970 FR-154.6 FR-144 SPEC 稽核計畫清單頁 1 sonnet/medium ✅ 驗收通過待確認(BE 7816bff28)
CM-2971 FR-154.7 FR-147 SPEC+手冊,寫明空格語意差異 1 sonnet/high ✅ 驗收通過待確認(BE 185e328b6;空格語意前提過期,見 §2.3)
CM-2972 FR-154.8 FR-148 SPEC 1 sonnet/high ✅ 驗收通過待確認(BE 8afcd67f5)
CM-2973 FR-154.9 FR-138 #69 發行說明與出包規矩 1 sonnet/medium ✅ 驗收通過待確認(BE 8d2077900)
CM-2976 FR-154.11 FE 權限守衛紅燈六條(CM-2967 衍生):批次設定負責部門/任務卡證據與留言鈕掛對權限、三顆寫入鈕補 v-can、散寫判斷收掉、掃描器盲區登記;改完重產對照表 1 sonnet/medium ✅ 第 2 輪驗收通過待確認(FE f989b200+0eb060f5、BE 783338bb0+223bd7738)。第 1 輪退回:② <template v-can> 編譯成真 <template> 元素;第 2 輪改掛子元件根 div,首腦編譯三 SFC 確認 0 個 template 元素。待裁:顧問角色無 grc.raci.manage 此題作廢(arc-review 重要級 1 推翻):那顆鈕打的是 control-org-units/batch(後端守 oscal.ssp.update)不是 RACI 端點;① 改掛 GRC_RACI_MANAGE 是改錯,正解是入口鈕改回 OSCAL_RESOURCE_LIBRARY_UPDATE+後端路由放行兩顆(照 ssp_risk_route.py:35 先例)。併入 arc-review 修正卡
CM-2974 FR-154.10 arc-review 整條 branch(BE 888fdbc17..96cef7a80、FE 01fb4acd..0eb060f5、套件 bd73429b..c2bc7f7c),報告 docs/review/2026-10-21-fr140-154-merge-review.md,不自動修 2 opus/high ✅ 驗收通過待確認(BE afa7f52de)。阻斷 8/重要 24/輕微約 35;八條阻斷首腦逐條開檔皆屬實,無誤報。修正卡待決策者圈範圖,見 §3.1

Stage 1 十張+Stage 2 arc-review 全部驗收通過待確認(2026-10-22 04:xx)。

3.1 arc-review 修正卡(決策者 2026-10-22 圈定;spec handoff/notion-cards-review-fixes(.json|-made.json),Stage 1,全掛 CM-2975)

決策者裁定:阻斷 8 條全修;重要級修 12 條(1、2、3、4、5、6、7、8、16、17、19、21、22);其餘重要級與輕微級登記下版。B1 修法採「從讀取權進來的矩陣不帶處理人」;B8 裁「DI 註冊檔豁免」(CLAUDE.md 補例外);FR-150 D7 改合併決策者知情、只改文件;ISO 27002 PDF 不隨包,改 ISO 官網連結(英文版)。

卡 需求編號 做什麼 Model 狀態
CM-3002 FR-154.12 修正 A(資安):B1 矩陣從讀取權進來不帶處理人+重要 3 任務說明同;B2 舊結案報告 PUT/DELETE/還原改驗 manager sonnet/high ✅ 驗收通過待確認(BE c63ace808、FE ba3f54a4;重要 3 寫入端待裁)
CM-3003 FR-154.13 修正 B(資料錯):B3 只填改善建議不算風險;B4 後端擋未送出推進;B5 定稿遇讀取失敗拋錯、預覽標降級;重要 16 四處 savepoint;重要 17 close_round 三依賴改必填 opus/high ✅ 驗收通過待確認(BE f571a1cbc、FE 496addbf;新碼 GRC_412078;B3 套件縮範圍判準 follow-up)
CM-3004 FR-154.14 修正 C(小修):B6 GOV_404003 三語;重要 1 批次設定負責部門三處對齊(撤銷 CM-2976 ① 的改法);重要 2 提醒鈕 v-can;重要 4 FR-144 D3;重要 7 上傳者暱稱;重要 8 風險編輯頁讀失敗不變新增;FR-150 design D7 改文件;B8 CLAUDE.md 補 DI 檔豁免 sonnet/medium ✅ 驗收通過待確認(BE ff6c91f50、FE c2365a4e)
CM-3005 FR-154.15 修正 D:B7 ProjectPlanningView.vue 抽 usePlanningQuickConfigMenu sonnet/medium ✅ 驗收通過待確認(FE ace21838,2,632→2,591)
CM-3006 FR-154.16 修正 E:重要 21/22 標籤改讀 system_menus;重要 6 風險部門歸屬驗證;重要 5 範例角色稽核員補 export(基線待重產) sonnet/high ✅ 驗收通過待確認(BE 6eb2087a7;基線待重產)
CM-3007 FR-154.17 修正 F:重要 19 FR-149 範本 docx 清 7 處客戶字樣+產生器錨點改中性 sonnet/high ✅ 驗收通過待確認(BE 9326fe785)
CM-3008 FR-154.18 修正 G:jedi-oscal-v2 019 不帶 ISO 27002 PDF,加 reference_url 欄;FE 版本頁說明卡+ISO 官網連結;套件 2.7.1(發版推 Nexus 等令) sonnet/high ✅ 驗收通過待確認(套件 6533a9e8 2.7.1、BE 2cfd880e5、FE 632e1b17)。🔴 等令:發版推 Nexus——BE pin 已 ==2.7.1 但 Nexus 沒有,新 clone/build 機 poetry install 會失敗;發版後 poetry update jedi-oscal-v2 再 commit lock

七張全部驗收通過待確認(2026-10-22)。 守衛全套在七張 commit 後 667 過 4 紅 12 skip;4 紅在 fd84e5943(動手前)即存在,屬平行 session 殘留(survey/review-step 路由未登記、closing report 解析點、jedi data-access 規則鏡像、Redis key 前綴),不是本批造成,但合 main 前要有人收(見 §3.2)。

3.2 合 main 前還要收的(等令)

項 誰 內容
發版 jedi-oscal-v2 2.7.1 推 Nexus ✅ 已做(2026-10-22 決策者放行) wheel 內無 ISO PDF;poetry publish -r nexus 完成;BE lock 切回 Nexus 00d90a396
守衛 4 紅收掉 ✅ CM-3009 驗收通過待確認(BE 5dc01bcd6、jedi 223cc823;守衛 576 綠 0 紅) survey 兩支+review-step-templates GET 登記或掛守門;closing_report_*/ap_docx_generator/ar_docx_generator/ap_workbook_reader 解析點量大小後登記;jedi data-access.md 規則本文鏡像同步;Redis key 前綴補 ACL。這些是 FR-145/148/155 留的,不屬任一修正卡
出貨基線重產一次 ✅ 已做(2026-10-22 決策者裁「重產」) 備份 ~/backup/guidant_ai_baseline_20261022_1206_before_FR154_regen.dump;基線庫套索引;稽核員 export 改進 shipped-roles.json(04 是 gen 產物,手改會沖掉);三支 gen 重產 834d2f811,02 零刪除、gate (a) 綠。套件 019 走 flatten 不進 02
bucket 清舊 PDF 決策者手動 20261021000000_29ee8d07-….pdf
重要 3 寫入端 ✅ 決策者裁「是本意」 FR-147 design D2 補一句 a2c5eac6c;本來 D2 就寫明不要求 manager,arc-review 列為疑慮是沒對到 D2
GET /grc/review-step-templates 無 read 能力點 決策者裁(CM-3009 帶出) 已登記 PENDING_GUARD_ROUTES。(a) 新增 grc.review-step-template.read 能力點(seed migration+對照表重產)/(b) 改附錄 C 列 JWT_ONLY。首腦建議 (b):樣板清單無敏感資料
CM-3006 三條未動 follow-up ①稽核結果 Excel VERDICT_LABELS/RISK_LEVEL_LABELS 是匯入契約(6 處共用),verdict 屬狀態機枚舉可維持程式表,首腦接受;②risk_status/risk_source/合規狀態/嚴重度 system_menus 無 seed,要進選單另開 seed 卡;③closing_report_risks.py:18 另一份 TREATMENT_LABEL 寫死
B3 套件縮範圖判準 follow-up jedi-compliance-audit assessment_result_app_service.py:339-341 改用 has_risk 同源
docs/spec-site/site/ 統一重 build、_overview.md 頁面地圖、audit-review「三條→四條」 收尾棒 見下方小尾巴

登記下版(follow-up,不進 1.27.0):重要 9(FR-142 Excel 說明與改判衝突)、10(FR-143 D4 多目標共用任務只同步一半)、11~15、18(讀失敗降級有 log 不寫壞資料)、23(函式超標累積)、24(app service 自己 new RepoImpl);輕微級約 35 條見報告 §3。

驗收留下的小尾巴(不擋卡,收尾棒或 arc-review 後一起收):

  • docs/spec-site/current/audit-execution/_overview.md 頁面地圖第 22、88 行仍寫「POA&M 矯正頁」,要改「改善計畫工作表」並補「我的改善計畫」一列(CM-2969/2970 互讓沒碰)。
  • audit-execution/audit-review.md 四處「結案守門三條」(第 11、87、108、161 行)要改「四條」(程式 ar_objective_view.py::close_blockers 回四種;其 docstring 也寫「三條」過期)。
  • docs/spec-site/site/ 建置產物約 190 檔未 commit(CM-2969 只提交自己三頁),SPEC 卡全收口後統一重 build 一次 commit。
  • risk-register.md 2026-10-20 那行舊變更紀錄的「29 欄」被 CM-2965 改成「32 欄」(歷史紀錄不該回改,一字之差未退)。

4. 之後的順序(每項等令)

2026-10-22 決策者裁:先 push 一版、bump 之後再做、安裝包先等。下列 1~2 進行中,3 起等令。

  1. Stage 1 十張跑完 → 首腦逐張抽查(開檔、跑測試、mkdocs build),卡尾 append 驗收註記。
  2. 決策者複測:FR-151 21 張「修正待驗證」子卡、CM-2903(要重啟 8000,重啟前先問)。
  3. CM-2974 arc-review → 阻斷級另開修正卡掛 CM-2975。
  4. 出貨基線再重產一次(CM-2966 的索引 migration;步驟見 sql-migration skill「出貨基線同步」段,寫 188 基線庫屬決策者裁示)。
  5. 收各 FR 母卡 Done:FR-142 CM-2818、FR-143 CM-2840、FR-144 CM-2837、FR-145 CM-2854、FR-147 CM-2864、FR-148 CM-2880、FR-149 CM-2889、FR-150 CM-2902、FR-151 CM-2914(決策者改)。
  6. 進版 1.27.0:version-bump skill(release note、BE/FE 版號、spec-site 凍結快照、99-stamp.sql);site-regression 不當 gate。
  7. 決策者 push 三 repo、合 main、打 tag 並推 tag。
  8. 188 /opt/guidant-ai-be git pull 到 tag → build_all.sh --all → build_bundle.sh;STG/POC 上版等放行。

5. 行為規範(本 arc 特有)

  • 8000 的 BE 是決策者另一個 session 在用:首腦與 runner 一律不重啟,要重啟先問。
  • 同一工作樹有平行 session 的未提交改動(docs/features/FR-144/design.html、FR-151 index.html/nav-data.* 等):改檔前 git status,只 git add 自己的檔、用 git commit <檔...>;commit 前 git diff --cached --stat 核對。
  • 工作坊派工:子卡四欄(母卡/Stage/Model/Effort)必填、狀態只往前走;首腦不寫派工 prompt、不自己開 session,決策者在狀態頁選 CM-2975 派。
  • 建卡腳本陷阱:agent-workshop 的 notion_create_case.py 指向工作坊自己的任務庫(904346da…)不是 CM 庫(23c346da…),直接用會建到錯的庫、卡號不是 CM-、專案欄預設 Agent Workshop。要用它的 spec 格式配 BE scripts/notion_case.py 的 DATASOURCE_ID。BE 自己的 scripts/notion_create_case.py 不支援四欄,開卡前要先補。
  • 一批要一起派的卡就要同一張母卡;「這張不屬任何 FR 的功能」是該另開 FR 與母卡的訊號,不是掛到最近的 FR 底下湊合。
  • 說明文件只寫現況;沿革進 FR-154-LOG.md 與 commit message。