From 1741df0bf14461d96ae3d52700f9f0a9be74b014 Mon Sep 17 00:00:00 2001 From: "mudler's LocalAI [bot]" <139863280+localai-bot@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:01:06 +0200 Subject: [PATCH] fix(ui): scale the chrome audit's timeout to the number of routes it walks (#11319) chrome-audit.spec.js walks 25 routes in a single test, and has been the UI E2E suite's failure on 5 of the last 6 master runs. It always dies the same way, at the 30s per-test default: Test timeout of 30000ms exceeded. Error: page.waitForTimeout: Test timeout of 30000ms exceeded. 19 | await page.goto(route) > 20 | await page.waitForTimeout(400) The spec is new in 5cb0c1a8; the commit before it was green, and every run since has been red on this file. The failure is cumulative rather than one bad route. Across those runs the clock runs out at line 19, 20 or 21 depending on where the loop happens to be, and the timeout lands on waitForTimeout rather than on goto, which is what running out of budget looks like as opposed to a navigation that hangs. 30s over 25 routes is ~1.2s each, including a deliberate 400ms settle, so there is very little headroom to begin with. Give the test a budget proportional to its work: six seconds a route. That absorbs a slow runner and still fails promptly if a route genuinely hangs. Verified: the spec passes on the current UI in 12.2s solo, and the full suite passes 418 at 8 workers locally. What I could NOT do is reproduce the CI timeout on this machine, which has 20 cores against the runner's 2 to 4; under synthetic CPU load it still finished in 13.5s. So the fix is argued from the CI signature and the arithmetic, not from a local repro, and the proof is this spec going green on the hosted runner. Note test.setTimeout() has to be called inside the test body. At module scope Playwright rejects it with "test.setTimeout() can only be called from a test". Assisted-by: Claude Code:claude-opus-5 [Read] [Edit] [Bash] Signed-off-by: Ettore Di Giacinto Co-authored-by: Ettore Di Giacinto --- core/http/react-ui/e2e/chrome-audit.spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/http/react-ui/e2e/chrome-audit.spec.js b/core/http/react-ui/e2e/chrome-audit.spec.js index bc1827464..728701003 100644 --- a/core/http/react-ui/e2e/chrome-audit.spec.js +++ b/core/http/react-ui/e2e/chrome-audit.spec.js @@ -14,6 +14,16 @@ const ROUTES = [ ] test('no page renders a dead icon or a default-chrome control', async ({ page }) => { + // One test walks every route, so its budget has to scale with the list rather + // than sit on Playwright's per-test default of 30s. At 25 routes that default + // allows ~1.2s per navigation, which holds on a developer machine and does + // not on a loaded CI runner: the suite went red on the commit that added this + // spec, timing out mid-loop at waitForTimeout rather than at any single goto, + // which is what cumulative slowness looks like as opposed to one hung route. + // Six seconds a route absorbs a slow runner and still fails promptly if a + // route really does hang. + test.setTimeout(ROUTES.length * 6_000) + const findings = [] for (const route of ROUTES) { await page.goto(route)