FR-037 ARCHIVE 收尾 SUMMARY

日期 2026-06-14
動作 🗄️ FR-037 整體 ARCHIVED,不續作
決策者 user
branch feature/oscal-refactor(未切、未 push)
狀態 純設計探索,從未 ship 任何 code、未套任何 DB 環境

§1

為什麼 Archive

FR-037 原本的定位(見 design.md)是輕量盤點:把 OSCAL 5 模型的 required 欄位跟現行 oscal.* ORM 逐欄對齊,產出一份「缺口清單」,供下一輪動表時知道一次要補哪些——只盤點、不實作、不重新設計

但實際工作一路演變成**「全 OSCAL 八大 model 從零重新設計成單一關聯式 schema」(單檔 45 表 / 673 欄,後裁剪為 42 表 / 650 欄)。這已經是一份完整的 schema 重新設計藍圖,遠超「盤缺口」的原意。User 評估後認為方向偏離太多,決定整個重新來、不在 FR-037 底下續作**,新一輪將另開 FR(下一個可用號 = FR-038)。

本資料夾所有產物保留,不刪除,供未來重啟時當參考素材。


§2

本 session(2026-06-14)做了什麼

對先前 session 產出的 schema 藍圖做了一輪完整審查,並依 user 中途決策出了 v2:

  1. 6-agent 平行審查:八大 model 分段對照官方 v1.2.2 JSON Schema 的 required 陣列、props/links 放置、uuid 參照原則、JSONB 折衷,逐表逐欄核對。
  2. 可執行性實測:本機拋棄式 PostgreSQL 16 跑 psql --single-transaction,一次建完、0 表 0 欄漏 COMMENT(共享 dev server 未動)。
  3. 過度設計評估:盤點產品實際 OSCAL 使用面(BE + jedi-oscal),指出 Component Definition / Mapping / OSCAL POA&M 文件層是 YAGNI 候選。
  4. user 中途決策 → 出 v2:user 拍板「只砍 Mapping 全段(3 表),CD 與 POA&M 保留(重構將全面採 OSCAL 模式)」,遂產出 v2(42 表 / 650 欄)+官方對齊修正(補 21 欄、移除幽靈欄、修正註解)。
  5. 部分註解豐富化:SECTION A+B(9 表)與 7 張 root 表的 COMMENT 已改寫成新手可讀版本;其餘段落仍為精簡註解。

§3

本 session 產出檔案(未來重啟可直接取用)

檔案 內容 價值
oscal-catalog-and-roots-schema-v2.sql 主成果:42 表 / 650 欄,砍 Mapping+官方對齊後的完整 schema,本機實跑通過 重啟時的最佳起點藍圖
2026-06-12-schema-review-report.md 完整審查報告:required 對照、props/links、參照原則、JSONB 折衷、§5 約束強化建議、§8 過度設計評估、§9 待決策清單 重新設計時的 checklist 與避雷指南
oscal-catalog-and-roots-schema.sql v1(45 表 / 673 欄),v2 的來源;COMMENT 已部分豐富化 歷史對照

⚠️ 上述審查報告與 v2 的部分結論建立在「全 OSCAL、不考慮現行產品」的前提上。新一輪若改變前提(例如「以產品實際需求為主、OSCAL 對齊為輔」),需重新評估 §8 的裁剪建議與表的取捨。

§4

先前 FR-037 session 既有產物(本 session 未碰,一併保留)

design.md(原盤點定位)、implementation-plan.mdverification-matrix.mdenhancement-table.md/.htmloscal-gap-audit.htmlcompliance-schema-overview-fr037.htmldata-population-analysis.htmloscal-exact-naming-plan.htmloscal-rename-plan.htmloscal-relational-schema-shared-and-catalog.sql(更早的舊版藍本)、oscal-object-relationships.xmindhandoff/2026-06-12-...-HANDOFF.md


§5

未來重啟(另開新 FR)的建議

  1. 先確定前提:是「忠實全 OSCAL round-trip」還是「產品需求為主、OSCAL 對齊為輔」——這決定表的取捨完全不同(見審查報告 §8)。
  2. 起點素材:直接拿 oscal-catalog-and-roots-schema-v2.sql 當藍圖,搭配 2026-06-12-schema-review-report.md 的 §9 待決策清單逐項拍板。
  3. 審查報告 §3(4 處同文件參照留 JSONB 的政策違例)、§5(多型 FK 缺 XOR CHECK)是 v2 尚未處理、重啟時要先決定的項目。
  4. 新 FR 去 docs/features/README.md FR 登記表查最大整數號 +1(目前 = FR-038),在 README 加一列、建 FR-038-<YYMM>-<功能名>/ 資料夾。

§6

✓ 已完成 / ✗ 刻意不做

✓ 已完成

  • README FR 登記表:FR-037 那列標 🗄️ ARCHIVED + 原因;「下一個 FR 號」提示更正為 FR-038
  • design.md:頂端加 ARCHIVED 標頭 + 狀態欄改 ARCHIVED
  • 本 SUMMARY(自包含,記錄為何 archive、成果位置、重啟建議)

✗ 刻意不做

  • 不開新 FR(user 指示,留待真正重啟時開)
  • 不寫 changelog:純設計探索、未 ship code、未動產品行為
  • 不寫 Notion 任務:同上,無對外可交付成果
  • 不歸檔對話紀錄:user 未要求;要的話用 scripts/extract_claude_sessions.py
  • 不 commit、不 push:依規範 commit 可自行做,但本次是文件 archive;working tree 全留給 user 決定何時 commit。未切 branch(仍在 feature/oscal-refactor

給 user:以上 archive 標記都在 working tree(未 commit)。要我 commit 這幾個 archive 文件變更的話說一聲;push 一律等你明示。