The concurrent-insert epic's acceptance test: reproduce the exact 4-node adversarial interleaving that leaves two stale backpointers, then verify one repair round heals it. Setup and message ordering: docs/protocol/concurrent-insert.md, Section 7.
Dependency graph (unblocked first):
EPIC #81 -- local search & join protocol
#67 [DONE] search_by_id #71 [OPEN] search_by_mem_vec (independent)
#74 [OPEN] search_by_id timeout fix #76 [OPEN] delete/leave
Concurrent join + repair (Algorithm 2 + Algorithm 8; supersedes closed #66, #77):
L0 (no deps): #84 #85 #93 #86 #87
L1: #94 #88 #89
L2: #90 #91 #95 #96
L3: #92
L4 (acceptance gate): #97 <-- YOU ARE HERE
Summary
The concurrent-insert epic's acceptance test: reproduce the exact 4-node adversarial interleaving that leaves two stale backpointers, then verify one repair round heals it. Setup and message ordering:
docs/protocol/concurrent-insert.md, Section 7.Scope
*_test.rsalongside the join/repair logic (this crate's colocated test convention).README.md— update the roadmap to reflect join + repair as implemented.Acceptance Criteria
std::thread::spawn— no timing assumptions.B.right/C.leftpointing past each other) is reachable under the exact ordering in Section 7.RepairSchedule, firing one tick and awaiting completion under a bounded timeout; a direct call to theCheckNeighborOphandler is an acceptable fallback.README.mdroadmap entry for join/repair moved from "Next" to "Implemented".Depends On