Skip to content

frontend: macOS test leg has too little timeout headroom — 6 timeout failures in 3 days across 5 different specs #7713

Description

@mengw15

Task Summary

The build / frontend (macos-latest) leg has failed 6 times between 2026-08-14 and 2026-08-17, each time on a timeout rather than a failed assertion, and each time on a different spec. Two further runs went red with no FAIL line at all (cancelled once the leg had already failed).

Date (UTC) Spec Timeout
08-14 06:59 workflow-execution-history.component Test timed out in 5000ms
08-15 03:47 workflow-execution-history.component Test timed out in 5000ms
08-16 00:12 filters.component Hook timed out in 10000ms
08-16 01:24 hub-search-result.component Test timed out in 5000ms
08-16 05:12 filters.component + report-generation.service Hook 10000ms + Test 5000ms
08-17 02:52 report-generation.service Test timed out in 5000ms

The most recent one (#7710, a PR that changes nothing but the sbt/setup-sbt pin in CI workflow YAML) failed on search.component.spec.ts:283 — 1 test out of 4704, in the beforeEach hook, at 11273ms. The same test ran in 378ms on ubuntu in that very run, where the next-slowest macOS test was 4355ms.

This is headroom, not a bad test. The failing spec is different nearly every time and it is always a timeout. The macOS leg's own wall time swings about 2x run to run — 9m17s (#7681), 9m29s (#7696), 13m18s (#7644), 13m56s (#7687), 16m52s (#7701) — while the timeouts are fixed absolute values that do not scale with how loaded the runner is. Vitest self-reported Duration 214.49s (... environment 152.09s) on the failing run, so most of that time is jsdom environment setup rather than test bodies.

Nothing in the frontend test setup changed in this window: vitest.config.ts, test-zone-setup.ts and angular.json have not been touched in three weeks, and the Node bump to 24.19.0 predates it. The suite has grown to 202 spec files / 4704 tests, which raises the baseline a little, but no single PR explains the shift — it reads as the margin finally being thin enough that ordinary macOS runner variance crosses it.

Proposed fix

Raise both limits in frontend/vitest.config.ts, which currently sets neither and so inherits Vitest's defaults:

testTimeout: 20000,   // default 5000  — 4 of the 6 failures hit this
hookTimeout: 30000,   // default 10000 — 2 of the 6 failures hit this

Both are needed; raising only hookTimeout would leave most of these failures in place. These are roughly 4x and 3x the worst observed times. The cost is that a genuinely hung test reports 15-20s later, which is negligible against a 9-17 minute leg and strictly cheaper than re-running CI and eroding the signal a red leg is supposed to carry.

Deliberately not proposed

Making the individual specs cheaper. Some are expensive on purpose — hub-search-result and search stand up their real child components to work around the coverage-attribution loss in #7458, and undoing that would revert #7627 / #7535.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions