* fix: stop reporting transient WebSocket connect_error to Sentry
connect_error fires on every retry attempt (e.g. iOS Safari dropping
WebSocket during network transitions). Using logger.error routed each
attempt to Sentry.captureException, generating noise for a self-healing
failure. Switch to logger.log (no-op in production); the real failure
path (reconnect_failed) still uses logger.error and surfaces in Sentry.
https://claude.ai/code/session_01TpZ9W111Trkv2g4CkCWFpB
* refactor(useDraftSocket): clean up reconnect event handling
- 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
---------
Co-authored-by: Claude <noreply@anthropic.com>