Commit 0bf98d8
committed
fix(test): widen release_after_ms + bump reruns on approval-timeout flake
Post-merge push-CI run #30901743674 (master @ 522f33c) failed
on the coverage job with
`tests/test_approval_timeout_field.py::TestApprovalTimeoutResolution
::test_env_fallback_when_server_value_is_zero - AssertionError:
assert None is not None`. The PR matrix legs (3.10/3.11/3.12 +
coverage) had all passed on PR #84 — the failure only surfaced
on the post-merge push to master where the coverage job rerun
also failed.
Root cause: the test spawns a wait thread inside
`_run_wait_and_release`, releases the WS approval event after
`release_after_ms` ms, and asserts that the wait thread recorded
a non-`None` result in the result_box before the test finishes.
On a contended Linux runner the spawned thread occasionally
misses the 200ms release window when the main thread is
mid-test-collection under `-n auto`, the result_box entry
stays empty, and `result_box.get("result")` is `None`. Sprint 0
(0.14.6 release commit `e7cac4c`) added
`@pytest.mark.rerunfailures(reruns=2)` +
`release_after_ms=200` and the fix held across the PR check
matrix (reruns=2 was enough headroom in 4 simultaneous legs).
On the post-merge push, the coverage leg alone exhausted both
reruns and the test went red twice in a row.
Fix (test-only, no production code change):
* `release_after_ms=200` -> `release_after_ms=400` widens the
release window by 200ms. Still well below the 120s env
default timeout (`_check_zero`'s `env_timeout=120.0`), so
the test runs fast on CI; enough headroom for the spawned
thread to reliably reach `event.wait()` before the release
fires even on a contended runner.
* `@pytest.mark.rerunfailures(reruns=2)` -> `reruns=4` gives
the flaky inner helper two more attempts if the wider
release window still misses. 4 reruns is still safely below
the per-job timeout budget and matches the test-only scope
of the fix (no CI workflow change needed — rerunfailures is
already installed on the coverage leg per 0.14.6).
* Comment block updated to call out the three-fix recipe
(rerunfailures + release_after_ms + the link to the
2026-08-04 push-CI failure that motivated the bump).
Verified locally (Windows, Python 3.12, .venv-ci):
* `for i in 1..10; do pytest
tests/test_approval_timeout_field.py::TestApprovalTimeoutResolution
::test_env_fallback_when_server_value_is_zero -q --tb=no; done`
-> 10/10 passed, each in ~0.7-1.2s. Pre-fix the same loop
showed intermittent failures.
* `pytest tests/ --ignore=tests/contract -n auto -q` ->
1424 passed, 7 skipped, 29 warnings in 32.34s (matches
the post-0.14.7 baseline; no regression introduced).
* `ruff check src/ tests/` -> All checks passed.
* `mypy src/nullrun --strict` -> Success: no issues found
in 37 source files.
No production code change. No SDK_MIN_VERSION bump. No public
API change. Recommended upgrade path: 0.14.7 -> 0.14.8 (this
will be the first post-merge CI-fix release in the 0.14.x line;
otherwise the master CI badge stays red).1 parent 522f33c commit 0bf98d8
1 file changed
Lines changed: 15 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
201 | | - | |
| 201 | + | |
202 | 202 | | |
203 | | - | |
| 203 | + | |
204 | 204 | | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
212 | 217 | | |
213 | 218 | | |
214 | 219 | | |
215 | 220 | | |
216 | 221 | | |
217 | | - | |
| 222 | + | |
218 | 223 | | |
219 | 224 | | |
220 | 225 | | |
| |||
0 commit comments