Separate handshake failures from steady-state disconnects

Connection instrumentation needs an explicit handshake state, not an “idle request queue” proxy. Before readiness, a socket close is a startup failure owned by the connect attempt; after readiness, the same close is a steady-state connection failure. If cleanup clears readiness before classification, both paths may emit and double-count one event. Capture whether readiness was ever achieved before mutating state, then let exactly one owner record the terminal outcome.

Applies when: asynchronous WebSocket clients track connect, synthesis, and idle disconnect metrics separately. Keywords: WebSocket handshake startup disconnect double count telemetry state machine