| 項目 | 內容 |
|---|---|
| Phase 範圍 | Phase 4 主要工作全完工(L5 緊迫 / L1a 必收 / L2 必收 / L3 必收 / L6 完整度)+ L4 skip(spec under-defined + user 拍板)+ L7/L8/L9 等 user 拍板 |
| 日期區間 | 2026-05-25(單日全程) |
| Branch(兩 repo 一致) | feature/ssp-oscal-alignment |
| 主專案 local commits | 33(baseline d12bd705 Phase 1+2 收尾後;本期 +5 commits) |
| 主專案 working tree | M pyproject.toml(path-dep dev-only,永遠不 stage) |
| FE local commits | 5(baseline e873fae;本期 +3 commits) |
| FE working tree | clean |
| Test 狀態 | BE pytest smoke 106 passed / FE vite build ✓ in 7.04s |
| 下一步 | 本期主軸 ship 完,user 重啟 BE + manual 測試 → user 拍板進版 (L8 jedi-oscal bump + L9 BE/FE 版號對齊) → 部署 staging / prod |
Phase 4 demo gap 全收尾:FE v3 樣板上傳 preview 不再空(L5)+ SSP 編輯第四 tab 可 inline CRUD(L2)+ BE write endpoints 對外暴露(L1a)+ 舊 3 tab 從 SSP edit 移除(L3)+ i18n keys 從 fallback 移到正規 namespace(L6)。L4 5-tab 結構因 spec under-defined + user 拍板「控制項本來就沒有」維持現狀 4 tab。
bd23047)| Commit | Task | 摘要 |
|---|---|---|
bfab64b |
L5 | feat: v3-bundle Excel preview elements(新建 3 SheetPreview + wrapper 切換 + store REMOVED_KEYS + i18n keys) |
00c2587 |
L2+L3 | feat: inline CRUD on 第四 tab + 移除舊 3 tab(SspService 6 method + SspComponentsLeveragedInventoryTab 加 3 Dialog + SspTabPanel 4 tab + 移除舊 import) |
05b6fdf |
L6 | feat: i18n keys 從 fallback 移到正規 namespace(新 ssp-components-leveraged-inventory.json zh-tw+en + index.js 註冊 + common.json action + vue 檔 69/71 fallback 移除) |
c3c94473)| Commit | Task | 摘要 |
|---|---|---|
eedad8ab |
L5 BE | feat: _ROW_OVERRIDE_SHEETS 接 v3 keys(components / leveraged_authorizations / inventory_items;保留舊 v1 keys 兼容) |
b02f833e |
L1a | feat: Components / Inventory write endpoints CRUD(components route 加 post + DetailResource;inventory app service 補 add/update/delete_item;M2M no-op 加 warning;api/oscal/init.py 兩條 detail route) |
Memory 更新:無新增(本期沒新行為規範可記入)。
| Task | Status | 內容 |
|---|---|---|
| L5 緊迫 — FE Excel preview 對齊 v3 keys | ✅ DONE | 3 個新 SheetPreview 元件 + wrapper 切換 + BE override sheets 加 v3 keys |
| L1a 必收 — BE Components/Inventory write endpoints + inventory app service CRUD | ✅ DONE | route post + DetailResource × 2 + inventory app service add/update/delete + M2M silent skip pattern |
| L2 必收 — FE inline CRUD on 第四 tab | ✅ DONE | 3 個 Add/Edit Dialog × 3 entity + per-row Edit/Delete + add button × 3 section + SspService 6 method |
| L3 必收 — 移除舊 3 tab + 廢棄 vue 元件 | ✅ DONE 部分 | SspTabPanel 移除 tab 5/6/7 + import / counts / SECTION_TAB_MAP redirect。舊 vue 元件保留(MF /template-edit 還用 apiBase='module-frame') |
| L4 完整度 — Phase 4.1 5-tab 完整結構 | ⏭ SKIP | 3 個 sub-item 全 skip(SC 拆 / parties 合併 / 控制項 tab)— spec under-defined + user 拍板「控制項本來 SSP 編輯就沒有」 |
| L6 完整度 — i18n keys 從 fallback 移到正規 namespace | ✅ DONE | 新 namespace JSON 雙語 + index.js 註冊 + common.json 補 action + vue 檔 69/71 fallback 移除(剩 2 處非 i18n 用途 fallback 保留) |
| L7 排查 — Bug B docx parties 全 skip | ⏸ 未開工 | Phase 1+2 SUMMARY §8 L2 留下;推測 FE diff stepper 預設 decision=skip 而非 accept;Phase 5+ FE 改 stepper UX 時順手釐清 |
| L8 — jedi-oscal 進版 + Nexus push + 主專案 pin 還原 | ⏸ 等 user 拍板 | user 2026-05-25 拍板「進版不用做,等測完才會說」 |
| L9 — BE/FE 版號 1:1 對齊(v1.1.0 → v1.2.0?) | ⏸ 等 user 拍板 | per memory feedback_be_fe_version_alignment;user 拍板進版時做 |
?section=scope_devices etc.) 仍可用 — redirect 到整合 tab (index 3) 保留書籤兼容| URL | Methods |
|---|---|
/ssp/<uid>/components |
GET / POST |
/ssp/<uid>/components/<item_uid> |
PUT / DELETE |
/ssp/<uid>/inventory-items |
GET / POST |
/ssp/<uid>/inventory-items/<item_uid> |
PUT / DELETE |
inventory.update_item 對 M2M (implemented_component_uids) silent skip + log warning(per entity §Mutation contract — 改 M2M 必須 delete + recreate)lang.ssp_components_leveraged_inventory.* namespace(zh-tw + en),約 30 keylang.common.action 補進 common.json(兩 locale)| 項目 | 路徑 | 狀態 |
|---|---|---|
| design.md §11 補本期 reconciliation(§11.18 ~ §11.21) | docs/features/FR-028-2605-ssp-oscal-alignment/design.md |
✅ 本 commit batch(4 條 entries) |
| 本 SUMMARY | docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase4-COMPLETE-SUMMARY.md |
✅ 本文件 |
| Changelog batch | docs/changelog/2026-05-25-feat-ssp-oscal-alignment-phase4.md |
❌ 後續 commit 補 |
| Conversation history JSONL extract | docs/conversation-history/2026-05-25/ssp-oscal-alignment-phase3-4/ |
❌ session 結束後 extract |
per §11.20,三個 sub-item 都需要 spec 先補才能 execute:
→ L4 不在 Phase 4 收尾 scope;維持現狀 4-tab。
前期 (Phase 1+2 SUMMARY §8 L2) 描述過時 — 寫「Phase 5+ FE 改 stepper UX 時順手釐清」+「BE 不主動改」。
實際情況:
接手 session 看這份:docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-bug-b-and-parties-stepper-handoff.md(完整 diagnosis + fix plan A/B + verify checklist)
優先度:最高 — 跟 Issue 1(parties preview 缺電話/職稱/地址欄位)同 stepper component 一起 fix。
per Phase 1+2 SUMMARY §7.1(user 2026-05-25 拍板「進版不用做,等測完才會說」)。 執行步驟見該 SUMMARY §7.1。
per memory feedback_be_fe_version_alignment。Phase 4 完工後同 L8 一起 bump。 建議版號:v1.1.0 → v1.2.0(Phase 3+4 含 v3.0.0 Excel BREAKING + Phase 4 新 UX,functional 範圍夠 functional bump;不是 major bump 因為對外 API 沒 breaking — /ssp/<uid>/components 等新 endpoint 是 additive)。
per memory feedback_changelog_subagent + CLAUDE.md「收尾才寫 batch」:
docs/changelog/2026-05-25-feat-ssp-oscal-alignment-phase4-l5.md — FE Excel preview v3 對齊docs/changelog/2026-05-25-feat-ssp-oscal-alignment-phase4-l1a-l2-l3.md — BE CRUD endpoints + FE inline CRUD + 移除舊 tabdocs/changelog/2026-05-25-feat-ssp-oscal-alignment-phase4-l6.md — i18n keys cleanup或合併成單一 docs/changelog/2026-05-25-feat-ssp-oscal-alignment-phase4.md 涵蓋全部。本 SUMMARY 已具備 changelog 等同訊息量,user 可選擇是否另寫 changelog。
_ROW_OVERRIDE_SHEETS 擴 + L1a CRUD endpoints + 既有 Phase 3 v3.0.0 樣板)f7eaa09f)per memory feedback_be_restart_after_service_change:
本期改動的 BE service / route:
app/oscal/service/ssp_excel_import_app_service.py (_ROW_OVERRIDE_SHEETS)app/oscal/service/ssp_inventory_items_app_service.py(新加 add_item / update_item / delete_item / helpers)api/oscal/routes/ssp/ssp_components_route.py(加 post + DetailResource)api/oscal/routes/ssp/ssp_inventory_items_route.py(加 post + DetailResource)api/oscal/__init__.py(add_resource 兩條 detail route)# 重啟前 kill 舊 process(per memory feedback_backend_restart_orphan_pids)
lsof -t -i:8000 | xargs -r kill -9
# 重啟(看你跑哪個)
python main_socketio.py # 或 python main_app.pygit push兩 repo 都還 local(主專案 33 commits ahead / FE 5 commits ahead)。Push 需 user 明確指示。
| 測試項 | 預期 |
|---|---|
| 上傳 v3.0.0 樣板 → preview | 「元件清冊 / 利用授權 / 資產清冊」三 tab 各顯示對應資料(不再空白) |
| 上傳 v1.x 樣板 | parser reject (GRC_EXCEL_TEMPLATE_VERSION_UNSUPPORTED) 提示重下新樣板 |
| SSP 編輯第四 tab → 點「新增元件」 | Dialog 開啟,9 fields 可填,存檔後新 row 出現 |
| SSP 編輯第四 tab → row 點「編輯」 | Dialog 開啟,欄位預填,存檔後 row 更新 |
| SSP 編輯第四 tab → row 點「刪除」 | ConfirmDialog 開啟,確認後 row 消失 |
| inventory 編輯 → implemented_components MultiSelect | 顯示 disabled + hint「(編輯模式下不可變更 — 需刪除後重建)」 |
| SSP 編輯 → tab 列只有 4 tab | 「設備(舊)/ 資訊系統(舊)/ 外部利用服務(舊)」三 tab 消失 |
舊書籤 ?section=scope_devices |
自動 redirect 到「元件 + 授權 + 資產」整合 tab |
| MF /template-edit | 舊 SspLeveragedSection / ModuleFrameSspDevicesPanel / ModuleFrameSspInfoSystemsPanel 仍可正常編輯(apiBase='module-frame') |
SSP OSCAL Alignment Phase 4 已完工(L5/L1a/L2/L3/L6 done;L4 skip;L7/L8/L9 等
user 拍板)。本期 5 commits 跨兩 repo(FE 3 + BE 2)。詳見:
docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase4-COMPLETE-SUMMARY.md
下個 session 可能要做(按優先順序):
1. user 拍板進版 → L8 (jedi-oscal bump + Nexus push + 主專案 pin 還原) + L9
(BE/FE 版號對齊 v1.1.0 → v1.2.0?)
2. L7 排查 Bug B (docx parties 全 skip) — Phase 5+ FE 改 stepper UX 時順手做
3. L4 5-tab 結構 (SC 拆 / parties 合併) — 需先補 UX spec 才能 execute
4. Phase 5 OSCAL Export — 整個 feature 收尾 (round-trip e2e)
開工前 pre-flight:
- git branch --show-current → feature/ssp-oscal-alignment(兩 repo 一致)
- BE working tree: M pyproject.toml only (dev-only path-dep)
- BE test smoke:poetry run pytest tests/test_excel_parser_v2_bundle.py
tests/test_ssp_excel_import_app_service.py — 106 passed
- FE build smoke:cd ~/Projects/Billows/Audit-Manager/compliance-manager-fe
&& npx vite build → 通
| 用途 | 路徑 |
|---|---|
| 本 SUMMARY | docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-phase4-COMPLETE-SUMMARY.md |
| Phase 3 + 4 WIP SUMMARY(前接 handoff) | 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 |
| design.md(§11.18 ~ §11.21 本期新增) | docs/features/FR-028-2605-ssp-oscal-alignment/design.md |
| BE Components / Inventory app service | app/oscal/service/ssp_components_app_service.py / ssp_inventory_items_app_service.py |
| BE Components / Inventory route | api/oscal/routes/ssp/ssp_components_route.py / ssp_inventory_items_route.py |
BE Excel _ROW_OVERRIDE_SHEETS |
app/oscal/service/ssp_excel_import_app_service.py:1259 |
| FE 第四 tab inline CRUD | ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/ssp/SspComponentsLeveragedInventoryTab.vue |
| FE 第四 tab caller (SspTabPanel) | ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/ssp/SspTabPanel.vue |
| FE v3 preview 三檔 | ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/ssp-excel-import/SheetPreview{Components,LeveragedAuth,InventoryItems}.vue |
| FE wrapper | ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/views/module_frame/ImportExcelPreviewPage.vue |
| FE SspService | ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/service/SspService.js |
| FE i18n namespace(zh-tw + en) | ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/config/locales/i18n/{zh-tw,en}/ssp-components-leveraged-inventory.json |