| 項目 | 內容 |
|---|---|
| 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 端) |
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 收掉。
| 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/ |
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 commit:bd23047 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 更新
| 子段 | 完工內容 | 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 |
| 子段 | 狀態 | 內容 |
|---|---|---|
| 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_item 在 ssp_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 後生效 |
v2.6.0 → v3.0.0 BREAKINGGRC_EXCEL_TEMPLATE_VERSION_UNSUPPORTED),user 須重新下載 v3.0.0 樣板基本資料 / 受評標的 / 單位 / 參與人員 / 利用授權 / 元件清冊 / 資產清冊 / 控制項與AO / 程序書derive_v2_bundle_keys 對 v1 keys mapping 兼容);只有上傳新檔案會強制 v3.0.0components / leveraged_authorizations / inventory_items keysSheetPreviewDevices.vue / SheetPreviewInfoSystems.vue / SheetPreviewLeveraged.vue 還讀 devices / info_systems / leveraged keys → 顯示空adapt_to_bundle() 新加 extract_components_table + extract_inventory_items_table 呼叫| 項目 | 路徑 | 狀態 |
|---|---|---|
| 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 補 |
05ae6a19 加了 SspComponentsAppService 的 add_item/update_item/delete_item,但 routes 還沒對外暴露 POST/PUT/DELETE,且 SspInventoryItemsAppService 沒對應 CRUD。
需做:
api/oscal/routes/ssp/ssp_components_route.py:
SspComponentsListResource 加 postSspComponentsDetailResource class(put + delete)api/oscal/__init__.py add_resource 新 detail routeapp/oscal/service/ssp_inventory_items_app_service.py:複製 components CRUD patternapi/oscal/routes/ssp/ssp_inventory_items_route.py:同樣 list + detail routeSspComponentsLeveragedInventoryTab.vue 目前是純展示。要加:
新 inline CRUD 上線後:
SspTabPanel.vue 移除 tab 5/6/7(設備舊 / 資訊系統舊 / 外部利用服務舊)src/components/grc/ssp/SspLeveragedSection.vuesrc/components/grc/ModuleFrameSspDevicesPanel.vue / ModuleFrameSspInfoSystemsPanel.vue(或標 deprecated 待 MF template-edit 確認也不用)section.scope_devices / scope_info_systems / leveraged keys設計 §4.1:[基本資料][受評標的][參與人員][元件+授權+資產][控制項]
需做:
SspBasicSection.vue 拆出 → 新 SspSystemCharacteristicSection.vue 獨立 tabSspPartiesSection.vue(或 ModuleFramePartiesPanel 加 mode 切換)Phase 3.1 v3.0.0 樣板 ship 後 FE Excel preview 會空。需做:
src/views/module-frame/ImportExcelPage.vue 或同等SheetPreviewDevices.vue / SheetPreviewInfoSystems.vue / SheetPreviewLeveraged.vue:
components / inventory_items / leveraged_authorizationsSheetPreviewComponents.vue / etc._apply_content_overrides._ROW_OVERRIDE_SHEETS 增加 components / leveraged_authorizations / inventory_items(或拆 v3 path 抽單獨 _apply_v2_bundle_overrides 接 docx 端 Bug C 同 pattern)SspComponentsLeveragedInventoryTab.vue 目前 i18n keys 走 ?? '中文 fallback'。要在 src/config/locales/i18n/zh-tw/grc-shared.json + en/grc-shared.json 加 namespace ssp_components_leveraged_inventory.*。
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 時順手釐清。
per Phase 1+2 SUMMARY §7.1。Phase 5 已 defer 但 Phase 3+4 ship 完仍要 bump 套件版本(套件 layer 沒改但主專案使用方式有改)。user 2026-05-25 拍板「進版不用做,等測完才會說」 — 等 user。
per memory feedback_be_fe_version_alignment。整個 feature 收尾後同步 bump,user 拍板進版時做。
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.pyapp/module_frame/excel_template/sheet_definitions.py / generator.pyapp/module_frame/service/ssp_import_template_app_service.pydomain/oscal/parser/docx_section_extractors.py / domain/oscal/adapter/cmmc_ssp_adapter.pykill -9 <pid> 後 restart(per feedback_backend_restart_orphan_pids)。
git push兩 repo 都還 local(主專案 28 commits ahead / FE 1 commit ahead)。Push 需 user 明確指示。
你接手 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)。
| 用途 | 路徑 |
|---|---|
| 本 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 |