Thrown when a WebSocket route is registered but the application's HTTP adapter provides no upgrade seam, so no handshake could ever succeed.
This happens on a custom third-party IHttpAdapter that predates
the setUpgradeRouter seam. First-party adapters for Node, Deno, Bun, and
Cloudflare Workers all implement it.
The plugin still registers its service and health indicator in this state, so
one codebase deploys everywhere; the failure surfaces at route() —
registration time — rather than silently at first connect.