2f6a221f09
770's HTTP→read-RPC migration replaced fetch-based agent calls with rpcCall over WebSocket. setupTests.ts only mocks fetch though, so the real jsdom WebSocket runs — and jsdom's WebSocket implementation asynchronously fires its connection-failure error after ~9 seconds (via internal Timeout._onTimeout). Tests that await component-mount state (like App.test.tsx > calls getCurrentProject() on mount) hang on that pending promise and time out at 10s. This silently broke 1 test on master (App.test.tsx getCurrentProject on mount) and cascaded into 16 failures in any worktree where the test file count changed and timing shifted (804, 806). Fix: replace the global WebSocket constructor with a stub that immediately fires onerror + onclose on the next microtask. rpcCall sees the error and rejects synchronously; components catch and continue rendering with empty state. Tests pass without flake. Verified locally: vitest run → 349/349 pass.