Versions first, write-back before return Versions first, write-back before return ordered versions let any quorum find the newest, write-back makes it stick replica versions, t0 then t1 what each quorum read returns n1: v2 new only holder n2: v1 old not yet reached n3: v1 old not yet reached write-back v2 to quorum, before return n1: v2 new unchanged n2: v2 new written back n3: v1 old still lagging read1 {n1,n2}: max(v2,v1) = v2 new concurrent with the write, allowed read2 {n2,n3}: max(v1,v1) = v1 STALE starts after read1 returned: violation read2 again: max(v2,v1) = v2 new after write-back: fixed t0: partial write, never acknowledged as w=3 w + r > n holds as arithmetic, freshness premise missing background read-repair runs after the read returns: too late for linearizability ABD fix: the reader writes the max version back to a quorum BEFORE returning, so every later quorum meets it versions are ordered (v1 < v2): no leader needed to pick the newest crashed reader after observing v2 but before write-back: the read is indeterminate, the next reader still repairs multi-writer: add a query phase, read the highest timestamp before writing legend: green = carries the newest version, blue = lagging, rose = the stale violation membership is fixed here; changing members need overlapping old and new quorums