# FR-135 CRA 合規框架 — STATE（living，只描述此刻）

> 階段：**出包前收斂完成（2026-10-14 第 8 棒）**——六支套件全發版、188 出貨基線收 8 支、5 支全新安裝會中止的 seed 已修，首腦用 HEAD 產物在乾淨庫從頭裝過一次全綠，**下次包版可直接出**（本次依裁示不進版本、不 push）。程式卡仍待決策者瀏覽器驗；SPEC／手冊／e2e／arc-review／母卡 Done 等令。
> 最後更新 2026-10-14（第 8 棒）。沿革見 `FR-135-LOG.md` 與 git log。
## 這是什麼

歐盟網路韌性法 Regulation (EU) 2024/2847，對賣進歐盟的連網硬體與軟體的強制資安規範。決策者要把它做成系統內可由顧問啟動的合規框架（像 CMMC），因為要有歐洲客戶了。CRA 是完全獨立的新框架，不是 ISO 子集；決策者裁 catalog 不嵌任何對他框架的對照，跨框架對應另案。

## 總圖（2026-10-12 午後版；三期＋收口）

| 期 | 項目 | 狀態 |
|---|---|---|
| 第一期 | CM-2676～2687 十二張 | 修正待驗證，等決策者瀏覽器複核改 Done |
| 第二期 | A1 B1 B2 F1 F2 V1 C1 B3 F3 F4 R1-a 十一張＋C2b | 修正待驗證（C2b Done；C2 收舊路靠 C2b 驗） |
| 第二期 | C3（CM-2703） | 修正待驗證（首腦 DEV 複核通過） |
| 第二期 | R1-b（CM-2702） | 修正待驗證（退回重做版 13:15 收齊，首腦 DEV 複核通過） |
| 第二期 | C1b（CM-2696）AO 全面調整 | 修正待驗證（框架 4 群 34 條 49 AO） |
| 第二期 | **第二期程式卡全部收齊**（2026-10-12 14:0x）；剩決策者驗卡、基線重產、套件發版、push | — |
| 第二期 | **E1 AO 證據來源機制**（CM-2704） | 修正待驗證（BE `aba1c76e9`、FE `00793743`、套件 `a76fd859` seed 006 同 2.5.4 未發版；首腦核 DEV：8 個 AO（7 個 only=true）＋11 條無 AO 控制項（A2.6／A2.9 only=true）帶 `evidence-source`，與套件 seed 006 目標一致（第 4 棒原寫 12 為誤記）（六 type：risk-assessment／applicability／system-characteristic:ext:*／party:*／source-scan），CMMC 0；runner 順手修了建庫與啟動時整欄覆蓋 AO props 的坑；**待裁：①類 AO 的「收證據任務」區塊要不要藏（任務仍會產生、統計卡會數，藏了使用者看不到卻算未完成）**；通報三條 AO 未標（第三期才有頁）） |
| 第二期 | **E2 only=true AO 不產收證據任務**（CM-2708） | 修正待驗證（`d0561e395`） |
| 第二期收口 | D1 design-cra.md 改版（CM-2705） | 修正待驗證（`85d80293d`；首腦核：沿革句型零命中、seed 殘字零、新 §6.6／6.9／6.11；文件類可直接 Done） |
| 第三期前置 | P0 四畫面假資料雛形（CM-2706） | 修正待驗證（`202e61871`；決策者已審，結論見 LOG 第 4 棒收棒） |
| 第三期 | **X1 三份法定文件匯出**（CM-2712）：`/ssp/<uid>/export?format=cra-annex7|cra-annex2|cra-doc`，範本 `app/oscal/templates/cra/*-Export.docx`；非 CRA 專案 412 `GRC_412059` | 修正待驗證（BE `93308bc44` FE `7491f256`；首腦實打 DEV：1402 三份 200、1403 412） |
| 第三期 | **S1 支援期剩餘天數徽章**（CM-2713）：資訊系統版本表徽章四色階＋「90 天內到期」篩選 | 修正待驗證（FE `bdf73218`；DEV Jira 四筆測試版本） |
| 第三期 | ~~通報案件頁籤／弱點處理狀態／提醒排程~~ 決策者 2026-10-13 裁不做；通報與支援期提醒併入 FR-137；弱點處理狀態轉 FR-134 待辦 §3 第 14 列（鍵用 fingerprint）；砍掉的設計與 ENISA 欄位表存 `phase3-deferred-to-recurring-tasks-fr.md` | 已歸檔（CM-2711 `65ec44643`） |
| 第三期 | 自家 SBOM 成證據（D14）：Guidant AI 自家 SBOM 無可掃產物（DEV 掃的是 primevue），自跑 CRA 前要先有 | 未做，自跑前置 |
| 體驗 | **CM-2718** 受評標的 CRA 欄位引導式折疊（schema 加 `collapsed`／`gate`；適用判定第一組、命中即收起其餘；`sections.nist_fields=false` 藏 FIPS 欄；上半部基本欄位同包折疊） | 修正待驗證（BE `57e8a3a9c`＋`26d28402f` FE `e49900b3`；**只對新建資源庫生效**） |
| 體驗 | **CM-2719** 風險評估「帶入 CRA 建議威脅」（15 筆英文範本在 `cra_2024.py` SUGGESTED_RISKS；`POST /ssp/<uid>/risks/suggestions/apply` 冪等） | 修正待驗證（BE `d90b951a8` FE `f1126b02`；首腦實打：1402 第一次 15／第二次 0） |
| 測資 | **繁中版框架**：CRA_2024 第二版本 `2024/2847-zh-TW`（version 213／catalog 2135，4 群 34 條 49 AO 全譯），seed migration `2026-10-13-fr135-cra-zh-tw-version.sql`（manifest seed，**隨下次 migrate 出貨**；只想 DEV 用要改 envs）；產生器 `scripts/gen_cra_zh_tw_version.py`；桌面 `CRA-框架對照表-繁中版-2026-10-13.xlsx` | 已套 DEV（`a8341d371`） |
| 測資 | **範例專案 1404「Guidant AI CRA 自評（範例）」**（CM-2720）：資源庫 460 繁中版、流程範本「自我評估稽核」、58 任務、12 筆真實風險、21 筆證據、三份 docx 在 `sample-project/` | 修正待驗證（`9d4fba9f5`；首腦核 DEV） |
| 體驗 | 導航 UI 六個 FE commit（`.truncate` 補定義、`.tag-code` nowrap、規劃頁與輪次頁群組列堆疊、標題兩行省略）——繁中長標題露出的跑版 | 已改，決策者看過 OK（`0cee1dfc`～`75257fd5`） |
| 待排 | CM-2716 雲端整合分頁 `projects/undefined/folders` 500（FR-052 舊 bug，非每次） | 決策者裁先不修 |
| **FR-137** | 週期任務與條件通知（母卡 CM-2714）：① CM-2722 週期設定畫面（BE `31af6b825` FE `44c46889` 套件 `343071b5`）、② CM-2723 到期處理（BE `f7189261f` FE `bf2ee9d6`）、③ CM-2724 掃描自動執行（BE `e985f1a4f` FE `12837d7a`；**偏離 design §6.4**：不走平台啟動掛鉤，直呼 `detection_orchestration.start_execution`）、④ CM-2725 SBOM 門檻通知＋紀錄（BE `2d21bcc11` FE `93af9705` 套件 `de7fcfa8`；打折：未真 SMTP、未真 worker 掃描）、⑤ CM-2726 支援期提醒（BE `c6539f5be` FE `1978ef74`）。**②③ 的「到期複製成第 N 期」已被 CM-2732 整條拆掉**，現行行為見下節「週期任務現況」 | 五卡修正待驗證 |
| 收口 | **出貨基線重產（8 支 active 未蓋章，等令寫 188）**：FR-135 `2026-10-11-fr135-module-frame-form-settings`、`2026-10-12-fr135-ssp-risks`；FR-137 六支 `fr137-job-recurrence`、`fr137-task-alert-notifications`、`fr137-alert-notifications-route`、`fr137-task-alert-notifications-object`、`fn-purge-projects`、`fr137-job-recurrence-same-task`（已知會 FR-137 首腦）。FR-134 十支已在 10-11 重產（`4a7554a3c`）收掉。另 8 支 phase=seed 不蓋章、新裝由 migrate 補套 | ✅ 已完成 CM-2744（`00427ac88`），首腦核 188＋乾淨庫 |
| 收口 | 套件發版：**六支全部已推 Nexus、BE 已鎖**——jedi-oscal-v2 2.5.4（`e25bf0d0e`）、jedi-asset 1.2.4、jedi-compliance-audit 1.3.7、jedi-file-upload 1.3.6、jedi-flow-engine 1.4.3、jedi-source-scan 0.1.1（BE `c1af54d69`、monorepo `971275ee`）；工作樹 path dependency 全收 | ✅ 已完成（push 等決策者） |
| 收口 | **🔴 全新安裝會失敗的 5 支主線 seed（出包前必修，等裁）**：FR-114 三支 `*-read-capability-backfill`（09-22／23／25）＋FR-122 兩支 `2026-09-29-fr122-ai-call-log-page`／`ai-quota-page`，查改名前的能力點名、全新庫查不到就中止（FR-132 改名後所有新裝都中；DEV／STG／POC 已套過不受影響）。修法草案（新名 OR legacy_name 雙查；FR-122 兩支改新名 INSERT 並補齊欄位）已在本機臨時庫 init＋migrate 兩輪驗過 rc=0、兩本 CRA 各 5 群 40 條 65 AO、能力點 216 無重複；diff 在 CM-2742 卡 | ✅ 已完成 CM-2743（`311b155e4`），首腦核乾淨庫兩輪 |
| 收口 | push 四 repo（BE／FE／套件／test） | 決策者本人 |
| 收口 | SPEC 頁、使用手冊（CRA 專案怎麼開、稽核當檢查用）、e2e 補 test repo、arc-review、母卡 Done、進版 | 總收口 |

**流程改版（2026-10-12 決策者裁，已寫進 big-feature-workflow skill `cbdd8402a`）**：討論稿必附可點 HTML 雛形；卡排序以「何時看得到畫面」為準。**開發規範新增（`29230d649`）**：下拉選項一律進 `system_menus` 不寫死。

## 第 7 棒：決策者試行冒出的小卡（2026-10-13）

| 卡 | 內容 | commit | 狀態 |
|---|---|---|---|
| CM-2730 | Excel SSP 範本分頁「參與人員」改名「責任人員」（`sheet_definitions` 單一來源、parser 別名表收多個舊名、TEMPLATE_VERSION v4.0.1） | BE `a33fc429d` | 修正待驗證 |
| CM-2731 | 週期單位加「小時」（`system_menus` task_frequency hourly） | BE `b2c4d1398` FE `cc3b8649` | 修正待驗證 |
| CM-2732 | **週期任務始終同一筆**：job_executions 拿掉 period_no／source_job_id／唯一鍵，加 run_count／last_run_at（`2026-10-13-fr137-job-recurrence-same-task.sql`）；刪 `task_period_clone_service` 與 `job_period_route` | BE `738ae83fd` FE `b21530d3` 套件 `800d1ec3` | 決策者已驗 ✅ |
| CM-2733 | 受評標的兩個下拉（`cra_operator_role`、`cra_product_class`）選項進 `system_menus`，匯出印中文標籤 | BE `c15090511` FE `42187784` | 修正待驗證 |
| CM-2734 | form_settings 欄位選填鍵 `guide`，FE「點開看說明」對話框，首例產品分級（i18n `ssp-ext-guide.json`） | BE `5b7b5ec94` FE `4cb799b7` | 決策者已驗 ✅ |
| CM-2735 | 三份 CRA 法定文件匯出可選中文／英文（範本 `*-Export.docx`／`*-Export.zh-TW.docx`，route 帶 `?locale=`） | BE `56e34d063` FE `3a910d51` | 修正待驗證 |
| CM-2736 | 解散「公開資訊網址」組：政策位置（必填、可填文字）與聲明位置（選填）併進最後一組；`ext:cra-advisories` 整個拿掉（欄位、LINK_RELS、匯出範本、CRA.II.4_obj.3 證據來源回上傳）；seed 005／006 重產 | BE `7fe92338e`＋`c4bd5cd01` FE `1d27bbf6` 套件 `524f95d9` | 修正待驗證（首腦 DEV 實匯六份 docx 核過） |
| 無卡 | 最後一組改名「產品識別與公開資訊」＋組層 help（決策者另 session 裁） | BE `8b3d2d112` FE `53d4d820` | 已落地 |
| CM-2737 | **範本編輯頁加「風險評估」頁籤**（掛既有 SspRiskAssessmentSection，跟 sections.risk_assessment 開關）；建專案複製範本 SSP 時 ssp_risks 一併複製。決策者陪填 session 開卡、派工 prompt 已給決策者，**請 135 首腦監看與驗收** | — | 待派／Not started |
| CM-2738 | **資源庫範本編輯頁顯示控制項條文與建議證據**：BE `_build_catalog_tree` 控制項加 statement／guidance、AO 加 guidance（重用 `control_part_prose`）；FE 範本頁掛 `ControlReferenceText`。FR-138 陪填 session 開卡，派工 prompt 已給決策者，**請 135 首腦監看與驗收** | — | 待派／Not started |
| 無卡 | 決策者陪填 session 順手修：系統依賴元件／外部授權筆數 Tag 為 0 不顯示（FE `c6bf68f3`）、範本頁控制項樹群組列改兩行（FE `bbd23b89`）、party 角色 system-owner 中文標籤改「系統負責人（專案負責人）」（FE `82b31a8c`）、繁中 catalog 產生源頭去 advisories（BE `c4bd5cd01`） | 見左 | 已落地 |

首腦直做（決策者特例）：任務抽屜 UI 一批（週期列移到任務設定下方、單筆執行組攤平、grid 對齊、證據最新在上、「下次到期」→「下次啟動」、「第 N 期」→「第 N 次」、拿掉「已填 N／M」徽章；FE `1e2c6ab7`～`3f635c35`）；排程 `task_recurrence_tick` 改每 5 分鐘（BE `051907388`）；維運函式 `compliance.purge_projects(ids, dry_run)`（BE `d4eb43d13`，預設試算）；1404 SSP 3938 的 advisories link 手動清掉。

**週期任務現況**：一個週期任務就是一張卡；tick（每 5 分鐘）到期時把 DONE 的任務重開、run_count＋1，開了自動執行的檢測任務直接開掃，否則通知執行人。「第 N 次」＝跑過幾次，不是另一筆任務。

**排程容量**：單 tick 每輪上限 500，自動執行與寄信同步跑在共用 4 執行緒池。建議改「排程只入列、worker 執行」——決策者裁**架構優化另案**，本 arc 不動。

GRC 待辦（不在 FR-135）：組織層風險登錄與改善計畫合併、表單編輯器、依元件建議威脅、風險→自動推導適用要求、跨框架對應、自評路線、框架版本可改 AO 與建議證據、版本繼承。

**DEV 實況（2026-10-13 14:39）**：BE api＋worker 重啟在 HEAD `8b3d2d112`；248 個軟刪專案與權限測試兩個已用 `purge_projects` 真刪（備份在當時 scratchpad，已不可靠，要重做先自己備份）；武裝中的週期任務只剩 74521（hourly，自動執行）、74519（daily，runner 測試）、79174（monthly）；資源庫 453～459 form_settings 仍舊結構、未對齊；catalog 2112／2131／2132／2135／2137／2138／2139 已無 advisories 來源；460 與 1404（含 SSP 3937／3938）已對齊 CM-2736。留 460 與 1404，其餘測資收口時清。

決策者功課：第一、二期卡瀏覽器驗；顧問日後給 AO 拆法確認、Annex II 預設文字、五份範本內容（AI 版先頂）。

## 已落地文件（branch **feature/FR-135**，已 push）

| 檔 | 用途 |
|---|---|
| `docs/features/FR-135-2610-cra-compliance-framework/cra-implementation-plan.md`（＋同名 `.html`） | **FR-135 主文件，PM 決策與派工用，先讀這份**。一頁結論、七項已裁、競品對照、逐步差距、新東西放哪、AO 三階段、通報第一版、三份文件、三期派工 |
| `docs/features/FR-135-2610-cra-compliance-framework/phase2-discussion.md` | 第二期討論稿，D1～D14 待裁項與方案 |
| `docs/features/FR-135-2610-cra-compliance-framework/design-platform.md` | 第二期平台層設計（P2-A 四卡 A1／B1／B2／B3，實作決定 P1～P9） |
| `docs/features/FR-135-2610-cra-compliance-framework/design-cra.md` | 第二期 CRA 層設計（P2-B～D 十卡 F1～F4／V1／R1／C1～C4，實作決定 C-P1～C-P10） |
| `docs/features/FR-135-2610-cra-compliance-framework/cra-assessment-objectives.md` | 7 條拆 25 個 AO（AI 依 ENISA 子要求拆分，待顧問確認）；套件 seed 004 由它轉出 |
| `docs/features/FR-135-2610-cra-compliance-framework/cra-suggested-evidence.md` | 31 條英文控制項標題與英文建議證據，**已灌入框架，待顧問確認**；改內容先改這份再轉進套件 seed |
| `docs/features/FR-135-2610-cra-compliance-framework/enisa-mapping-worksheet.md` | ENISA／JRC 對照底稿，31 條逐條對草案編號、子要求、對照標準、缺口 |
| `docs/features/FR-135-2610-cra-compliance-framework/step-zero-gap-list.md` | 第〇步實測清單；**第四節是第二期 design.md 的輸入** |
| 套件 `jedi-oscal-v2/jedi_oscal_v2/migrations/002`、`003` | CRA 31 條 catalog seed（條文＋英文標題）與 guidance（建議證據），隨 jedi-oscal-v2 2.5.2 出貨 |
| `docs/analysis/2026-10-11-cra-public-resource-library-seeding.md` | 系統公版資源庫怎麼建的三方案取捨 |
| `docs/analysis/2026-10-11-module-frame-ownership-guard-centralization.md` | 資源庫寫入歸屬守門集中到共同入口的取捨 |
| `docs/reference/CRA/cra-implementation-guide.md`（＋同名 `.html`） | **研究筆記**，需要法規細節與查證依據時翻：CRA 是什麼、八附錄怎麼看、31 條控制項摘要、評估目標來源、市面工具、與市面工具對照、缺口落點、三份文件、五大項缺口、FR 切法、來源連結。primer／reference／gap-analysis 是它的展開 |
| `docs/reference/CRA/cra-primer.md` | 法規入門。法規結構與讀法、要求真實數量、為何評估目標要自編、ENISA 對照報告用法、市面工具與 COMPLYD 五步、製造商 11 步 |
| `docs/reference/CRA/annex-I-II-original-text.md` | EUR-Lex 原文 Annex I／II，catalog control 層唯一來源 |
| `docs/reference/CRA/cra-reference.md` | 決策者給的 COMPLYD 指南摘要（Part I 只列六七點，有漏，以原文為準） |
| `docs/analysis/2026-10-10-cra-as-compliance-framework-gap-analysis.md` | 缺口分析，§1～§9。**§8 順序、§9 第二輪查證修正**最新 |

## 已確認的事實（都查過程式碼或 DEV DB）

1. 框架是資料不是程式；主流程無框架分支；資源庫（Profile）篩範圍＋SSP applicability 標個案，兩層篩選已在。
2. 解析器登記表只有 CMMC；無 OSCAL JSON 匯入；手動只能改刪不能新增條文。套件帶 CMMC seed SQL，是第二條入庫路。
3. **Bug**：審閱頁「不適用」存 `implementation-status`，啟動稽核讀 `applicability`，兩鍵不連動，DEV 19,086 筆全 applicable。修法一行同步。
4. 無 AO 的控制項系統允許（退回控制項層判定），CRA 第一版只進 30 條控制項不寫 AO。
5. CRA 業務實體：產品主檔可用「資訊系統盤點」，缺版本與專案連結；完全沒有對應功能的是通報、規劃期風險評估、支援期三件。其他缺項：弱點處理狀態、任務到期、流程引擎 timer、通報案件、對外 HTTP 送件、系統內讀 SBOM。
6. 官方無機器可讀條文；ENISA／JRC 69 頁對照報告有子要求與標準對照但編號是草案版；EN 40000-1-4 起草中、有版權、台灣無閱覽入口。
7. Annex I Part I **13 項**（非摘要的六七點）、Part II 8 項、Annex II 9 項；框架為 **4 群 34 條 51 AO**（新群組 Articles 13/14：風險評估、支援期、通報）；I.2.j 拆成網路與軟體介面／含硬體者實體介面兩個 AO（決策者裁：軟硬體都是客戶），DEV 只對齊英文母本 2112、繁中母本 2135、資源庫 460，已建專案不吃。
8. 資源庫寫入的租戶歸屬守門在 `ModuleFrameDomainService.verify_module_frame_exists_by_uid(writable=True)`，守衛測試 `test/security/code/test_module_frame_write_ownership_guard.py`。`oscal.*` 表沒有租戶欄、RLS 擋不到，寫入一律要經這道入口。
9. ~~系統公版資源庫由 BE image seed 建~~ 2026-10-12 裁撤；目前沒有任何公版資源庫，資源庫一律顧問自建租戶版。SYSTEM scope 機制保留。

## 決策者已裁

- CRA 獨立框架，catalog 不嵌 ISO 對照；跨框架 mapping 之後獨立做。
- 不另立「自家產品符合 CRA」目標；第〇步只是拿 FR-126 等現成材料當第一個測試案例。
- 通報是未來獨立模組，多來源（SRP、STIX／TAXII、各 CERT），細節後談。
- 先搞懂 CRA 再談平台。
- CRA 框架全英文出貨（2026-10-11）：控制項標題與建議證據改英文、比照 CMMC；框架層無多語機制，一本框架只存一種語言。建議證據是 AI 詮釋；決策者 2026-10-11 裁不卡審稿、英文稿先用，顧問日後確認有誤再以框架新版本或補灌修正（CM-2685）。
- ~~系統公版資源庫走「裝機時由程式建」~~ → **2026-10-12 裁撤**：公版資源庫不隨出貨建，顧問從畫面自建租戶版（框架目錄仍隨套件 seed 出貨）。`seed-public-libraries` 入口、`public_library_seed_cli.py`、`installer/public_libraries.sh` 已拔，install.sh／build_bundle 不再呼叫；SYSTEM scope 與唯讀守門（CM-2683／2684）保留給分享庫。DEV 三本 CRA 資源庫（449／451／452）與兩個 CRA 專案（1397／1398）已軟刪，決策者自建新資源庫驗第二期。
- 資源庫寫入歸屬守門上移到共同入口並以 AST 守衛測試把關，不再逐支 service 補。
- CRA 版本不掛官方 PDF：系統沒有替既有版本掛檔的路徑，整部法規 400 頁預覽意義低，等客戶要求。

## 已裁七項

見規劃稿「已裁的事（2026-10-11）」：開 FR-135 母卡、風險評估手填雛形並預留欄位、表單設定為資源庫第四件、AO 第一版不寫、通報只做寄信與紀錄、第〇步第一期就開、稽核階段當「檢查」用。第一期三張子卡見規劃稿「分期與派工」。

## 第一期結果

| 卡號 | 做了什麼 | commit | 狀態 |
|---|---|---|---|
| CM-2678 | 控制項標「不適用」時同步寫 `applicability`，啟動稽核範圍才會排除；附 2 個測試案例並做過突變測試 | BE `3ca6884b7` | 修正待驗證 |
| CM-2676 | ENISA／JRC 對照底稿＋31 條建議證據草稿 | BE `d9e45053a` | 修正待驗證 |
| CM-2677 | CRA 31 條 seed 灌 DEV、建租戶版「CRA 公版」資源庫與第〇步測試專案、掛 FR-126／FR-134 證據到 17 條、產出 `step-zero-gap-list.md` | BE `1a7bc04ec` | 修正待驗證 |
| CM-2679 | 兩支 CRA seed 移到 jedi-oscal-v2 `migrations/002`、`003`，主專案 manifest 無對應列 | BE `848582849`；套件 `3f2c3d2a`、`adc54f5e` | 修正待驗證 |
| CM-2680 | 控制項只送部分欄位時不再清空實作狀態 | BE `b99a2c719` | 修正待驗證 |
| CM-2681 | 新建資源庫回應的 `publish_status` 由 enable 推，與列表一致 | BE `5985a7647` | 修正待驗證 |
| CM-2682 | CRA 公版 SYSTEM 化：`RUN_MODE=seed-public-libraries`，`install.sh` 安裝與升級都跑 | BE `f8756b608` | 修正待驗證 |
| CM-2683 | 資源庫對非自有庫（系統公版、分享庫）標記唯讀、刪除回 403，回應帶 `can_edit` | BE `3861b182e`；FE `87745b0b` | 修正待驗證 |
| CM-2684 | 歸屬守門上移共同入口＋AST 守衛測試，補上控制項預設值、評估目標預設值、程序書池三支 | BE `09a6cb08d` | 修正待驗證 |
| CM-2685 | CRA 控制項標題與建議證據全英文、補 ENISA 漏項；套件 seed 改英文、DEV 一次性 UPDATE | BE `7315b6a05`、`8067e38ab`；套件 `cc5c515d` | 修正待驗證 |
| CM-2686 | 框架版本「瀏覽」對話框三處：無原始檔不顯示 404、Guidance 標題用翻譯、建議證據條列分行 | FE `5e183726` | 修正待驗證 |
| CM-2687 | 框架版本預覽第三態：原始 PDF 遺失顯示「檔案已遺失」；套件 jedi-file-upload 物件儲存無檔回 404 不再 500（DEV log 實證 S3Error 5xx） | — | 已開卡，等派工 |

jedi-oscal-v2 2.5.2（套件 `3d7362fb`）已推 Nexus，BE pin 換到 2.5.2（`30124c320`）。租戶版「CRA 公版」（uid `cf988e43-…`，tenant 102）與第〇步測試專案保留，是第〇步測資。母卡 [CM-2675](https://app.notion.com/p/FR-135-EU-CRA-31-3-3f6346da4cd08158900af098cafaf2db) 維持 Not started。

## 第二期子卡

| 卡號 | 做什麼 | 規模 | 依賴 | 波次 | 狀態 |
|---|---|---|---|---|---|
| CM-2688 | A1 規劃頁顯示條文原文與建議證據（BE 樹加兩欄＋FE 新元件） | S | 無 | ① | 修正待驗證（BE `d75b6f498`、FE `c0eb6418`；首腦核：回傳形狀有兩欄、檔 1,053 行淨減） |
| CM-2689 | B1 收證據範本 SYSTEM 化（phase=seed migration）＋啟動時空值退回系統預設 | S～M | 無 | ① | 修正待驗證（`5e621248f`；首腦核 DEV：範本 SYSTEM\|1\|1、manifest seed；runner 實跑 CRA 租戶 131 0→31 筆、CMMC 59 不變；翻譯列實測不需補；phase=seed 不需重產基線） |
| CM-2690 | F1 表單設定落點：module_frames.form_settings JSONB＋三層帶欄＋validate_form_settings | S | 無 | ① | 修正待驗證（`0a915e658`；首腦核 DEV：欄在；31 測試＋三組突變；error code 用 400013；**主線 migration 1 支，出貨基線待重產**）。seed CLI 寫入那段已隨機制裁撤一併刪除，欄位與驗證保留 |
| CM-2691 | C1 AO 拆分範本 cra-assessment-objectives.md（AI 拆、待顧問確認）＋jedi-oscal-v2 seed 004 | S | 無 | ① | 修正待驗證（BE `48d037741`、套件 `d91974f1` bump 2.5.3 未發版；首腦核 DEV：AO 25 筆（預估 21，多 4 有理由）、冪等；AO 句首 `[a]` 字母配合分類器解析） |
| CM-2692 | B2 無 AO 控制項每條各 clone＋略過 warning＋規劃頁控制項層補流程 uid | M | B1 | ② | 修正待驗證（`a348d7c92`；首腦核 DEV：專案 1400 首輪 24 筆控制項層工作對 24 份不同副本；4 測試＋突變；專案 1400 留作 B3 測資） |
| CM-2693 | F2 兩支唯讀 form-settings 端點（資源庫 uid／SSP uid） | S | F1 | ② | 修正待驗證（`021911452`；首腦核：兩 route 已註冊、451 form_settings 還原 NULL；偏離：SSP 版只服務專案 SSP、範本 SSP 走資源庫 uid 那支） |
| CM-2694 | V1 資訊系統版本子表 information_system_versions（jedi-asset 006＋四層＋端點＋FE 子表格） | M | 無 | ② | 修正待驗證（BE `7c8ed0f71`、FE `9dfa9e35`、套件 `1ae56f9f` 1.2.4 未發版；首腦核 DEV：14 欄、RLS＋FORCE 開、4 policy、cm_app 四權；5 支 RLS 測試＋突變。**首腦補**：新 v-can 掛點讓權限矩陣守衛紅，已重跑 gen_permission_matrix.py 轉綠） |
| CM-2695 | C2 ~~證據 locator~~＋收舊套掛檔＋刪舊 clone 端點 | M | 無 | ② | **修正後仍有問題**（locator 加錯層，由 CM-2697 拔除；收舊路部分保留）（BE `ccd5b2eae`、FE `ac563518`、套件 `6af7b957` 1.3.6 未發版、test `06d18cb`；首腦核 DEV：locator varchar(500) 在；超標檔淨減 73 行；舊套三環境唯讀查證無資料；**主線 migration 1 支，出貨基線待重產**；打折：`POST /module-frame/clone` 回 400 非 404、資源庫範本頁掛檔對話框未加出處輸入框（另開小卡）） |
| CM-2697 | C2b 拔掉程序書對應的 locator；保留 C2 收舊路 | S～M | C2 | ② | 修正待驗證（BE `3bcb1fe51`、FE `ef35c92f`、套件 `bdabc365`；首腦核 DEV：欄與 schema_migrations 紀錄皆清、45 筆對應未丟；三 repo grep 零殘留；舊路仍刪、詳情改讀新套仍在；守衛 369 過 2 紅皆基線） |
| CM-2698 | B3 覆核輪對無 AO 控制項從上一輪取範本 | S＋S | B2 | ③ | 修正待驗證（BE `53155f6c0`、套件 `e297e3e5` 1.3.7 未發版；首腦核：查詢方法在、套件傳 parent_round_id；3 測試＋突變；**打折：DEV 無走完首輪的 CRA 專案，覆核流程未實跑**） |
| CM-2699 | F3 受評標的頁依表單設定渲染擴充欄位、ext_fields／ext_links 收送 | M | F2 | ③ | 修正待驗證（BE `d3b0eaaad`、FE `7b8cb40e`；首腦核：FE 工作樹乾淨、SspTabPanel 已與 R1-a 合流成一個風險頁籤；7 測試＋突變；url 欄 key 要 `ext:cra-` 開頭才存得進 links） |
| CM-2700 | F4 建庫依框架帶 CRA 預設（framework_library_defaults/） | S～M | F1 | ③ | 修正待驗證（BE `ae948be1c`、FE `136d986c`；首腦核 DEV：新庫 454 form_settings 5 群 22 欄、2 party、enable=1；對照 CMMC 455 全空；角色 migration 兩列。偏離：`oscal.oscal_roles` 表不存在只寫 system_menus；migration 標 seed 非 active，**不需重產基線**；10 測試＋突變） |
| CM-2701 | R1-a 風險評估本體 oscal.ssp_risks＋四層＋端點＋FE 表格 | M | 無 | ③ | 修正待驗證（BE `a6cef11f3`、FE `63c5782b`；首腦核 DEV：24 欄、RLS＋FORCE、policy、cm_app 四權；RLS 測試＋兩組突變；**主線 migration 1 支出貨基線待重產**；頁籤本卡對所有專案顯示（R1-b 隱藏）；決策者 12:40 補裁「依據標準欄（threat_ids）開在畫面」runner 未吃到，列 R1-b 一起做） |
| CM-2702 | R1-b 風險頁籤依表單設定開關＋依據標準欄（下拉） | S | F3＋R1-a | ④ | 修正待驗證（第一版 BE `b61eb6b8a`／FE `8b0f0b97` 退回後，重做 BE `894829e1c`／FE `1f0a4ade`；首腦核 DEV：`system_menus` 十列、migration `2026-10-12-fr135-risk-reference-standards.sql` 標 seed 已登記、FE 讀 menuStore 無寫死 options；守衛 2 紅皆基線） |
| CM-2703 | C3 五份文件範本骨架＋F4 機制上傳預掛 | S | F4 | ④ | 修正待驗證（`c9f39335a`；首腦核 DEV：新庫 456 池 5 份、掛 15 條控制項 16 筆（卡寫 13 是首腦算錯，runner 照對照表做對）；對照 CMMC 457 池 0；12 測試＋突變；**打折：建專案複製池與掛載未實跑**） |
| CM-2696 | C1b AO 全面調整：新群組 Articles 13/14 三條、拆 6 條、改句搬移、建議證據三段式掛各 AO 底下、去標記；seed 005（2.5.4 未發版）；BE／FE 讀 AO 自己的建議證據 | M～L | C1 | ② | 修正待驗證（BE `16a61ba16`、FE `089a82df`、套件 `6ab5c23f`＋`c59087e6`；首腦核 DEV：4 群／34 條／49 AO／49 AO guidance／0 標記殘留；搬移三 AO 原列改掛（created_at 仍 10-11）；首腦重跑 005 計數不變；內容單一來源 `scripts/cra_ao_content.py` 產 md 與 seed；**打折：框架版本瀏覽對話框不列 AO 層建議證據，要看要另開小卡**） |

## 第〇步實測結論

七點缺口（規劃頁看不到條文、無 AO 準備期 0 工作、流程文件類沒材料、證據只能掛整份檔、一條多件事要拆 AO、Annex II 要結構化欄位、自家 SBOM 不在系統內）已由第二期處理，全文見 `step-zero-gap-list.md`。

## 下一棒要做的

1. **等決策者手測**：CM-2733、2735、2736（政策欄填文字能存、規劃頁 CRA.II.4 第三個 AO 顯示上傳）、FR-137 ①～⑤（CM-2722～2726）、CM-2730、2731、2728、2729；CM-2727 可 Done。決策者若續報試行問題，照本棒做法開小卡（每張附派工 prompt）。
2. **收口（全部等令）**：
   - design.md 更新：FR-137 D1／D2／D11／D13、§6.2～6.4 被 CM-2732 推翻、§6.4 掛鉤偏離（CM-2724）。
   - 排程架構優化另開卡（排程只入列＋worker 執行）；`core/scheduler.py` 12 支 job 單函式重構同卡或另卡。
   - 出貨基線重產（見總圖收口列，共 18 支）；套件發版六支＋pin 還原；push 四 repo（決策者本人）。
   - DEV 測資：74519／74521 關週期、資源庫 453～459 對齊或刪、其餘測試專案與任務。
   - 修 `ProjectPlanningView.vue` 1726／2338 既有 tsc 錯誤。
   - 三支測試檔（`test_system_characteristic_ext_fields`／`test_form_settings_schema`／`test_fr135_ao_evidence_source`）假資料仍用 `ext:cra-advisories`，改成中性 rel。
   - 三條紅色資安守衛；`security.txt` 想法另卡等裁；已刪專案 archive 策略（未來）。
   - SPEC／手冊／e2e／arc-review／母卡 Done／進版。
3. **未來指引**：適用判定八題與支援期結束日的 `guide` 內容，等決策者提供。
4. **CRA 自跑**：等自家 SBOM 有產物再談（決策者裁）；FR-138 自家 CRA 自評文件已另開 FR。

## 第二期裁示（決策者 2026-10-11，討論稿 `phase2-discussion.md` D1～D14 全裁）
- D1 沒有「複製資源庫」功能 → 本期範圍外；專案直接讀資源庫的表單設定。
- D2 表單設定落點 → `compliance.module_frames` 加 JSONB 欄 `form_settings`，結構檢查在應用層。
- D3 專案取得設定 → 主專案新端點，不改 jedi-compliance-audit DTO。
- D4 「收證據」範本改 SYSTEM scope 並隨安裝帶上 → 同意。落地方式依 design-platform P1：走主專案 `phase=seed` migration（冪等 UPSERT，新裝與升級都套，先例 fr093-4d；規範 `scripts/init/README.md`「出貨 seed 的去向」），**不** dump 進 `04-seed-core.sql`，其「必須為空」檢查維持不動（新裝順序 init → migrate，不衝突）。討論稿原寫「改 04 檢查放行」是落地方式寫錯，方向不變。
- D5 ~~刪 451 重建~~ → 2026-10-12 改：公版機制裁撤，DEV 五個 CRA 物件全軟刪；**C4「重建公版」卡取消**，驗收改為「決策者從畫面新建 CRA 資源庫＋專案」。
- D6 7 條 AO 拆分 → 不等顧問；分析模式由 runner 依 ENISA 底稿與第〇步拆點自產 `cra-assessment-objectives.md`（英文、`_obj.N`、標「AI 拆分待顧問確認」）→ 套件 seed 004。另 24 條不拆。
- D7 兩套程序書掛法 → 收掉舊套、詳情 API 改讀新套（已做，保留）。~~加 locator~~ **2026-10-12 裁撤**：程序書是公司 SOP，掛控制項＝證明有規定，不指章節；locator 加錯層，CM-2697 拔除。第〇步「證據指不到檔內某節」缺口屬**證據**（job evidence，準備期工作底下的附件）那條，要不要在證據上加出處另案討論。**概念鐵則：程序書（SOP／流程文件，CMMC／ISO 都有）≠ 證據（證明達到控制項要求的附件），兩套路、兩種畫面，不可混。**
- D8 覆核輪對控制項層工作傳 None → 本期修，與平台層 B 一起發 jedi-compliance-audit。
- D9 風險評估存哪 → **路線 2：新表**，掛專案 SSP，欄位對齊 OSCAL 風險物件（威脅、資產、衝擊、可能性、既有控制、措施、狀態、對應控制項、元件連結、威脅來源預留），與結案的改善計畫（POA&M）分開；GRC 期再決定是否合併。被排除：借 AR 殼（主體錯、要造 AP）；借 POA&M（OSCAL 允許但與本產品「改善計畫＝結案才有」心智模型衝突，顧問要轉觀念）；SC.props JSON 陣列（多人覆寫、無外鍵、統計要拆 JSON）。
- D10 文件範本 docx → 顧問主筆；runner 只做格式。~~上傳公版程序書池預掛~~ 公版已撤，改為：範本骨架放 repo（`docs/features/FR-135-…/templates/`），資源庫層「依框架帶預設」時一併掛進資源庫程序書池（與 F4 同機制，見下）。
- **F4 改法（2026-10-12 裁）**：表單設定、Annex II 預設說明文字、CRA 兩個 Party 角色空殼、文件範本預掛，統一改為 **`create_resource_library` 建庫時依框架 code 帶預設**（新檔 `app/oscal/service/framework_library_defaults/cra_2024.py` 等，一框架一檔，查表套用）；不再靠 seed CLI。
- D11 舊 `clone_module_frame` 端點 → 刪，FE 常數一起刪。
- D12 收證據範本來源 → 啟動稽核時讀到空值退回系統預設，建資源庫 INSERT 不改。
- D13 通報窗口、揭露政策 → **不存受評標的 props、不動資訊系統主檔**：通報窗口與製造商是 SSP metadata 的 Party，以 responsible-party 掛角色（「製造商」「漏洞通報聯絡人」）；揭露政策網址、安全通告頁、聲明取得位置是 SSP link。CRA 公版 SSP 範本預建角色，建專案隨範本複製，客戶在參與單位頁填人；第三期通報模組讀同一個 party。落地方式依 design-cra C-P5／C-P6：角色掛 party 本體 `props.responsible-role`（產品既有做法；建專案時 party uuid 重產，`metadata.responsible_parties` 會斷鏈），link 存受評標的 `SC.links`（`metadata.links` DEV 0 筆無寫入口）。Annex II 六項重分：party/link 類走此；支援期結束日、產品識別等單值才走 SC.props（`ext:` 前綴）。
- D14 自家 SBOM 成證據、定期執行證明 → 本期範圍外。
- 既定：第二期範圍合併兩份清單；design 拆 `design-platform.md`（P2-A）與 `design-cra.md`（P2-B～D）；表單設定最小版邊界；稽核當「檢查」用系統不改。

## 待裁

- 無。E1 收證據任務（裁 B→E2 做完）、AO 調整（C1b 做完）、AO 證據來源機制（E1 做完）、Art.13 放法（隨 C1b 新群組解決）皆已結案。

## 第三期裁示（決策者 2026-10-13）

兩卡、順序 X1 → S1：X1 三份法定文件 docx（Annex VII 技術文件、Annex II 使用者資訊、EU 符合性聲明，沿用 `SspDocxGenerator`）；S1 資訊系統版本表支援期剩餘天數徽章與篩選。
D4 只出 docx，不做 PDF。通報、提醒、弱點處理狀態的去向見下節「功能補齊」範圍。規格見 `phase3-discussion.md`。

## 「功能補齊」範圍（決策者 2026-10-13 裁，自跑 CRA 流程等這些做完再談）

1. **CRA 第三期縮為兩卡**：X1 三份法定文件 docx（Annex VII／Annex II／符合性聲明，通報範本不做）、S1 資訊系統版本表支援期剩餘天數徽章。通報案件頁籤、弱點處理狀態、提醒排程不做；討論稿已縮為兩卡（CM-2711）。
2. **新 FR「週期任務與條件通知」＝FR-137（母卡 CM-2714；探脈 CM-2715 已收 `e33570d7f`；討論稿＋雛形 CM-2717 派出；沿用 branch feature/FR-135；13 題裁示見 CM-2717 卡）**。另：專案頁雲端整合分頁 500（FR-052 舊 bug）開 CM-2716 修。：任務可設週期（設在任務上，資源庫 `module_frames.frequency` 閒置欄當建專案預設帶入）、時間到自動重開任務並通知執行人；掃描類可自動執行；掃描類可設風險門檻（high 以上）額外通知對象（CRA 填通報聯絡人），通知要留紀錄（哪次掃描、什麼等級、何時通知誰）。通報提醒、支援期提醒併入。三種任務型別（一般／檢測工具／問卷）都要能設。輸入：CM-2711 產出的 `phase3-deferred-to-recurring-tasks-fr.md`。
3. 弱點處理狀態欄轉 FR-134 待辦（鍵用 `fingerprint`）。
4. 套件 seed 裡 `CRA.ART.14.RP` 三個 AO 的「Reporting module (Phase 3)」字樣要改成「upload the notification records」（隨下次 seed 修）。
5. 自跑前置：Guidant AI 自家 SBOM 要有可掃／可掛的產物（FR-127 出貨 SBOM 無可下載產物、DEV 掃的是 primevue 範例）；第〇步清單 7 條「產品沒機制」另列產品待辦，不是合規系統能補。

## 寫文件的陷阱

- md 表格前後**必須空一行**，否則 `render_doc.py`／`render_index.py` 把表格吐成一行豎線，整頁跑版。
- 整站 build：`python scripts/deliverables/render_index.py docs/features/FR-135-2610-cra-compliance-framework/`。
- 有 front matter `title:` 時正文不要再寫 `# 標題`，會出兩個 H1。

## 下一棒不要做

- 等決策者發令才派工、開第二期卡；不寫 code。
- 不動租戶版「CRA 公版」與第〇步測試專案（第〇步測資）。
- 不把第三方摘要當 control 來源，一律用原文檔。
- 不把 EN 40000 或 ENISA 條文抄進 catalog。
