Entry 05 How it works
Most flashcard apps sync the state of a card: when it is next due, how stable the memory is, how many times you have lapsed. That works until two devices both change it. Then there are two versions of one fact and the only honest thing the app can do is ask you which one to throw away.
Deckist syncs the events instead. Every answer you give is one immutable record: this card, this moment, this rating, this device. Records are never edited and never deleted, and each one carries an identity derived from its own contents, so recording the same answer twice produces the same record twice and collapses to one.
Merging two devices becomes a set union. Union is commutative, associative and idempotent, which in plain terms means it does not matter which device syncs first, which order the batches arrive in, or how many times a flaky connection retries. The answer is the same, and nobody's work is dropped.
Your schedule is then recomputed from the merged history rather than reconciled. Two devices holding the same events necessarily agree about what is due, without exchanging a single due date.
Keeping every review forever is more rows than storing one number per card. That is the trade, and it is a good one: the history is also what lets Deckist tune the algorithm to you, show you honest statistics, and rebuild your collection from scratch on a new device.
The merge has a test suite that pins commutativity, associativity, idempotence, three-way convergence, and that derivation depends on the set of events and not their arrival order. If one of those ever failed, this page would be false, so they run on every change.