Corpus position 4207/4708: js/web/websocket/websocket-close-connecting.test.ts.
close() and terminate() during CONNECTING must synchronously enter CLOSING, asynchronously emit error then close, settle CLOSED with code 1006 / wasClean: false, cancel every pending open path, and release transport/server references so the 128-instance upstream leak matrix is collectible.
Implement this through the shared WebSocket lifecycle rather than a corpus skip. Cancellation diagnostics must use a real ErrorEvent and preserve a structured nested error with stable code, operation, phase, original ready state, cause, and source-aware stack. Add permanent exact-file and diagnostic-contract regressions. Acceptance: the unchanged upstream file is 4/4, with 0 failed, todo, unsupported, or allowed-empty cases.