From 76078ac9cbce927ac542e5c65474d5b39c73e426 Mon Sep 17 00:00:00 2001 From: Randy Lutcavich Date: Sun, 2 Aug 2026 18:02:28 -0700 Subject: [PATCH] Run the browser suite on one worker CI on main went red on a flaky e2e test that passed on the identical commit in the pull request run. `fullyParallel: false` only serializes tests within a file. Playwright still runs files concurrently, and the worker count varies with the host: one worker locally on Windows, three on Linux, two on a GitHub runner. The suite measures real layout geometry and drives timing-sensitive launcher transitions, some with waits as short as 1500 ms, so concurrent load makes it racy in a way that depends on the machine it happens to run on. Three different tests failed across three runs of the same code, each passing on repeat: - Linux, three workers: universal search traps focus, scrolls, activates, and restores its opener - CI Windows, two workers: launcher Search activates the offline Obstacle package and recovers at 720p - CI Windows rerun, two workers: triggered motion shell actions navigate and safely leave unassigned progress Every failure was an element that never appeared, which is the signature of contention rather than a product defect. With `retries: 0` any one of them fails the whole run. Pinning one worker makes the suite deterministic across platforms and matches the intent already declared by `fullyParallel: false` and `retries: 0`. It costs wall clock: 5.0m on Linux against 2.3m, and 2.5m on Windows. Verified 80/80 on both platforms serially. This does not prove the application is free of the underlying race. It removes the load that exposes it; a race-free suite would be needed before raising the worker count again. Co-Authored-By: Claude Opus 5 (1M context) --- apps/console-lab/playwright.config.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/console-lab/playwright.config.ts b/apps/console-lab/playwright.config.ts index 6c27ea7..28e647a 100644 --- a/apps/console-lab/playwright.config.ts +++ b/apps/console-lab/playwright.config.ts @@ -5,6 +5,16 @@ export default defineConfig({ outputDir: "../../test-results/console-lab", fullyParallel: false, retries: 0, + // One worker, deliberately. `fullyParallel: false` only serializes tests + // within a file; Playwright still runs files concurrently, and the worker + // count then varies with the host's core count. This suite measures real + // layout geometry and drives timing-sensitive launcher transitions, so + // concurrent load makes it flaky in a way that depends on the machine: a + // three-worker Linux run and a two-worker CI run each failed a different + // test that passed on a repeat of the identical commit. With `retries: 0` + // any such flake fails the whole run, so determinism is worth the wall + // clock. Raise this only alongside evidence that the suite is race-free. + workers: 1, reporter: "line", use: { baseURL: "http://127.0.0.1:4173",