| 項目 | 內容 |
|---|---|
| 收尾日期 | 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 |
| 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 分流 |
| Hash | Type | 內容 |
|---|---|---|
| (本 commit) | docs | design.md §11.35-37 + index + changelog + plan 副本 + FIXED-SUMMARY + 原 handoff ✓ FIXED 標頭 |
| 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。
對既有 mf 重 docx import → Step 3 預覽 → 「參與人員與單位」tab:org row 顯示「連結組織單位」+ 建築 icon、person row 顯示「連結帳號」+ 人形 icon;兩 row 都有 9 個 OSCAL role keys 的 Dropdown 可選;改 party 確認後回 template-edit page 立刻顯示新值不需 reload。
docx_revision_normalize tmp file lifecycle bugreproduce 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。
本期 BE 0 code change(純 docs),FE 2 commits 全 fix。user 拍板 push 後決定要不要進版(本期建議不進版,跟 Bug O 一起累計到下個 release 再 bump)。
| 項目 | 動作 |
|---|---|
| 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- 進版* | 無(本期不動套件) |
| 階段 | 結果 |
|---|---|
| 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 邏輯 |
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)等下次套件進版檢修。
由於 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。