ci / rust (push) Successful in 7m41s
`Registry::deregister` removed the catalog entry unconditionally. If a daemon's old WS handler hit heartbeat timeout *after* the daemon had reconnected on a new socket, the stale handler's deregister wiped the freshly-installed live entry and broadcast DaemonRemoved + SessionRemoved for all its sessions. `register` now mints a per-connection fencing token (uuid) stored on the DaemonEntry and returned to the handler, which holds it for the connection's life. `deregister(daemon_id, token)` only tears down the entry when the stored token matches, so a superseded handler's late deregister is a no-op. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>