
Track causality explicitly using version vectors, Lamport clocks, or dotted vectors that survive partial replication. Each mutation should carry its ancestry, not just a timestamp, enabling precise detection of concurrent edits. With clear lineage, your resolver can merge fields safely or escalate conflicts intentionally rather than guessing dangerously.

System clocks drift, mobile devices sleep, and NTP sometimes lags. If you rely on wall time alone, last-writer-wins may crown the wrong update. Prefer monotonic or hybrid logical clocks and causal metadata, then use time only for user-facing narratives, not as your sole arbiter of truth.

Not every collision is identical. Distinguish overwrites of scalar fields, divergent list insertions, concurrent deletions, and cross-entity invariants. Create per-attribute policies: sum counters, union sets, choose maxima, or trigger merge UIs. This taxonomy keeps resolution predictable, testable, and explainable when your product’s complexity inevitably escalates across devices.
All Rights Reserved.