markConnected skipped onReconnect when hasConnected was false and there was no prior disconnect. Consumer state (isConnected) starts at false and stayed false — the send button threw "Connection lost" until the HTTP health check in initializeApp happened to race a setState through. Now onReconnect fires on every successful connect; hasConnected is no longer needed and gets removed.