# Bug P / Q / R FIXED — docx import preview PartiesSection 3 個 form bug

| 項目 | 內容 |
|---|---|
| 收尾日期 | 2026-05-25 |
| Branch | `feature/ssp-oscal-alignment` |
| Spec | `docs/features/FR-028-2605-ssp-oscal-alignment/design.md §11.35 / §11.36 / §11.37` |
| Plan | `docs/features/FR-028-2605-ssp-oscal-alignment/implementation-plan-bug-pqr.md` |
| Handoff (本期接手) | `docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-bug-p-q-r-parties-form-handoff.md` |
| Changelog | `docs/changelog/2026-05-25-fix-bug-pqr-parties-form.md` |
| 上一 bug 收尾 | `docs/features/FR-028-2605-ssp-oscal-alignment/handoff/2026-05-25-bug-o-FIXED-SUMMARY.md` |

---

## 1. Commits 清單

### FE (2 個 commits — 全 FE)

| Hash | Type | 內容 |
|---|---|---|
| `551c7dc` | fix | Bug R — confirm 後 invalidate ModuleFrame / SSP parties cache |
| `fa43b79` | fix | Bug Q + Bug P — PartiesSection 補 role Dropdown + button wording 對 party_type 分流 |

### BE (Phase Z 收尾本 commit 後加)

| Hash | Type | 內容 |
|---|---|---|
| (本 commit) | docs | design.md §11.35-37 + index + changelog + plan 副本 + FIXED-SUMMARY + 原 handoff ✓ FIXED 標頭 |

---

## 2. 跨 repo 範圍

| Repo | Local commits 數 | 套件版號 |
|---|---|---|
| compliance-manager-be | 1（純 docs 收尾） | 不 bump（無 code 改動） |
| compliance-manager-fe | 2 | 不 bump（feature branch 內部 fix） |
| jedi-oscal | 0 | 不 bump（本期 BE / 套件無異動） |
| jedi-common | 0 | 不 bump |

**push 規模**：1 BE + 2 FE = **3 commits**（不含已 push 的 Bug O 收尾）。**等 user 拍板 push**。

---

## 3. 行為差異一句話

對既有 mf 重 docx import → Step 3 預覽 → 「參與人員與單位」tab：org row 顯示「連結組織單位」+ 建築 icon、person row 顯示「連結帳號」+ 人形 icon；兩 row 都有 9 個 OSCAL role keys 的 Dropdown 可選；改 party 確認後回 template-edit page 立刻顯示新值不需 reload。

---

## 4. 規範文件齊全度

- [x] design.md §11.35 / §11.36 / §11.37 closed + 各含教訓 + commit clause
- [x] design.md §11 index 加 3 條
- [x] implementation-plan-bug-pqr.md（plan 已 copy 到正式位置）
- [x] changelog (type=fix, FE only)
- [x] 原 handoff 標 ✓ FIXED 標頭
- [x] memory feedback 新增（永久 cache invalidate SOP 教訓）
- [x] handoff FIXED-SUMMARY（本檔）
- [ ] 對話歷史歸檔 → `docs/conversation-history/2026-05-25/bug-pqr-parties-form/`（pending — 收尾 commit 後 user 自跑 extract script 或本 session 收尾跑）

---

## 5. 已知 follow-up

### 5.1 jedi-oscal `docx_revision_normalize` tmp file lifecycle bug

reproduce Bug P 時意外發現：對既有 mf 重 docx import 上傳 fixture (`bug-o-e2e-fixture.docx`) 時，BE 回 200 但 `oscal.ssp_docx_parse_jobs.id=172 status=failed`：

```
[2026-05-25 17:22:52,413] WARNING [app.oscal.service.ssp_docx_import_app_service]
  [ssp_docx_import_app_service.upload_and_parse:234]:
  docx revision normalize skipped (parse_uid=ab961f70-02d9-42ab-983a-2bf6f094038c):
  Package not found at '/var/folders/g6/.../tmpm2kuaosj.docx'
```

jedi-oscal 內部 tmp file 已被刪卻仍引用。**擋住本期 Phase 0.1 / 0.2 playwright e2e 走完整 confirm flow**。

- **不在本期 P/Q/R scope**（純 jedi-oscal 內部 bug，跟 parties form 無關）
- 下次 jedi-oscal 進版時順手檢修
- 影響本期：Bug P/Q wording + Dropdown 已 code-level verify；Bug R cache fix 邏輯 sound 但**留 user 手測 verify**（無法 e2e 截圖 confirm flow）

### 5.2 BE/FE 版號對齊（per user 拍板）

本期 BE 0 code change（純 docs），FE 2 commits 全 fix。**user 拍板 push 後決定要不要進版**（本期建議不進版，跟 Bug O 一起累計到下個 release 再 bump）。

---

## 6. 部署 handover

| 項目 | 動作 |
|---|---|
| **BE 重啟** | **不需要**（BE code 0 change） |
| **FE rebuild** | 需要（vite hot reload 在 dev 自動，prod 部署要重 build） |
| **DB migration** | 無 |
| **i18n compile** | 不需（FE i18n json 直接 import，無 pybabel compile step） |
| **jedi-* 進版** | 無（本期不動套件） |

---

## 7. E2E 驗證紀錄

| 階段 | 結果 |
|---|---|
| Pre-flight | ✓ 兩 repo branch / working tree / origin sync 都對 |
| §6 H-6 cleanup verify | ✓ 4 OSCAL 表 org_unit_id 全 0 — Bug H-6 / Bug O 沒回頭 |
| §1.4 Bug R BE write verify | ✓ BE log `strategy.write_parties returned parties_written=5` + import_summary.parties_written=5 雙重 verify |
| Phase 0.1 playwright reproduce Bug P | ⚠️ 受 jedi-oscal upload bug 擋（標 follow-up 5.1）— Bug P fix scope 由 code reasoning 確認 |
| Phase 0.3 探 useSspParties | ✓ 確認存在於 `compliance-manager-fe/src/composables/useSspParties.js`，Bug R fix 兩 mode 都 cover |
| BE pytest smoke | ✓ 192 passed 0 fail（BE 沒退化） |
| Playwright e2e confirm flow | ⚠️ jedi-oscal upload bug 擋 — 留 user 手測 verify Bug R cache 邏輯 |

---

## 8. 跟 H-N + Bug O arc 的關聯

Bug P / Q / R 是 H-N arc **第 11 ~ 13 個 follow-up**，跟 Bug O 改動 scope 解耦（Bug O 是 diff stepper 4 key annotation + TabView refactor，本期 P/Q/R 是 parties form UI 三個獨立 bug）。

完成後 H-N arc + Bug O + P/Q/R 整段 docx import update mode **user-facing 邏輯收齊**，可進 Phase 5 OSCAL Export deferred plan。剩 jedi-oscal docx revision normalize tmp file bug（follow-up 5.1）等下次套件進版檢修。

---

## 9. user 手測 verify checklist（建議步驟）

由於 jedi-oscal upload bug 擋 e2e flow，請 user 依下表手測：

| Check | 步驟 | 預期 |
|---|---|---|
| **Bug P wording (org)** | docx import → Step 3 → 「參與人員與單位」tab → 看 org row 的 link button | 顯示「連結組織單位」+ 建築 icon |
| **Bug P wording (person)** | 同上 → 看 person row 的 link button | 顯示「連結帳號」+ 人形 icon |
| **Bug P 開 dialog** | 點 org row 「連結組織單位」 | dialog 開「連結到組織單位」標題，無 console error |
| **Bug Q dropdown (org)** | org row 看「角色」欄 | 顯示 Dropdown（unless 保留現值），可選 9 個 role keys |
| **Bug Q dropdown (person)** | person row 看「角色」欄 | 同上 |
| **Bug Q read-only mode** | 把 org / person 切 keep_current（保留現值）| 顯示 read-only label 而非 Dropdown，加「保留現值」Tag |
| **Bug R cache** | 改某 party name → 確認匯入 → router push 回 template-edit page | 「責任單位 / 責任人員」tab 立刻顯示新 name，**不需手動 reload** |

若 jedi-oscal upload bug 在手測前已修，可直接走完整 e2e。
