# SUMMARY — SSP 差異更新匯入復原（V1 體驗整套接回 v2）

> 狀態 **2026-06-16**（凌晨自主收尾完成，**real-DB HTTP smoke 待 user 明早驗收**）。
> ⚠️ 本檔誠實標註驗證狀態：已驗 = 單元/整合測試 + BOOT + baseline 零回歸；**未驗 = 起服務的真實 HTTP smoke**（user 明早做）。未標任何 FIXED/verified。

## 一句話
把 FR-011.2「SSP Update Diff」整套（上傳 → 逐項差異 → 接受/保留決策 → 人員三層自動比對 → 未匹配段落手動指派 → 寫入更新）從舊 `jedi_oscal` 接回 `jedi_oscal_v2`，驅動目標達成：**專案 SSP 可匯入更新**（docx 走 FE `project_ssp` / excel 走 scoped route）；資源庫重複匯入 by-product 一起通。架構 W2（dict-merge + 單一 `import_ssp(update)`）。

## 完成範圍（7 phase + 2 過夜 bug 修）
| # | 內容 | 狀態（測試層級）| 主要 commit |
|---|------|------|------|
| P1 | 套件 `import_ssp(mode='update')` 子物件 upsert | ✅ 套件單元測 17 | `dc11572` `09e56ac` |
| P2 | 套件 `build_ssp_snapshot` | ✅ 套件單元測 | `ab29117` |
| P3 | 專案 SSP 可匯入（Model C）+ scoped route + **權限 app service 層 gate** | ✅ app service 測 16 | `60e472a3` `0931bef1` `dd7e17c7` |
| P4 | diff 標注（4 status×7 section）+ 逐項 decision merge | ✅ 33 測 | `d9841ba4` `a4c61d99` `8b02adf7` |
| P5 | 人員/組織三層比對接 v2 + match 存 props soft-ref | ✅ 13 測 | `6b4bd722` |
| P6 | 未匹配段落手動指派（docx）| ✅ 11 測 | `7548e993` |
| P7 | party 比對改變顯示為 changed（diff 補完）| ✅ 42 測 | `6388a1dc` |
| D1 | 🔧 docx 專案匯入 source_type 接受 FE `project_ssp`（真 FE 契約 bug）| ✅ 16 測 | `acc72361` |
| D3 | 🔧 by-component 敘述更新被丟（核心 bug，整合測試抓到）| ✅ 套件 17 + 整合 4 | pkg `bdfe780` / main `93df50b4` |
| — | rollback-isolated 端到端整合測試 | ✅ | `dcaa6e6d` |

> D1/D3 是過夜自主作業抓到並修的真實 bug —— **若沒修，明早 smoke 會踩**（docx 422 / 敘述匯入回成功但沒更新）。決策推理見 [`analysis`](../../analysis/2026-06-16-ssp-import-restore-w2-architecture-and-bugs.md)、時序見 [`decision-log`](2026-06-16-overnight-autonomous-decision-log.md)。

## 已驗證（自動）
- **BOOT OK**（canonical env：`sys.setrecursionlimit(5000)` + eventlet + GITLAB dummy）—— 親驗多次。
- **baseline 零新回歸**：current 91 / baseline 97，`comm -13` 空（少的 6 條是 stage_advance flaky 排序，非本弧）。
- 每 phase 兩段式 review（spec + code quality）；review 過程抓出並修：權限繞過漏洞、Excel per-AO diff 靜默丟失、control 敘述誤讀、party 比對不可見、D1 契約、D3 核心 bug。
- **零 v1 `jedi_oscal` 進 boot graph**（final reviewer import-probe 8/8 clean）。

## ⏳ 未驗證（待 user 明早 real-DB HTTP smoke，用專案 266 / ssp 1482）
1. **敘述真的更新**（D3 修復重點）：docx/excel 改控制項敘述、use_docx、confirm → 匯出/查 DB 確認敘述變了（非只回成功 counts）。
2. **keep_current 真保留**：標 keep_current → 該控制項敘述/SoA/statements 與匯入前一致。
3. **use_docx 無重複列**：同檔匯入兩次 → IR/statement/by-component/this-system component 無重複。
4. **手動指派 persist**：未匹配段落指派到控制項 → by-component 寫入（D3 後應 persist）。
5. **party 重新配對寫入** + preview 顯示 matched user/org + nickname。
6. **manager gate live**：非 manager 打通用 route `/ssp-{docx,excel}-import/<uid>/confirm` → 403（upload+confirm 都驗）。
7. **docx 走 FE `project_ssp`**（D1）：FE docx 專案匯入頁實際送 `project_ssp` → 不再 422、走 Model C update。
8. **Excel Model C 全程**：scoped route 上傳 → `controls_with_aos_diff` 預覽 → decisions → update。

## ⏸ 等 user 明示才做（依規範，未自動）
- **push**（兩 repo，未 push）
- **套件發 Nexus** + `pyproject.toml` pin 還原（dev path-dep 未 commit，維持 working tree）
- **FE 版本對齊** + 若需要的 FE 專案 SSP 匯入獨立 UI 頁（本弧未建）
- **Notion 任務**（未建 —— 未經 smoke verify 不發外部「Done」）
- changelog / design.md §sync / plan 狀態（過夜已寫，見下）

## 過夜已寫的收尾文件（在 working tree / 已 commit 視情況）
- 決策記錄 `handoff/2026-06-16-overnight-autonomous-decision-log.md`
- 架構分析 `docs/analysis/2026-06-16-ssp-import-restore-w2-architecture-and-bugs.md`
- 本 SUMMARY
- changelog / design.md / plan 狀態同步（見 `docs/changelog/`）

## 接手/驗收指引
- smoke 卡住先看 `log/app.log`（grep 關鍵字 / Traceback）。
- 服務 user 自己起（BE 無 hot reload，改了 service 層要重啟）。
- smoke 通過後跟 Claude 說「收尾」→ 走收尾 SOP（補 Notion / push / 套件發版 / FE 對齊，逐項等明示）。
