# mf Template Defaults Phase 2 — FIXED SUMMARY

> ✅ FIXED — 2026-05-26 結案

## Metadata

| 項目 | 內容 |
|---|---|
| Branch | `feature/mf-template-defaults-phase2` |
| 結案日期 | 2026-05-26 |
| Spec | `docs/features/FR-018.2-2605-module-frame-template-defaults-phase2/design.md` |
| Design | `docs/features/FR-028-2605-ssp-oscal-alignment/design.md` §11.40 |
| Changelog | `docs/changelog/2026-05-26-feat-mf-template-defaults-phase2.md` |

## 完成的 Phase

| Phase | 內容 | 狀態 |
|---|---|---|
| 1 | DB migration — 4 張 mf-scoped default 表 | ✅ |
| 2 | BE entity/repo/service × 4 套 + DI wire + 21 unit tests | ✅ |
| 3 | `ModuleFrameTemplateCopyService` 加 Step 4-7 | ✅ |
| 4 | BE endpoint 改寫 (leveraged/SC) + 新增 (components/inventory) | ✅ |
| 5 | FE 新建 mf-side tab 元件 + service methods + view 改 import | ✅ |
| 6 | docx import mf source 改走 `_run_mf_default_confirm` | ✅ |
| 7 | mf 343 資料遷移 + orphan SSP 280-285 清理 | ✅ |
| 8 | E2E verify (pytest 1268 pass, FE build pass, user 手測通過) | ✅ |

## 過程中修的 follow-up bugs

1. **SC name 空白** — `system_name` vs `name` key 不一致
2. **diff 現值不正確** — `_load_current_v3_lists` 走舊 SSP 路徑
3. **`la_uid_to_title` KeyError** — return dict shape 不完整
4. **SC not cloned to new project** — Step 7 純 UPDATE，SC shell row 不存在時 0 rows
5. **responsible_parties 只 clone 2/6** — NULL role_id 多筆 idempotency check 誤 skip

## 主要 commits（BE `feature/mf-template-defaults-phase2`）

| Hash | 說明 |
|---|---|
| `f18561a3` | SQL migration — 4 張 mf-scoped default 表 |
| `7a9e2727` | 4 套 entity/repo/service + DI + 單元測試 |
| `0402a8a2` | copy_service 加 Step 4-7 |
| `93645fb1` | BE endpoint 改寫 + 新增 |
| `cc80952d` | mf 343 資料遷移 + orphan SSP 清理 |
| `a0cadb74` | docx import mf source 改寫 mf-default |
| `a2db006b` | Bug 1+2 — SC name key + diff 現值來源 |
| `dbfe161b` | la_uid_to_title KeyError fix |
| `657a9b7f` | SC not cloned + responsible_parties fix |

## Follow-up（不在本期 scope）

- 其他 mf (276/313/338/349/356) 的 orphan SSP cleanup — 需要個別 data migration
- 既有 OSCAL project SSP 補 4 個 tab default backfill — 需要一次性 SQL
- FE 兩個元件（Ssp* + ModuleFrame* tab）長期抽共用 base
- `ssp_versioning_service` shell contract gap — launch_new_round 不建 sys_impl
