From 03e4d9e907edf67b2d53f83bf42f460fae6f97c4 Mon Sep 17 00:00:00 2001 From: Jarry Shaw Date: Wed, 23 Sep 2026 13:57:23 -0400 Subject: [PATCH] ci(unit-tests): raise pytest job timeouts from 30 to 45 minutes (#713) `test`, `integration` and `gate` share one wall, `timeout-minutes: 30`, against measured worst *passing* runs of 27.6, 29.4 and ~27.2 minutes -- a 36-second margin on `integration`. Six jobs were killed by the ceiling in one day, five on required contexts (`Integration Python 3.10`-`3.14`, five of ruleset 23497679's fifteen required checks), each needing a manual re-run before its PR could merge. Two of the killed jobs re-ran clean under a drained Actions queue, so the suite does fit in 30 minutes when runners are free -- the kills are contention pushing a 27-29 minute job past the wall, not an impossible ceiling. 45 is ~1.55x the observed maximum: enough that queue contention alone cannot kill a job, tight enough that a genuine runaway is still bounded well short of an hour. - `.github/workflows/unit-tests.yml:54` (`test`, check `Python 3.1x`): 30 -> 45 - `.github/workflows/unit-tests.yml:96` (`integration`, check `Integration Python 3.1x`): 30 -> 45 - `.github/workflows/unit-tests.yml:207` (`gate`, check `Gate (full suite, Python 3.14)`): 30 -> 45 `changelog` (`:179`, 5 min, completes in 6-10s) and `lint.yml:72` (30 min, completes in 4.0 min) are untouched: ample margin, never killed. This is insurance against contention, not a speedup, and not a substitute for #715's job-count reduction; revert to 30 once that lands and the jobs run shorter on their own. No test added: a `timeout-minutes` value has no runtime behaviour to assert on, and CONTRIBUTING.md's own rule calls for a test case only when a change "fixes a bug or adds new functionality" -- this is neither. Checked tests/test_tier_guard.py and tests/_tiers.py, the only tests/ modules that reference unit-tests.yml; neither pins timeout-minutes or job counts. Fixes #713 --- .github/workflows/unit-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index fac6e5f99..97f5d8d33 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -51,7 +51,7 @@ jobs: if: ${{ inputs.gate-only != true }} runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental == true }} - timeout-minutes: 30 + timeout-minutes: 45 strategy: fail-fast: false matrix: @@ -93,7 +93,7 @@ jobs: if: ${{ inputs.gate-only != true }} runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental == true }} - timeout-minutes: 30 + timeout-minutes: 45 strategy: fail-fast: false matrix: @@ -204,7 +204,7 @@ jobs: name: Gate (full suite, Python 3.14) if: ${{ inputs.gate-only == true }} runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 45 steps: - uses: actions/checkout@v7