Multiplayer Collaborative Canvas · View 13 of 23 · Runtime
Decisions
- Message 2 is the product: the edit renders before the network has seen it. Everything after it is about being right, not about feeling fast (ADR-01).
- Message 3 carries the client's parent sequence number, which is what lets the host tell a concurrent edit from a stale one without a vector clock per object.
- Messages 9 and 10 are fire-and-forget. Presence is never awaited, never logged and never retried (ADR-07).
The conflict path
- Message 11 is the loser being told. The four conflict classes — same property, edit-after-delete, concurrent reparent, concurrent reorder — resolve identically on every client, and the author always learns which one applied (ADR-05).
- An operation that cannot be applied is dropped and reported; it is never queued for later, because a later application would be a different edit.
Assumptions
- Ack p50 40 ms, p99 120 ms in-region; peer visibility p99 250 ms.
- Sequence numbers are per document and monotonic; the epoch changes only on handover.