FR-162 跨框架控制項對應 — 收尾總結

  • 期間:2026-10-24 ~ 2026-10-26(四棒首腦+工作坊 24 張子卡)
  • 母卡:CM-3057
  • 細節來源:FR-162-LOG.md 第 1~4 棒;現行規則見 ../design.md 與規格頁
§1

一、為什麼做

決策者原話:「要降低 user 重工……讓 user 在引入不同框架的時候,就不要一直重複上傳證據,可以用關聯的方式完成多項框架規範。系統應該是要到 AO。」

一份程序書常同時滿足 ISO 27001、CMMC、CRA 好幾個框架。系統原本沒有「框架 A 的控制項對到框架 B 的哪條」的資料(v1 那張表已隨套件退役),所以導入第二個框架就得把證據再上傳一次。

§2

二、做出來的東西

功能 使用者看到什麼
對照資料 套件 jedi-oscal-v2 兩張表,對齊 OSCAL 1.2.2 mapping-collection;控制項層與評估目標層雙粒度;官方、第三方、顧問、AI 四種來源分開記
官方與第三方資料 隨套件出貨:CMMC↔︎800-171(規則生成)、800-171↔︎800-53(附錄 D)、800-53↔︎ISO 2022(NIST OLIR);CRA(OSA)、SEMI E187(SunSquare)標第三方
解析服務 多跳轉乘(最多三跳)、信心度連乘、關係取最弱、評估目標層找不到退回控制項層、排除規則、同目標取最短路徑
控制項關聯管理頁 主軸 × 並排欄矩陣;膠囊點開看兩端條文、來源、轉乘路徑;×、拖曳搬移、+多選新增、清空、關聯表 Excel 匯出匯入、還原出廠設定
證據沿用 專案總覽「證據作業」入口;一個來源專案一份設定的三欄調整頁;任務抽屜單筆沿用;沿用是關聯不是複製
重複證據看得見 上傳統一算 sha256 並回填;同檔多處標「也掛在 N 處」;上傳同內容提示
刪除語意 刪除只動本專案、同專案多處可選範圍;沿用刪了=本專案不適用,沿用不再建議;來源被刪下游照常、標「來源已移除」;刪掉的證據不再給下載
§3

三、關鍵決策(決策者裁)

決策 理由
對照進套件、不塞 catalog 對照會變、catalog 不一定變;多對多要帶關係型別與信心度
鍵用控制項代號與評估目標 part_id 不綁數字 id,跨環境、跨重匯可對
跨專案沿用,不做一專案多框架 一專案一框架是既有模型,沿用就能解重工
工作台是矩陣不是一對一 一對一數量隨框架數平方成長
一個來源一份設定,不做批次、不做復原某一次 使用者反悔時要的是「調回去」,不是「復原某次」
來源範圍=使用者看得到的專案 「同租戶」會把別的組織單位的專案列進來,屬資料外洩
對照只能同層 矩陣、沿用、Excel 共用同一套解析,開例外每個入口都要各自處理
刪除只動本專案、不提供連帶刪除 跨專案刪除跨過權限與輪次狀態;原上傳者無權替其他專案決定
沿用不複製檔案 檔案不可改、軟刪不會連帶刪檔、外鍵保護;複製只多儲存空間且打掉去重
job_evidences 不開 RLS 背景與系統脈絡路徑太多,收益小、驗證面大

決策推理全文:docs/analysis/2026-10-24-cross-framework-control-mapping.md、2026-10-24-mapping-sources-for-frameworks-without-official-crosswalk.md、2026-10-26-fr162-same-level-mapping-and-evidence-delete-semantics.md。

§4

四、交付物

套件(Nexus 已發,2026-10-26)

套件 版本 內容
jedi-oscal-v2 2.9.0 對照兩表與 migration 021~026、解析服務、OSCAL 與 Excel 匯入匯出、對照資料包 seed
jedi-file-upload 1.3.8 上傳統一算 sha256、回填用分頁查詢

同批另發 jedi-compliance-audit 1.4.1(FR-161.3)、jedi-task-platform 1.4.1(FR-155),非本 FR 的改動,因宿主已依賴一併發。

主線 migration(phase=active,只套 DEV)

檔 內容
2026-10-24-fr162-control-mapping-capabilities.sql 能力點 read/manage、選單、系統角色預設授權
2026-10-24-fr162-job-evidences-reused.sql source 放行 REUSED、reused_from_evidence_id、mapping_entry_id、projects.last_evidence_reuse_at
2026-10-24-fr162-control-mapping-ai-capability.sql 平台層能力點 ai-suggest
2026-10-26-fr162-job-evidences-not-applicable.sql deleted_reason 放行 NOT_APPLICABLE

文件

類別 位置
規格 docs/spec-site/current/compliance-framework/control-mapping.md、evidence/evidence-reuse.md、evidence/evidence-reuse-adjust.md
使用手冊 docs/user-manual/control-mapping-and-evidence-reuse-guide.md(技術支援站已收錄)
設計 ../design.md(現行規則)
決策分析 三份,見第三節

commits:四棒合計 BE、FE、套件各數十支,全部已 push 到 feature/FR-139;清單見 LOG 各 block。

§5

五、已知 follow-up(未做,各有理由)

項目 狀態
出貨基線重產 上表四支 migration 與套件 026 要進下一包基線;重產屬決策者裁示
STG/POC 上版 只套 DEV;上版等決策者放行
挑選器導航樹抽共用元件 第 8 份手刻樹,決策者 10-25 裁「之後再做」,要另開 FR
全站 13 檔手刻分段按鈕收斂到 SegmentButtons 另案
遺留端點 POST /oscal/control-mappings/rebuild 畫面已無入口,尚未刪
守衛紅:套件解析服務 domain→infra import 要不要開小卡修待裁
三冊 provenance 補網址;NIST SP 800-82 r3 換一級來源 待決策者下載檔
AI 建議與 OSCAL 匯入匯出 畫面隱藏中,後端端點照舊
AI 配對準確率 未實測
SMCC WG4 官方比較分析 出來後換掉 SunSquare 二級來源
upload_files sha256 空 2,619/4,888 回填讀不到檔的,見 CM-3097 回寫
e2e regression 母卡收口另開一棒到 test repo 補
§6

六、教訓(濃縮)

  • 雛形要在 design 與開卡之前:跳過雛形直接開卡,決策者看雛形後改了三處,每處都要回頭改 design 與卡。
  • 分批要逐張掃登記型共用檔:error code 表、migration manifest、api.js、locales、router 兩張卡同時加列就撞;「不同模組」不等於「不同檔」。這條犯了兩次。
  • STATE 是快照:工作坊平行推進幾小時就過期,開新卡前一定 fetch 母卡全部子卡實況。
  • 「同租戶」不等於「使用者看得到」:RLS 只擋租戶,任何「列其他專案給使用者選」都要走專案列表的可見性。
  • 動 UI 前先查現成的:分段按鈕、導航樹都有現成的,自刻被連續點名;只靠 build 就回報=把驗證丟給決策者。
  • 根因要查到判定邏輯那一行:「逐條寫清不乾淨」不是筆數問題,是解析器沒拿那種排除去比;查到那一行,修法從「開例外」變成「改一處判斷」。
  • 刪除語意先查歷史資料分布:同一個原因值被多種動作共用,拿它當新語意會把歷史全部算進去。