Status: accepted
The natural reading of "use a messaging network instead of a coordination server" is to put the control plane on it: peers continuously subscribed, endpoint updates gossiped in real time.
Waku is a bootstrap and repair channel. It is used at cold start, on network change, and to repair a partition. It is not required in steady state.
WireGuard relearns a peer's endpoint from any correctly-authenticated packet.
A node that roams and sends first is relearned by every peer with no signalling
at all. With PersistentKeepalive set, that is self-healing.
So the steady state needs no control plane, and once any tunnel exists the mesh can carry its own control traffic — the pattern wesher and tinc use.
Three consequences make this more than an optimisation:
disconnectAllPeers() if
the keepalive loop is late by more than ~30 s. Doze suspends the SoC, so every
Doze cycle tears down every Waku connection. Persistent connectivity is not an
available behaviour on a phone.dLow=4 needs seconds of heartbeats, the message cache holds
~6 s of history, and scoring punishes graft-then-vanish. A node appearing for
3 s every 15 minutes never forms a mesh and is a liability to its peers.