# X_SOCKET_HAND_ROLLED

## Means

an app upgrades a websocket itself

## Typical cause

an app source file calls server.upgrade( or passes Bun.serve a websocket handler set, so the token check before the handshake, the per-actor cap, the heartbeat, the frame limit and the drain are the app's to remember, and the boot never serves the socket on the web listener

## Fix

`x verify --only boundaries --json — names the file and line; delete the upgrade and declare the socket with deviceSocket({ path, resolveToken, onFrame }) from @ultimat3/realtime/server`

[CLI and verify](/error-codes#cli-and-verify)
