ci / rust (push) Failing after 5m59s
`broker_attach_ws` upgraded the client WS first and only then dialed the peer inside `pump_broker_ws`; a dial failure (peer down, perimeter rejection, peer verifier refusing the pair JWT — all reported pre-upgrade) just logged and closed the socket, indistinguishable from a clean session end. Move the `connect_async` ahead of `on_upgrade`: on failure return a structured `502 peer_unreachable` (matching the other pre-upgrade error paths); on success hand the connected upstream to `pump_broker_ws`. Updated the allow_inbound-reject e2e to assert the handshake now fails with 502 instead of an opaque post-upgrade close. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>