Phase C — 決策表(已 finalized)

2026-05-22 finalized — 全 26 題決策完成,design / plan 文件已同步更新。 此份保留作歷史紀錄。


§1

C1(OSCAL 角色 master data)

編號 問題 決策
C1-D1 system_menus 加 UNIQUE(group, key)? ✅ 加(pre-flight verify 無重複後加)
C1-D2 9 個角色 description 文案? ✅ 以 OSCAL spec / NIST SP 800-18 慣例為準(design-C1.md §3.2 已寫入 SQL)
§2

C8(_ROLE_LABEL_MAP 清理)

編號 問題 決策
C8-D1 DB 內 broken role_id 跑一次性 SQL 修正? ✅ 修(pre-flight audit 數量後跑)
C8-D2 prepared-for 算 organization role? ✅ 看亞航 reference docx 確認(pre-flight)
§3

C7(06_外部利用恢復)

編號 問題 決策
C7-D1 TEMPLATE_VERSION v2.0.0 → v2.1.0? ✅ Bump
C7-D2 C7 是否做? ✅ 做(兩行修改成本低)
§4

C6(FE 移除受評範圍 section)

編號 問題 決策
C6-D1 列表頁顯示「設備數 / 系統數」column? ✅ 保留
C6-D2 「前往 SSP 編輯」hard navigation vs tab 切換? ✅ tab 切換(保 context 連貫)
C6-D3 詳情頁 card 顯示三項? ✅ devices / info_systems / leveraged 全顯示
§5

C4(專案 CRUD 改造)

編號 問題 決策
C4-D1 request 內舊欄位處理 ✅ unknown=EXCLUDE + log warn(向後相容)
C4-D2 AuditSystemInputSchema / DeviceInputSchema class 留還是刪? ✅ C 階段尾聲確認無 caller 後刪(C4 本期保留)
C4-D3 ParticipantInputSchema.role 加 validate.OneOf? ✅ 加
§6

C2(SSP-scoped endpoints)

編號 問題 決策
C2-D1 Party DELETE cascade or reject? ✅ 預設 reject,?cascade=true query 強制
C2-D2 AP closed → SSP 完全 lock or reviewer comment? ✅ 完全 lock 寫操作(comment 屬另一獨立 feature)
C2-D3 C2 分批 ship? ✅ 分兩批:C2.1 (basic CRUD) → C2.2 (excel-import + leveraged)
C2-D4 current-ssp-uid URL pattern? /projects/<uid>/current-ssp-uid
§7

C3(受評範圍遷移,重型)

編號 問題 決策
C3-D1 Backfill SQL 跑時機? ✅ 人工跑(PR1 ship 後 DBA 監督執行)
C3-D2 PR1 ~ PR2 觀察期長度? ✅ 1 週
C3-D3 沒 active AP 的 project backfill? ✅ 跳過(user 啟動 AP 後 SSP 從 MF clone 帶範圍)
C3-D4 410 response 訊息規範 用 GrcErrorCode pattern (GRC_410001 / GRC_410002),FE 用 error_code 查 i18n,msg 為 zh-tw fallback。對齊專案規範。
C3-D5 OscalRole ORM 處理方式 保留 OscalRole stack(OSCAL 文件結構用,跟 system_menus 服務不同對象 — UI dropdown vs OSCAL 匯出 metadata.roles[]);C1 同步 seed oscal_roles 9 筆
§8

C5(FE SSP tab)

編號 問題 決策
C5-D1 AP selector 預設? ✅ Latest active
C5-D2 預展開 accordion? ✅ 基本資料 + 受評範圍-設備
C5-D3 控制項 / 程序書 link 跳新頁? ✅ 跳新頁(既有 fullpage 設計)
C5-D4 leveraged section 等 C2.2 後再做? ✅ 是(C5 first ship 不含 leveraged,accordion 顯示 placeholder)
C5-D5 non-manager 編輯按鈕 hide vs disable? ✅ disable + tooltip(user 知功能存在但無權)

§9

兩個從建議覆寫的決策

編號 我原建議 User 覆寫 為什麼
C3-D4 410 訊息 zh-tw 直接寫死 用 GrcErrorCode + FE i18n 對齊專案規範 — 所有 error 都該走 error code 結構 + FE i18n
C3-D5 OscalRole 留到 C 階段尾聲評估 保留 + C1 同步 seed oscal_roles 釐清 oscal_rolessystem_menus 服務不同對象(OSCAL 文件 vs UI),不互相取代

§10

下一步

✅ 全 26 題決策已完成 ✅ design / plan 文件已同步更新 ✅ open-decisions.md 標示 resolved

user 可切換 model 到 Sonnet,貼 handoff-to-sonnet.md 內的接手 prompt 開工。