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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Neither
check.ymlnor the e2e workflow setstimeout-minuteson 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
timeout-minuteson every job in every workflow, not only the e2e ones — a hungcheckjob costs the same.check33s,e2e-chrome51s,e2e-firefox20s — 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.Definition of done
timeout-minutes.TODO.mdupdated in the same commit.make checkpasses.