# FR-043 執行交接 Prompt（設計已核可 → 進入 plan + 實作）

> 產生日期：2026-07-02。設計 session 已完成 design.md（過 spec review）＋ analysis ＋ FR 登記
> ＋ Notion 任務（Case No: FR-043，狀態 In progress）。以下 prompt 直接貼給執行 session。

---

你是 FR-043「稽核計畫 docx 匯入」的執行工程師。設計階段已完成並經 user 核可，
你的工作是產出 implementation plan、經 user 確認後實作。

## 0. 前提與邊界（違反即錯誤行為）

- 工作 branch：`compliance-manager-be` 的 `feature/FR-043`（已存在）。**永不切 branch**；
  發現 branch 不對停下問 user。FE repo 在當下 branch 直接作業。
- 可自行做階段性 commit（顯式 `git add <檔名>`，禁 `-am`）；**push 永遠等 user 明示**。
- **jedi-* 套件零異動**（設計已確認不需要）。若實作中發現非動不可，停下回報，不要默默改。
- 收尾動作（changelog / SUMMARY / Notion 更新 / FIXED 標記）**等 user 下令才做**。
- BE 改 service code 後提醒 user 重啟 BE（無 hot reload）；服務由 user 自己起。

## 1. 必讀（依序，開工第一步）

1. BE repo `CLAUDE.md`（DDD 分層、@transaction/session 規範、error code、SQL migration 鐵則）
2. `docs/features/FR-043-2607-ap-docx-import/design.md` — 本功能規格（single source of truth）
3. `docs/analysis/2026-07-02-ap-docx-import-oscal-mapping.md` — 欄位對應依據
4. FE 動工前：FE repo `CLAUDE.md` ＋ BE repo `docs/claude/frontend-overview.md`
5. Mirror 對象源碼：`app/oscal/service/ssp_docx_import_app_service.py`（管線 pattern）、
   `app/grc/service/assessment_plan_app_service.py`（set_tasks / add_ap_party /
   `_resolve_ap_and_check_auditor`）、FE `src/components/grc/ssp-docx-import-v2/`

## 2. Pre-flight verify（寫 plan 前必做，不可跳過）

design.md 是 2026-07-02 寫的，開工前逐項驗證它引用的東西還在、簽名沒變：

- [ ] `AssessmentPlanAppService.set_tasks` / `add_ap_party` 存在於 `app/grc/service/assessment_plan_app_service.py`，確認參數簽名
- [ ] `_resolve_ap_and_check_auditor()` 仍是私有守門（plan 內含「提為 public helper」步驟）
- [ ] `SetTasksRequest._TaskItem` 形狀（`api/project/serializers/audit_round.py`）
- [ ] `infra/oscal/model/ssp_docx_parse_job.py` 表結構（新表照抄形狀）
- [ ] `_DOCX_MAX_SIZE`（20MB）與 `_PARSE_JOB_TTL_HOURS`（24h）常數位置
- [ ] 樣本檔可讀：`/Users/chouraymond/Desktop/AirAsia實際稽核檔案/AP稽核計畫匯入測試檔案/亞航-CMMC L1內部稽核報告20260612(稿).docx`
- 任何一項與 design.md 不符 → 先回報 user，不要自行改 spec 硬上。

## 3. 產出 implementation plan

用 `superpowers:writing-plans` skill，**輸出到
`docs/features/FR-043-2607-ap-docx-import/implementation-plan.md`**
（絕不可用 skill 預設的 `docs/superpowers/` 路徑）。Plan 分 phase 建議：

- Phase A：BE 基建 — `ap_docx_parse_jobs` migration（含 GRANT cm_app ＋ schema_migrations
  收尾）、entity/model/mapper/repo（繼承 BaseRepositoryImpl）、DI wiring
- Phase B：parser — `ApReportParserAdapter` 介面 ＋ registry ＋ 亞航 v1 adapter
  （TDD：先用樣本 docx 寫 snapshot 測試）
- Phase C：app service ＋ route ＋ serializer（權限矩陣、TTL、412 語意照 design.md §4.2/§4.3；
  gate 提 public helper；party 同名配對策略；append 的 detail→_TaskItem 轉換）
- Phase D：FE — `ApDocxImportDialog.vue` 三步 wizard ＋ 入口按鈕 ＋ draft localStorage
  （mirror useSspDocxDraft；Steps 用 `:active-step`）
- Phase E：測試計畫（`feature-test-planner` agent 產 test-plan.md）＋ e2e
  （在 compliance-manager-test repo，不在 BE 加 e2e）

Plan 寫完給 user 過目，核可後才動工。

## 4. 實作紀律

- 每個 app service public method 掛 `@transaction`；repo 不在 `__init__` 拿 session
- Route 層不碰 DB；權限檢查在 app service 層 fail-closed
- 新增前先 grep 既有能力（禁止重複造輪子）；發現 stub/壞掉回報不繞過
- BE pytest 放 `test/`；app service test 記得 logger patch fixture
  （DBLogHandler 對 SessionLocal=None 會炸）
- SQL migration 用 `cmmgr` 帳號、`psql --single-transaction -v ON_ERROR_STOP=1 -p 25432`，
  先套 DEV（`guidant_ai_dev@192.168.50.188`），密碼查 `.env`
- 完成的定義：BE pytest 綠 ＋ 手動 smoke（上傳亞航樣本 → 預覽 → confirm → ap-authoring
  頁看到行程）＋ 給 user 一句話 status ＋ 手測 checklist，**然後停下等 user**

## 5. 驗收基準（design.md §3 的欄位對應）

上傳亞航樣本後 preview 應解析出：標題、稽核日期 2026-06-02、稽核單位「鈊安資安顧問」、
方法 INTERVIEW/EXAMINE/TEST ＋ §6.3 拆出的每方法查核指引、範圍敘述進備註、
依據＋目的作為參考資訊（checkbox 預設附進備註）。confirm 後行程 append、
受評控制項/受評對象 tab 推導回填、稽核人員出現在 parties。

---
（prompt 結束）
