時程:2026-05-21(接續同日 session 2 SUMMARY:
2026-05-21-bugfix-session2-SUMMARY.md) 跨 repo:compliance-manager-be + compliance-manager-fe
Excel re-import(update flow)時,舊資料沒有被覆蓋(append 而非 overwrite),以及基本資料 / 控制項清單沒有隨 Excel 更新,本次統一修補。
| # | Bug 描述 | 根因 | 修正位置 |
|---|---|---|---|
| 1 | Re-import devices/info_systems/leveraged → 重複 row | WriteStrategy.write() 只 add,未先刪舊 row |
write_strategy/base.py |
| 2 | 取消勾選的控制項 default 殘留 | write_excel_control_defaults() 只 upsert |
module_frame_write_strategy.py |
| 3 | 移除的參與人員 link 殘留 | write_parties() 只 upsert,stale link 未刪 |
module_frame_write_strategy.py |
| 4 | Template-edit 控制項清單不隨 Excel 更新 | _confirm_update_flow 未更新 oscal_profile.include_controls(頁面讀 profile,非 defaults) |
ssp_excel_import_app_service.py |
| 5 | 基本資料(名稱/類別/描述)不隨 Excel 更新 | _confirm_update_flow 未呼叫 update_module_frame();即使呼叫也需傳 locale,否則只改主表不改 module_frame_trans(failover query 優先翻譯表) |
ssp_excel_import_app_service.py |
| 6 | 導回 template-edit 時參與人員顯示舊筆數 | useModuleFrameParties 永久 module-scope cache,import 後未 invalidate |
ImportExcelPreviewPage.vue + useModuleFrameParties.js |
app/oscal/service/ssp_excel_import_app_service.py — _confirm_update_flow + _resolve_include_uids_for_updatedomain/oscal/service/write_strategy/base.py — delete-before-insertdomain/oscal/strategy/module_frame_write_strategy.py — full overwrite + stale link cleanupdi_containers/oscal/oscal_containers.py — refdoc_mapping_domain_service 注入src/views/module_frame/ImportExcelPreviewPage.vue — confirm dialog + parties cache invalidatesrc/config/locales/i18n/*/ssp-excel-import.json — confirm_overwrite_* keysdocs/changelog/2026-05-21-fix-ssp-excel-import-overwrite-mode.md(已建立)module_frame_trans locale 陷阱BaseRepositoryImpl.update(entity, locale=None) 只改主表 module_framesGET /module-frame/{uid} 用 failover query,優先讀 module_frame_trans(翻譯表)update_module_frame 必須傳 locale(user_context.locale fallback zh_Hant_TW)| 項目 | 說明 |
|---|---|
| Track B(SSP 匯出) | B1–B6 全部 pending,尚未開始 |
| Design-A4.md §11.3 | 本次偏差已補入 §11.3 |
| Cucumber E2E | A5 update flow 整份覆蓋行為尚無 regression test |