SSP OSCAL Alignment — Phase 3 DONE / Phase 4 WIP SUMMARY — 2026-05-25

項目 內容
Phase 範圍 Phase 3 全完工(§3.1 + §3.2 + §3.3)+ Phase 4 部分完工(BE read endpoints + FE 新 tab read-only + BE write endpoints WIP)+ Phase 5 已 defer(user 拍板等定案)
日期區間 2026-05-25(單日全程)
Branch(兩 repo 一致) feature/ssp-oscal-alignment
主專案 local commits 28(baseline d12bd705 Phase 1+2 收尾後)
主專案 working tree M pyproject.toml(path-dep dev-only,永遠不 stage
FE local commits 1(baseline e873fae
FE working tree clean
Test 狀態 BE 全相關 test suite 全綠(91 docx adapter + 136 excel template/parser + 121 ssp excel/docx import + 17 v2_bundle/smoke)
下一步 新 session 接手 Phase 4 剩餘工(FE inline CRUD / 移除舊 tab / 5-tab 重組 / Phase 4.4 FE Excel preview 對齊 v3 + 接 BE write endpoints route 端)

0. 一句話收尾

Phase 3 v3.0.0 OSCAL-aligned 重組 ship 完(Excel + Docx 雙 import path),FE 端新 tab 已能看 BE component/LA/inventory 資料;但Phase 4 inline CRUD 跟移除舊 tabs 沒做(user 仍用舊 tabs 編輯 hardware/info_system),且 Phase 3.1 v3.0.0 Excel 樣板 ship 後 FE Excel preview 會顯示空 — Phase 4.4 「Reuse Excel preview component」必須在 Phase 4 collect 收掉。


1. 本期 commits 清單(主專案,10 commits)

Commit 摘要
05ae6a19 feat: Phase 4 BE WIP — SspComponentsAppService CRUD methods
910b7f5a chore: Phase 3.3 — regenerate reference templates v3.0.0
c115b7bc feat: Phase 3.2 — Docx components + inventory_items extractors
f7eaa09f feat!: Phase 3.1 — Excel sheet OSCAL-aligned 重組 v3.0.0
475fb544 docs: defer Phase 5 OSCAL Export
49eed533 feat: Phase 4 BE — /ssp//components + /ssp//inventory-items read endpoints
59c1378f test: Phase 3 — integration smoke for v2-bundle pipeline
ca7f5bd6 docs: 補登 Phase 2 implementation plan 文件入版
8ac3e35b fix: Phase 3.X — Excel parser 輸出 v2-bundle dict shape,恢復 200
8e8d5624 fix: Phase 3 Bug C — v2-bundle confirm path 套 content_overrides

FE repo 1 commitbd23047 feat: Phase 4 FE — new「元件 + 授權 + 資產」第四 tab

Memory 更新~/.claude/projects/-Users-chouraymond-Projects-Billows-Audit-Manager-compliance-manager-be/memory/feedback_cross_repo_read_claude_md_first.md(新)+ feedback_be_fe_version_alignment.md(修正不再勸切 session)+ MEMORY.md index 更新


2. Phase 3 + Phase 4 完工 / 未完工 速覽

Phase 3 ✅ DONE

子段 完工內容 Commit
§3.X transitional v1 (devices/info_systems/leveraged) → v2-bundle dict shape mapping,恢復 Excel import 412 → 200 8ac3e35b
§3.1 Excel sheet 重組 TEMPLATE_VERSION v2.6.0 → v3.0.0 major bump;移除設備/資訊系統/外部利用服務;新增 資產清冊(InventoryItem)/ 元件清冊(Component)/ 利用授權(LeveragedAuthorization)三 OSCAL-aligned sheets f7eaa09f
§3.2 Docx extractor extract_components_table + extract_inventory_items_table + adapter wire c115b7bc
§3.3 Reference regen regen v3.0.0 sample xlsx;刪 v2.6 reference 910b7f5a

Phase 4 部分 — DONE / WIP / TODO 一覽

子段 狀態 內容
BE read endpoints ✅ DONE /ssp/<uid>/components + /ssp/<uid>/inventory-items GET(pre-join LA title / implemented_components)
FE 新 tab read-only ✅ DONE SspComponentsLeveragedInventoryTab.vue(DataTable + card list + DataTable)插入 tab 4,舊 tabs 標「(舊)」
BE write endpoints — components CRUD ⚠️ WIP App service add_item/update_item/delete_item 已寫(05ae6a19),routes 還沒暴露 POST/PUT/DELETE
BE write endpoints — inventory_items CRUD ❌ TODO 同 components 寫 add_item/update_item/delete_itemssp_inventory_items_app_service.py + route POST/PUT/DELETE
FE inline CRUD on new tab ❌ TODO Add/Edit/Delete dialogs × 3 entities(components / LA / inventory_items)
移除舊 3 tab ❌ TODO SspTabPanel.vue 移除 設備(舊)/資訊系統(舊)/外部利用服務(舊) + 刪 LeveragedSection.vue/ModuleFrameSspDevicesPanel.vue/ModuleFrameSspInfoSystemsPanel.vue
Phase 4.1 5-tab 完整結構 ❌ TODO 受評標的(SC)拆獨立 tab / 單位+參與人員合併 / 加控制項 tab
Phase 4.4 Reuse Excel preview component TODO 緊迫 Phase 3.1 v3.0.0 樣板 ship 後 FE Excel preview (SheetPreviewDevices/InfoSystems/Leveraged) 讀 v1 keys → 顯示空。要 generalize 成 v2-bundle keys
i18n keys 從 fallback 移正規 namespace ❌ TODO Phase 4 完整 UX 收尾
Excel app service _apply_content_overrides 接 v3 keys ❌ TODO FE Excel preview 改完送 v3 keys 後生效

3. 行為差異對使用者影響(Phase 3 collateral)

3.1 Excel template v2.6.0v3.0.0 BREAKING

  • v2.x 樣板被 parser 拒絕(GRC_EXCEL_TEMPLATE_VERSION_UNSUPPORTED),user 須重新下載 v3.0.0 樣板
  • 新樣板 sheet 結構:基本資料 / 受評標的 / 單位 / 參與人員 / 利用授權 / 元件清冊 / 資產清冊 / 控制項與AO / 程序書
  • 舊 in-flight v2.x parse_jobs 在 DB 內仍可走 confirm(derive_v2_bundle_keys 對 v1 keys mapping 兼容);只有上傳新檔案會強制 v3.0.0

3.2 v3.0.0 Excel 上傳後 FE Excel preview 會空(最緊迫 follow-up

  • BE parser 現輸出 components / leveraged_authorizations / inventory_items keys
  • FE SheetPreviewDevices.vue / SheetPreviewInfoSystems.vue / SheetPreviewLeveraged.vue 還讀 devices / info_systems / leveraged keys → 顯示空
  • 必須 Phase 4.4 收掉

3.3 docx import 走新 path(樣板 .docx 還沒加 H2 section 時 fallback OK)

  • adapter adapt_to_bundle() 新加 extract_components_table + extract_inventory_items_table 呼叫
  • 樣板 .docx 若還沒加 「H2 System Components」/「H2 Hardware Maintenance」section → extractor 返 [] 不影響既有 T6 (CSP/CSO) / T7 (Category) 路徑
  • 樣板加表編輯(圖形 Word)由 user 自己做;code 端已 ready

4. 規範文件齊全度

項目 路徑 狀態
design.md §3 階段表 + §5 banner Phase 5 defer docs/features/FR-028-2605-ssp-oscal-alignment/design.md 475fb544
design.md §11 reconciliation 新增 entries(§11.18~§11.21 ※TODO) 同上 ❌ 下個 session 補
implementation-plan-phase2.md 結尾 Phase 5 defer 註 docs/features/FR-028-2605-ssp-oscal-alignment/implementation-plan-phase2.md 475fb544
Phase 1+2 FINAL SUMMARY Phase 5 defer 標 2026-05-25-phase1-phase2-FINAL-SUMMARY.md 475fb544
本 SUMMARY docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase3-DONE-phase4-WIP-SUMMARY.md ✅ 本文件
Changelog (batch 本 phase) docs/changelog/2026-05-25-phase3-phase4-wip.md ❌ 下個 session 補
Conversation history JSONL extract docs/conversation-history/2026-05-25/ssp-oscal-alignment-phase3-4/ ❌ 下個 session 補

5. 已知 follow-ups(Phase 4 收尾必收)

L1 — Phase 4 BE write endpoints route 端 + inventory_items CRUD

05ae6a19 加了 SspComponentsAppServiceadd_item/update_item/delete_item,但 routes 還沒對外暴露 POST/PUT/DELETE,且 SspInventoryItemsAppService 沒對應 CRUD。

需做:

  1. api/oscal/routes/ssp/ssp_components_route.py
    • SspComponentsListResourcepost
    • 新加 SspComponentsDetailResource class(put + delete
    • api/oscal/__init__.py add_resource 新 detail route
  2. app/oscal/service/ssp_inventory_items_app_service.py:複製 components CRUD pattern
  3. api/oscal/routes/ssp/ssp_inventory_items_route.py:同樣 list + detail route

L2 — Phase 4 FE inline CRUD on new tab

SspComponentsLeveragedInventoryTab.vue 目前是純展示。要加:

  • 三個 Add/Edit dialogs × 三 entities(components / LA / inventory_items)
  • Form validation(component_type 14 enum / impact_level 4 enum / required fields)
  • LA dropdown 選擇器 within component edit(leveraged_authorization_uid FK link)
  • Multi-select chip picker for inventory_items.implemented_component_uids
  • 串 SspService.{create,update,delete}{Components,Inventory,Leveraged} 方法(已有 listLeveraged / updateLeveraged 等,需檢視齊全度)

L3 — Phase 4 移除舊 3 tab + 廢棄 vue 元件

新 inline CRUD 上線後:

  1. SspTabPanel.vue 移除 tab 5/6/7(設備舊 / 資訊系統舊 / 外部利用服務舊)
  2. SECTION_TAB_MAP 收回到只剩新結構
  3. src/components/grc/ssp/SspLeveragedSection.vue
  4. src/components/grc/ModuleFrameSspDevicesPanel.vue / ModuleFrameSspInfoSystemsPanel.vue(或標 deprecated 待 MF template-edit 確認也不用)
  5. project-planning.json 移除 section.scope_devices / scope_info_systems / leveraged keys
  6. count.devices / count.infoSystems / count.leveraged 從 SspTabPanel state 移除

L4 — Phase 4.1 5-tab 完整結構

設計 §4.1:[基本資料][受評標的][參與人員][元件+授權+資產][控制項]

需做:

  1. 受評標的(SC)從 SspBasicSection.vue 拆出 → 新 SspSystemCharacteristicSection.vue 獨立 tab
  2. 單位 + 參與人員 合併 → 新 SspPartiesSection.vue(或 ModuleFramePartiesPanel 加 mode 切換)
  3. 加控制項 tab — 可指向既有 controls page,或 inline panel 在 ssp edit view 內

L5 — Phase 4.4 Reuse Excel preview component(緊迫)

Phase 3.1 v3.0.0 樣板 ship 後 FE Excel preview 會空。需做:

  1. Excel preview 路由:src/views/module-frame/ImportExcelPage.vue 或同等
  2. SheetPreviewDevices.vue / SheetPreviewInfoSystems.vue / SheetPreviewLeveraged.vue
    • 讀 v2-bundle keys:components / inventory_items / leveraged_authorizations
    • 或 generalize 三檔成單一 SheetPreviewComponents.vue / etc.
  3. Excel app service _apply_content_overrides._ROW_OVERRIDE_SHEETS 增加 components / leveraged_authorizations / inventory_items(或拆 v3 path 抽單獨 _apply_v2_bundle_overrides 接 docx 端 Bug C 同 pattern)
  4. 對齊 docx 端 preview UI — Phase 4.4 spec 講 generalize 兩端共用

L6 — i18n keys 規範

SspComponentsLeveragedInventoryTab.vue 目前 i18n keys 走 ?? '中文 fallback'。要在 src/config/locales/i18n/zh-tw/grc-shared.json + en/grc-shared.json 加 namespace ssp_components_leveraged_inventory.*

L7 — Phase 1+2 Bug B 仍未查(handoff 2026-05-25-phase1-phase2-FINAL-SUMMARY.md §8 L2)

docx import 5 parties 全 decision=skip → 0 parties 寫入。FE diff stepper 預設 decision UX 跟 BE 收 payload 對應不明。Phase 4 FE 改 stepper UX 時順手釐清。

L8 — L1 jedi-oscal 進版 + Nexus push + 主專案 pin 還原(user 拍板才做)

per Phase 1+2 SUMMARY §7.1。Phase 5 已 defer 但 Phase 3+4 ship 完仍要 bump 套件版本(套件 layer 沒改但主專案使用方式有改)。user 2026-05-25 拍板「進版不用做,等測完才會說」 — 等 user。

L9 — BE/FE 版號 1:1 對齊(v1.1.0 → v1.2.0?)

per memory feedback_be_fe_version_alignment。整個 feature 收尾後同步 bump,user 拍板進版時做。


6. 部署 handover(user 拍板才執行)

6.1 部署順序

  1. jedi-oscal(套件本身沒改但對應 caller 改了 → 不需 bump,pin 不變)
  2. 主專案 deploy(含 Phase 3.1 v3.0.0 sheet 重組)
  3. FE 同步 deploy(新 tab + Phase 4 完工部分)
  4. 重要:user 必須先「下載 v3.0.0 樣板」再上傳;現有 v2.x 樣板會被 reject

6.2 BE 重啟必做

per feedback_be_restart_after_service_change

  • 改了 app/oscal/service/excel_parser/*.py(4 個檔)
  • 改了 app/oscal/service/ssp_components_app_service.py / ssp_inventory_items_app_service.py
  • 改了 app/module_frame/excel_template/sheet_definitions.py / generator.py
  • 改了 app/module_frame/service/ssp_import_template_app_service.py
  • 改了 domain/oscal/parser/docx_section_extractors.py / domain/oscal/adapter/cmmc_ssp_adapter.py

kill -9 <pid> 後 restart(per feedback_backend_restart_orphan_pids)。

6.3 兩 repo git push

兩 repo 都還 local(主專案 28 commits ahead / FE 1 commit ahead)。Push 需 user 明確指示。


7. 給下個 session 接手的精簡開工 prompt(直接複製貼)

你接手 SSP OSCAL Alignment Phase 4 收尾。Phase 3 全完工(§3.1 v3.0.0 sheet 重組 +
§3.2 docx extractors + §3.3 reference regen),Phase 4 部分完工(BE read endpoints +
FE 新 tab read-only display + BE write endpoints WIP)。Phase 5 已 defer。

按以下順序讀文件(共 5 個):
1. docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase3-DONE-phase4-WIP-SUMMARY.md
   (本 SUMMARY — 整個本期完工 + 未完項目)
2. docs/features/FR-028-2605-ssp-oscal-alignment/design.md §3 + §4(Phase 3 + Phase 4 spec;§5 已 defer 可跳)
3. docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase1-phase2-FINAL-SUMMARY.md
   §8 L1/L2/L3(Bug A/B/C + 進版 leftover)
4. app/oscal/service/ssp_components_app_service.py(WIP CRUD 已加,看 pattern)
5. FE 端必讀:~/Projects/Billows/Audit-Manager/compliance-manager-fe/CLAUDE.md
   (per memory feedback_cross_repo_read_claude_md_first — 跨 repo 動工必讀)

開工順位(per 本 SUMMARY §5 L1~L9):
- **緊迫**:L5 Phase 4.4 FE Excel preview 對齊 v3 keys(Phase 3.1 ship 後 preview 空)
- 必收:L1 BE write endpoints route + inventory CRUD → L2 FE inline CRUD → L3 移除舊 tabs
- 完整度:L4 5-tab 結構 → L6 i18n 規範
- 排查:L7 Bug B / L8 進版 / L9 BE/FE 版號對齊

開工前 pre-flight:
- git branch --show-current → feature/ssp-oscal-alignment(兩 repo 一致)
- git status: M pyproject.toml only(dev-only path-dep,**永不 stage**)
- BE test smoke:poetry run pytest tests/test_excel_parser_v2_bundle.py
  tests/test_excel_parser.py tests/test_ssp_import_pipeline_smoke.py
  tests/test_cmmc_ssp_adapter_v3_bundle.py — 全綠
- FE test smoke:cd ~/Projects/Billows/Audit-Manager/compliance-manager-fe && npx vite build → 通

收尾後(user 拍板才做):jedi-oscal 進版(如有改套件)+ 兩 repo git push + BE/FE
版號對齊 bump(per memory feedback_be_fe_version_alignment)。

附錄 A — 路徑速查

用途 路徑
本 SUMMARY docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase3-DONE-phase4-WIP-SUMMARY.md
Phase 1+2 FINAL SUMMARY docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase1-phase2-FINAL-SUMMARY.md
Phase 3+4 handoff(原) docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase3-4-handoff.md
design.md v1.2 + §11 reconciliation 17 條 + §5 defer banner docs/features/FR-028-2605-ssp-oscal-alignment/design.md
Excel sheet defs v3.0.0 app/module_frame/excel_template/sheet_definitions.py
Excel parser app/oscal/service/excel_parser/{parser,sheet_handlers,types,version_check,v2_bundle}.py
Excel app service app/oscal/service/ssp_excel_import_app_service.py
Components / Inventory 新 app services app/oscal/service/ssp_components_app_service.py / ssp_inventory_items_app_service.py
Docx extractors(新 components / inventory) domain/oscal/parser/docx_section_extractors.py
Docx adapter v3 bundle domain/oscal/adapter/cmmc_ssp_adapter.py
FE 新 tab ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/ssp/SspComponentsLeveragedInventoryTab.vue
FE SSP tab root ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/ssp/SspTabPanel.vue
FE Excel preview(待 §3.1 對齊 ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/ssp-excel-import/SheetPreview*.vue
Reference templates v3.0.0 docs/features/FR-011.2-2605-ssp-import-export-phase2/reference/ssp_template_*_v3.0.0.xlsx