The README and epic #153 both describe graceful coordinator handover to the longest-running peer as live behaviour. It isn't, in one specific way: PeerLifecycle.handleBecomeCoordinator (the receiving side of a become_coordinator wire message) is real, wired, and unit-tested, but nothing anywhere in src/ actually sends that message. Found while implementing #154 (the coordinator-held gateway role, PR #169), which depends on handleBecomeCoordinator firing correctly on takeover — the receiving path works and is tested, but a graceful shutdown never triggers the handoff the README claims exists; only the crash-race path (each surviving peer independently racing to rebind the coordinator port) actually produces a new coordinator today.
Scoped out of #154 deliberately, since it's about the local coordinator-election protocol itself, not the gateway role riding on top of it.
The README and epic #153 both describe graceful coordinator handover to the longest-running peer as live behaviour. It isn't, in one specific way:
PeerLifecycle.handleBecomeCoordinator(the receiving side of abecome_coordinatorwire message) is real, wired, and unit-tested, but nothing anywhere insrc/actually sends that message. Found while implementing #154 (the coordinator-held gateway role, PR #169), which depends onhandleBecomeCoordinatorfiring correctly on takeover — the receiving path works and is tested, but a graceful shutdown never triggers the handoff the README claims exists; only the crash-race path (each surviving peer independently racing to rebind the coordinator port) actually produces a new coordinator today.Scoped out of #154 deliberately, since it's about the local coordinator-election protocol itself, not the gateway role riding on top of it.