e5d0e54b80
After a network change (Wi-Fi to mobile data) the app reconnects right away, while the relay only notices the old connection is dead once the idle timeout expires. When that stale handler finally exited it removed the device from the online map by address alone, which dropped the new, healthy connection. From then on every message was stored as offline and only a push wake-up could fetch it, even though the app was connected. The online map is now its own type: a newly authenticated connection takes over delivery for the address, and a closing connection removes the entry only if it still points at itself. Tests cover the registry and the full route after a stale connection ends.