Corpus position 4209/4708: js/web/websocket/websocket-custom-headers.test.ts.
The spawned Node header-echo fixture currently never delivers its IPC URL through the corpus runtime. Port it to the real in-memory ws topology and make handshake construction share one validated header path across virtual, Bun-listener, and raw clients.
Required contracts: custom Host and arbitrary headers; valid Sec-WebSocket-Key identity; invalid-key regeneration to a 16-byte base64 nonce; custom protocol precedence over the protocols array; canonical wire casing; Connection/Upgrade/version protection; valid special/empty values; and synchronous CRLF-injection rejection with actionable context. Preserve asynchronous IPC startup and child cleanup. Add a permanent exact-file regression. Acceptance: unchanged upstream file 10/10 with zero failed/todo/unsupported/allowed-empty.