自主執行(2026-06-16,user 不在場)完成。決策全用建議值並記錄於
docs/analysis/2026-06-16-framework-maintenance-2a2b-decisions.md。 本報告供隔日驗收。所有 commit 已落地、未 push。
框架管理整條(框架 CRUD/刪除 → 版本管理 → catalog 文章式編輯 → 兩階段 PDF 匯入) 全部接回 v2 底層、路由註冊在舊 URL、FE 零改動。BOOT OK、真實 CMMC L2 PDF e2e 通過、 pytest 零新回歸。FE 不需改任何一行,重啟 BE 即可驗。
| 區塊 | FE 頁面 | 狀態 | 端點(舊 URL,FE 既有) |
|---|---|---|---|
| 框架 CRUD + 刪除 | ComplianceFrameworkManage |
✅ | POST /oscal-frameworks(list)、GET /oscal-frameworks/menu、POST /oscal-framework(create)、GET/PUT/DELETE /oscal-framework/<uid> |
| P1 版本管理 2a | ComplianceFrameworkVersionManage |
✅ | POST /oscal-framework-versions(list)、GET/POST/PUT/DELETE /oscal-framework-version[/<uid>] |
| P2 catalog 編輯 2b | FrameworkVersionEditView |
✅ | GET /oscal-framework-version/<uid>/catalog-tree、`PUT/DELETE /oscal-catalog-group |
| P3 兩階段 PDF 匯入 | FrameworkImportPage |
✅ | GET /oscal-framework-parse-jobs、POST /oscal-framework-parse-jobs/parse、GET/DELETE /oscal-framework-parse-jobs/<uid>、POST .../<uid>/confirm |
FrameworkService:補 delete_framework(靠 CASCADE)、update_version、delete_versionframework_versions 加回 release_date 欄(model/entity/mapper)get_oscal_parser_adapter + CatalogService.add_catalog。| 項目 | 結果 |
|---|---|
create_app() BOOT |
✅ OK(含全部 16 條框架路由註冊在舊 URL) |
| P1 read/write smoke | ✅ 版本 list(樹/parent/children)+ create/update/delete(含 release_date)round-trip |
| P2 read/write smoke | ✅ catalog-tree(control desc 從 statement part、AO 從 parts)+ control/AO 改寫還原 |
| P3 真實 CMMC L2 PDF e2e | ✅ parse=14 groups/110 controls/320 AO → confirm 全落地 + release_date → catalog 持久化數量一致 → cleanup |
| pytest(全套) | ✅ 42 failed + 50 errors ≤ baseline 47f/50e(零新回歸,失敗反少 5) |
OSCAL v2 是正規化模型,下列 v1 扁平欄位在 v2 無對應 slot,刻意不臆造儲存位置(避免埋髒資料):
| 欄位 | 說明 |
|---|---|
control guidance |
CMMC catalog 無 guidance part |
group description |
v2 catalog_groups 無 description 欄 |
AO description |
v2 AO part 單一 prose(AO 文字對映到 name↔︎prose) |
影響:FE 這些欄位編輯後不會保存(顯示空白)。控制項主要描述(control.description ↔︎ statement part)、 控制標題、AO 文字、群組名稱都正常可編可存。若客戶需要 guidance/group-description,需另開 FR 在 v2 catalog 加欄或 part(schema 變更)。
scripts/sql/2026-06-16-fr038-framework-versions-add-release-date.sqlscripts/sql/2026-06-16-fr038-recreate-framework-parse-jobs.sqlpsql --single-transaction -v ON_ERROR_STOP=1 -f <檔> 用 cmmgr。BE 必須同步上新版(含 v2 套件 path-dep 改動)否則炸。pyproject.toml path-dep 勿 commit。主專案 BE(branch feature/oscal-refactor):
ef600abf 框架 CRUD 接回舊 URL + 補 delete + 版本管理 2ac7f962d5 框架維護 2b — catalog 文章式編輯9973fc55 框架維護 — 兩階段 PDF 匯入 parse-job註:log 中
acc72361/6388a1dc(SSP 匯入相關)非本次工作,疑來自平行 session;本次框架維護僅上述 3 commit。
v2 套件(jedi-oscal-v2,branch feature/oscal-refactor,dev path-dep):
ceb1b3a FrameworkService delete/version CRUD + framework_versions.release_date1427956 delete_framework 改靠 CASCADE(修 FK)進「合規框架」頁逐項點:
完整決策(含取捨理由、反悔成本)見 docs/analysis/2026-06-16-framework-maintenance-2a2b-decisions.md: D0~D1(共用方向)、P1-1~6(版本管理)、P2-1~8(catalog 編輯,含 uid=str(id)、part 對映)、P3-1~7(parse-job)。