Concurrent contexts A2 B1 and A1 B2 converge by componentwise maximum into A2 B2. The merge records context and does not choose a payload winner.

Vector clocks distinguish causal order from concurrency

A vector records progress for each tracked participant. Comparing these counters distinguishes causal order from concurrency; the application still decides how to reconcile concurrent values. One timestamp is not enough A scalar timestamp can impose an order, but that order alone cannot prove causality. With stable participant identities and the usual event-clock rules, each process increments its own component for a local event. Receiving a message merges components by maximum and then increments the receiver’s component. These rules record information flow. They do not measure elapsed time or establish a physical-time ordering between machines that exchanged no information. ...

September 18, 2027 · 5 min · XB Field Notes
Two Repeatable Read transactions each see two available doctors and make a different doctor leave. Both commit, leaving zero and breaking the rule that at least one doctor must stay.

Choose transaction isolation to preserve the invariant

Choose an isolation level from the invariant an operation must preserve. A stable snapshot is useful, but two transactions can each make a locally reasonable decision that becomes invalid when both commit. PostgreSQL Repeatable Read prevents changes to a transaction’s reading snapshot, yet permits some serialization anomalies. Serializable adds detection that rejects combinations of concurrent work inconsistent with any serial execution, requiring the application to handle retries. ...

August 23, 2026 · 5 min · XB Field Notes