# FR-038 專案規劃頁 v2 遷移弧 — SUMMARY（2026-06-17 收口）

| 項目 | 內容 |
|------|------|
| 弧主題 | 專案規劃頁（ProjectPlanningView）從舊 AP 引擎整頁遷到 v2 audit_round + living/round SSP，含任務指派、控制項樹、階段推進、程序書複製、任務↔BPMN 雙向同步、檔案預覽 |
| 驗收 | user 手測「專案規劃大致可用」（2026-06-17）。批次維護上傳下載 + 雲端整合 **未測**（見 follow-up）|
| BE branch | `feature/oscal-refactor`（commit `4e724fea`，**未 push**）|
| FE branch | `feature/oscal-refactor`（commit `ec3f3ff`，**未 push**）|
| 部署 | BE 需重啟；DEV migration/backfill 已套；**stg/poc/prod 待套**（2 migration + 1 backfill）；push 等 user |

## 完成清單（13 task）
| # | 項目 | 狀態 |
|---|------|------|
| 1-3 | control-tree 帶 assignees（讀）/ saveTask v2 寫入 / FE taskMap wire | ✅ |
| 4 | 快速配置批次指派（複用 per-job 寫入，非舊 batch）| ✅ |
| 5 | AO 現況沒帶出 → Method A（statement key `(a)`→`_obj.N` + dedup IR）| ✅ |
| 6 | 啟動專案推進階段（round 綁 workflow + ap_authoring entry label「稽核計畫填寫」）| ✅ |
| 7 | BPMN 編輯器按鈕（control-tree 暴露 per-AO workflow uid）| ✅ |
| 8 | 移除控制項群組/控制項層級「管理人員」UI | ✅ |
| 9 | 公版 AO 現況/實施狀態 啟動專案複製（即 Method A）| ✅ |
| 10 | AO 任務 ↔ BPMN userTask 雙向同步（name/描述/指南 derive + syncTaskToTemplate 補建屬性）| ✅ |
| 12 | 程序書（含控制/AO 連結）公版→專案 啟動時複製 | ✅ |
| 13 | 多 userTask=多任務（create/delete_job v2 重建 + inject + backfill + idempotent）| ✅ |
| 11 | Method A 前向一致（匯入/SoA AO key 對齊）| ⏳ follow-up |

## 行為差異（v2 vs 遷移前）
- 規劃頁資料源從 dark AP 引擎 → v2 control-tree（living/round SSP）。
- 任務 = BPMN userTask（name/描述/指南/類型以 cloned 範本為單一真相，雙向同步）。
- AO 現況/實施狀態現在會從公版帶到專案（key 統一 `_obj.N`）。
- 程序書連同控制/AO 連結會從公版帶到專案。
- 規劃階段下一步按鈕「稽核計畫填寫」（原誤顯示「啟動專案」）。
- 切換專案/輪次/控制項/AO 會重抓資料（原會殘留）。
- 檔案預覽圖片可開（原只 PDF/docx）。

## 規範文件（本次產出）
- changelog ×5：`docs/changelog/2026-06-17-*.md`
- analysis：`docs/analysis/2026-06-17-ao-statement-key-mismatch-and-task-bpmn-sync.md`
- 進度報告：`docs/features/FR-038-2606-oscal-redesign/handoff/2026-06-17-planning-task-assignment-progress.md`
- migration：`scripts/sql/2026-06-17-fr038-ao-statement-key-canonical.sql`、`...-ap-authoring-entry-label.sql`
- backfill：`scripts/backfill_2026-06-17_inject_job_execution_uid.py`

## 已知 follow-up
1. **批次維護「任務 Excel 匯入/匯出」**：`job_export_query` / `job_import_lookup` 仍 2A dark → 未測未串通。留最後補。
2. **雲端整合 Tab**：未測。
3. **#11 Method A 前向一致**：匯入(docx/excel)寫 statement + 資源庫 SoA 頁 AO uid 仍舊 key → 重匯入會再引入 `(a)`。stopgap：重跑 migration。
4. **stg/poc/prod**：套 2 migration + 跑 backfill（改 host/db）。
5. 死碼：規劃頁 unused participant handlers / fetchAOJobs（移除的 UI 殘留），可清。

## 部署 handover
1. `git push`（user 明示後）BE + FE。
2. 重啟 BE。
3. stg/poc/prod：套 `2026-06-17-fr038-ao-statement-key-canonical.sql` + `2026-06-17-fr038-ap-authoring-entry-label.sql`（cmmgr，`--single-transaction`）+ 跑 backfill。
