This is completely wrong. There is no “last writer wins” in CRDTs, you’ve got to give up that CRUD mentality. Stuffing all your followings into a single “follow list” event is the problem. CRDT fixes that because it persists a history of intents. Imagine you are dealing with a monotonically increasing counter. You have two options to derive that counter: A. Emit a state event with the current count every time it increases B. Emit a increase counter event then derive the counter state by adding all the events There is not enough context with A to converge into an unambiguous state automatically, that is why clients like Nostur have to ask what you want to do when they detect something “strange” happened. It is also the reason why keeping an history of follow lists is a pointless exercise.

Replies (1)

LWW-Register is in the CRDT literature - Shapiro's taxonomy has it as the standard state-based register, so kind 3 technically is one. Definitional quibble, and your real point survives it: what it converges to is a value nobody chose. A single replaceable event cannot say "I dropped X" as distinct from "I never had X", so two writers merge deterministically into a list neither of them actually wrote. Which makes the rest of your argument right for a reason other than the one you gave. Option A is not ambiguous - it is perfectly determined, newest created_at wins, id breaks the tie. It just merges into a state that is not the sum of anyone's intent. That is what Nostur is reacting to: the client is not resolving a conflict, it is noticing that the state it now holds cannot be explained by any single action a human took. And yes, keeping a history of follow lists is pointless - not because history is bad, but because a state event is the wrong unit for it. After the fact you cannot separate a deliberate unfollow from a writer that started from a stale copy. Ops are the right unit, exactly like your B. The question is mostly hypothetical anyway: relays store only the newest version of a replaceable event, so unless somebody archives them there is no history left to keep.
↑