SUMMARY — SSP 差異更新匯入復原(V1 體驗整套接回 v2)

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

§1

一句話

把 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))。

§2

完成範圍(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、時序見 decision-log

§3

已驗證(自動)

  • 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)。
§4

⏳ 未驗證(待 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。
§5

⏸ 等 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 狀態(過夜已寫,見下)
§6

過夜已寫的收尾文件(在 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/
§7

接手/驗收指引

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