Agent: 探索者 (
explorer)
Confidence: 63%
Cost: $0.0913
Duration: 1m 16s
Task ID:695fe2fd-146e-434a-a1b1-39163551ba98
探索報告:並行矛盾的技術馴服法
發現
1. CRDTs(特別是 Yjs 3.18+) — 自動衝突解決
Yjs 是一個高效能的 CRDT 框架,讓多個使用者同時修改同一份資料而不需要顯式合併邏輯。它自動通過「最終一致性」保證所有副本最終收斂到相同狀態。關鍵:更新是交換律和冪等性的,意味著執行順序不影響最終結果。
1 | import * as Y from 'yjs' |
2. Vector Clocks —— 追蹤因果關係
在併行事件中,識別哪些是因果相關、哪些是真正並行無關。已有 Node.js 實現:mixu/vectorclock、AWinterman/vector-clock。這適合追蹤 Claude Code 多個 agent 的執行序列。
3. Event Sourcing —— 完整矛盾歷史
不覆蓋舊狀態,而是以不可變事件序列存儲所有變化。可重建任何時間點的狀態,類似已有的 narrative.jsonl JSONL 日誌。搭配 CQRS,分離讀寫邏輯,允許同時存在多個「物化視圖」,各自反映不同的衝突解決策略。
4. Multi-Version Concurrency Control (MVCC)
維持多個資料版本,讓讀取者看到一致的快照,寫入者獨立操作。資料庫層面(如 PostgreSQL)已有,應用層可用 Yjs 狀態向量實現。
實作步驟(按優先度)
第一步:升級事件日誌到完整 Event Sourcing
1 | // 已有結構:soul/narrative.jsonl |
第二步:整合 Yjs 到群組任務協作
1 | // plugins/*.ts 中實現協作編輯 |
第三步:在 Claude Code 管線中引入 Vector Clock
1 | // src/agents/coordinator.ts |
有趣的連結
- Yjs + Cloudflare Pages — 建構實時協作網頁編輯器,同時推送到 D1
- Event Sourcing 與 Merkle Tree Audit — event stream 作為 audit chain 的來源,每個 snapshot 包含一個 Merkle root
- Vector Clock 與冶煉觸發 — 當向量時鐘檢測到「過度矛盾」時自動觸發身份重組
延伸問題
- 如何在 Yjs 中定義「不可調和的矛盾」 ?例如同一欄位的兩個更新語義對立(delete vs. keep),而不只是值衝突?
- Cloudflare Workers 中的事件溯源實現 — D1 + 動態查詢重建歷史狀態的性能邊界在哪?
重要性:4/5
✅ 能改善專案品質:群組協作場景(多 agent 同時執行)、新的冶煉觸發機制
✅ 可即時實裝:Yjs 已成熟,Vector Clock 實作簡單(<100 行)
✅ 與現有架構相輔相成:補足 soul/ 現有的 Merkle audit chain
來源
- Verifying Strong Eventual Consistency in Distributed Systems
- Somtochi Onyekwere on Distributed Data Systems, Eventual Consistency and CRDTs
- Consistency in Distributed Systems
- How to Build CRDT Implementation
- CRDTs solve distributed data consistency challenges
- Vector clock - Wikipedia
- How to Create Vector Clocks
- GitHub - mixu/vectorclock
- GitHub - AWinterman/vector-clock
- Event Sourcing with Node.js: NestJS (Part 2)
- GitHub - reimagined/resolve
- GitHub - snatalenko/node-cqrs
- GitHub - oskardudycz/EventSourcing.NodeJS