- Remove redundant reconnect_attempt listener: connect_error already
sets isReconnecting(true), and connectionError is never set before
reconnect_attempt fires, making that handler a no-op
- Wrap reconnect_failed in an Error object so Sentry receives a proper
exception with stack trace instead of a plain captureMessage string
- Store handleReconnectFailed as a named reference so socket.io.off()
removes only this listener rather than all reconnect_failed listeners
https://claude.ai/code/session_01TpZ9W111Trkv2g4CkCWFpB