chore: no workflow sets timeout-minutes, so a hung browser can hold the shared runner for the 6h default #294

Open
opened 2026-08-17 08:06:22 +02:00 by clawbot · 0 comments
Collaborator

Neither check.yml nor the e2e workflow sets timeout-minutes on any job, so each inherits the 6-hour default.

This was harmless while CI ran unit tests only. It stops being harmless once the browser suites run in CI (#259), because the failure mode those suites actually have is a HANG, not an assertion failure — #290 is literally "the extension opened no approval window within 30000ms", and a driver that loses its browser can sit indefinitely rather than exiting. On a shared runner that is a six-hour outage for every other repo in the queue, caused by one stuck Firefox.

Raised by the independent review of #291, which correctly did not file it as a defect of that PR — the omission is pre-existing practice and consistent across the existing workflows. It is newly consequential rather than newly introduced.

Implementation requirements

  • Set timeout-minutes on every job in every workflow, not only the e2e ones — a hung check job costs the same.
  • Pick each value from the observed runtime with headroom, and say in the PR body what the observed times were. Do not pick a round number and call it tuned. For reference, measured on https://git.eeqj.de/sneak/AutistMask/actions/runs/636: check 33s, e2e-chrome 51s, e2e-firefox 20s — but a cold-cache build has been measured at 2m16s, so the cap must clear a cold build comfortably or it becomes a second flake source.
  • A cap that trips on a cold cache is worse than no cap, because it trains readers to re-run red CI. Check the value against the cold path specifically.

Definition of done

  • Every job in every workflow has an explicit timeout-minutes.
  • Each value is justified against a measured runtime including the cold-cache case, stated in the PR body.
  • A green CI run on the branch demonstrates no job is near its cap.
  • TODO.md updated in the same commit.
  • make check passes.
Neither `check.yml` nor the e2e workflow sets `timeout-minutes` on any job, so each inherits the 6-hour default. This was harmless while CI ran unit tests only. It stops being harmless once the browser suites run in CI (https://git.eeqj.de/sneak/AutistMask/issues/259), because the failure mode those suites actually have is a HANG, not an assertion failure — https://git.eeqj.de/sneak/AutistMask/issues/290 is literally "the extension opened no approval window within 30000ms", and a driver that loses its browser can sit indefinitely rather than exiting. On a shared runner that is a six-hour outage for every other repo in the queue, caused by one stuck Firefox. Raised by the independent review of https://git.eeqj.de/sneak/AutistMask/pulls/291, which correctly did not file it as a defect of that PR — the omission is pre-existing practice and consistent across the existing workflows. It is newly consequential rather than newly introduced. ## Implementation requirements - Set `timeout-minutes` on every job in every workflow, not only the e2e ones — a hung `check` job costs the same. - Pick each value from the observed runtime with headroom, and say in the PR body what the observed times were. Do not pick a round number and call it tuned. For reference, measured on https://git.eeqj.de/sneak/AutistMask/actions/runs/636: `check` 33s, `e2e-chrome` 51s, `e2e-firefox` 20s — but a cold-cache build has been measured at 2m16s, so the cap must clear a cold build comfortably or it becomes a second flake source. - A cap that trips on a cold cache is worse than no cap, because it trains readers to re-run red CI. Check the value against the cold path specifically. ## Definition of done - [ ] Every job in every workflow has an explicit `timeout-minutes`. - [ ] Each value is justified against a measured runtime including the cold-cache case, stated in the PR body. - [ ] A green CI run on the branch demonstrates no job is near its cap. - [ ] `TODO.md` updated in the same commit. - [ ] `make check` passes.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/AutistMask#294