D-20260709-02|fold 守門原則¶
背景與驅動力¶
全專案二次深讀複審(7 路平行 review)把先前個案修正昇華為結構發現:live 收件只擋即時(簽章 +±30 秒),開放寫入 +「歷史同步不重驗」= 舊時戳條目繞過 live 直達 fold 是常態攻擊面、非個案。且資料系統原有「內容尋址(CID 冪等)可防重播」的描述是錯的:OrbitDB 對同值 db.add 每次產生新 entry(identity/clock 不同 → 新 hash)、all() 回多筆、fold 逐筆套用——CID 冪等防不了 log 重播。
考慮過的選項¶
(流水帳未記錄替代方案;本決策以原則確立 + 錯誤描述修正形式成立。)
決定¶
- fold 守門原則:凡「錯誤事件 fold 套用即造成不可逆傷害」的 reducer,守門必須 fold 端自帶、且只依賴 timeless 且 state 可判的條件(簽章集、金額界限、前置結果存在性)。
- 內容尋址不防 log 重播:累積型 reducer 需自帶 fold 冪等守門;冪等型(Set add/Map set)天然安全。資料系統 replay 段錯誤描述同步修正。
- canon 落點:程式架構/ledger.md foldGuard 專節(守門目錄表 + 畸形事件 try/catch 韌性)、資料系統.md。
後果與影響¶
原則化後同輪按此掃出並修補一串同型洞:economy 冒名 / 金額界限 / 重播守門、anti-piracy 前置結果存在性、仲裁 tally fold 未重驗(面板簽章集硬化、隨仲裁上鏈編排實作)。承 D-20260708-03 與 D-20260708-05;其後 D-20260710-03 即此原則對「重複結算」的收口。