Multiplayer Collaborative Canvas  ·  View 13 of 23  ·  Runtime

Critical Flow — Edit to Acknowledgement

Eleven messages, of which the client waits for exactly one.

Editable source SVG draw.io All views
Designer Local replica Session host Operation log Web PubSub Other editor 1. drags a frame 2. render immediately 3. op, parent seq 4811 4. validate, sequence, resolve 5. append at epoch 7 6. committed, replicated 7. ack seq 4812 8. op seq 4812 9. cursor, coalesced 10. presence frame 11. dropped: delete won Critical Flow — An Edit From Keystroke to Acknowledgement Message 11 is the conflict path: the author is told their edit lost, never silently corrected. Nothing waits on message 9 or 10. v 1.0 · owner Platform Architecture · date 2026-10

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.