Ultimate

X_SOCKET_UNAUTHENTICATED

Means

the sync upgrade carried no credential this app accepts

Typical cause

the app's authenticate hook decided this upgrade belongs to nobody. A decision, not a fault — it never pages anyone, because the refusal is the whole point of the hook. Until this cycle there was no way to authenticate a WebSocket at all, so realtime was single-tenant only. Distinct from X_TOPIC_FORBIDDEN, which is a subscriber that already has a socket and asked for something it may not have; this one never gets a socket, so the client learns about it by tearing the connection down

Fix

send the credential syncNode({ authenticate }) reads on the upgrade request, or return an anonymous Actor from it to admit this socket

Listed under Realtime

This page as markdown