rust/loro-websocket-client/src/lib.rs:1114-1155
- Each local update is wrapped as an “Snapshot” record with vvCount = 0, even though the payload is just a
delta blob. That violates protocol-e2ee.md (DeltaSpan must carry peerId/start/end) and prevents receivers
or the server from deduplicating or backfilling.
- Initial join also sends a full snapshot regardless of negotiated version, re-emitting an empty VV that
hides actual counters.
- Fix: When exporting CRDT deltas, build a DeltaSpan header with peerId/start/end, include the doc’s version
vector, and only emit genuine snapshots when exporting ExportMode::Snapshot. Ensure the adaptor stores and
increments counters per peer so version negotiation works cross-language.