diff --git a/packages/utils/network.ts b/packages/utils/network.ts index 3b3790754c0ba..edc54285a0746 100644 --- a/packages/utils/network.ts +++ b/packages/utils/network.ts @@ -228,6 +228,11 @@ async function httpStatusCode(url: URL, ignoreHTTPSErrors: boolean, onLog?: (dat } export function decorateServer(server: net.Server) { + // Windows named-pipe servers pre-post only 4 accept instances by default, + // so concurrent clients can transiently fail to connect. Node reads this + // env var when a server starts listening on a pipe. + if (process.platform === 'win32') + process.env.NODE_PENDING_PIPE_INSTANCES ??= '32'; const sockets = new Set(); server.on('connection', socket => { sockets.add(socket); diff --git a/tests/mcp/annotate.spec.ts b/tests/mcp/annotate.spec.ts index ded999196d90f..8ae2873759626 100644 --- a/tests/mcp/annotate.spec.ts +++ b/tests/mcp/annotate.spec.ts @@ -455,7 +455,7 @@ test('should switch screencast to -s session on show --annotate', async ({ conne await cli('-s=first', 'show', { bindTitle }); const browser = await connectToDashboard(bindTitle); const dashboard = browser.contexts()[0].pages()[0]; - await expect(dashboard.locator('#display')).toBeVisible(); + await expect(dashboard.locator('#display')).toBeVisible({ timeout: 15_000 }); const sampleCenter = () => dashboard.evaluate(() => { const img = document.querySelector('#display') as HTMLImageElement | null; @@ -480,7 +480,7 @@ test('should switch screencast to -s session on show --annotate', async ({ conne void annotatePromise.finally(() => { done = true; }); await expect(dashboard.getByRole('main', { name: 'Dashboard: annotate' })).toBeVisible({ timeout: 15_000 }); - await expect(activeSession(dashboard)).toHaveAccessibleName('Session second'); + await expect(activeSession(dashboard)).toHaveAccessibleName('Session second', { timeout: 15_000 }); await expect.poll(async () => { const c = await sampleCenter();