Summary
Implement Phase 2 of join: the per-level BuddyOp climb on both sides, stopping at the first level where neither side has a match.
Algorithm detail: docs/protocol/concurrent-insert.md, Section 3.3.
Scope
src/node/base_node.rs — Phase 2 orchestration, starting from u's Stage-1 level-0 neighbors.
Acceptance Criteria
- Both sides queried concurrently per level, not sequentially.
- A side that resolves
None at some level stays None for all higher levels (no re-querying a dry side).
- Height = last level where either side still matched.
- Tests cover: multi-level climb, one side going dry before the other, both sides dry at level 1 (height 0), single-node-graph edge case.
Dependencies
Depends on #84, #85, #88, #90 — Stage-2 starts from Stage-1's output.
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 <-- YOU ARE HERE
L4 (acceptance gate): #97
Summary
Implement Phase 2 of join: the per-level BuddyOp climb on both sides, stopping at the first level where neither side has a match.
Algorithm detail:
docs/protocol/concurrent-insert.md, Section 3.3.Scope
src/node/base_node.rs— Phase 2 orchestration, starting fromu's Stage-1 level-0 neighbors.Acceptance Criteria
Noneat some level staysNonefor all higher levels (no re-querying a dry side).Dependencies
Depends on #84, #85, #88, #90 — Stage-2 starts from Stage-1's output.