tests/test_0053_hang_watchdog.py::test_watching_restores_the_previous_watchdog failed in CI with a crashed worker:
__________________________ test_0053_hang_watchdog.py __________________________
worker 'gw0' crashed while running 'test_0053_hang_watchdog.py::test_watching_restores_the_previous_watchdog'
FAILED tests/test_0053_hang_watchdog.py::test_watching_restores_the_previous_watchdog
Run 33142970081, on feature/pin-y20-relaxation-rate at 6c46c783.
It is flaky, not deterministic
Re-running the same commit with no changes passed. The commit that failed touched only tests/test_1072_free_surface_spherical.py, which scripts/test.sh does not run at all (test_106*py/test_107*py are excluded pending the #504 triage), so the change could not have influenced it. Every other test_uw3 run in the preceding ~15, across seven branches, was green.
Why it is worth a ticket rather than a re-run
The failure mode is a crashed worker, not an assertion — the test process dies rather than reporting. That is the same class as #638's root cause (faulthandler repeat-dump against a hot interpreter loops or SEGVs) and #639's orphan leak, both in this watchdog machinery. An intermittent worker crash under xdist is the symptom you would expect if a dump can still land on an interpreter that is not in a safe state.
Two consequences for anyone reading CI:
- A red run here says nothing about the PR under test, so it invites re-run-until-green, which is how a real regression gets waved through.
- Because the crash takes the worker rather than the test, the tests xdist had scheduled behind it on
gw0 do not report either.
Suggested next step
Not a re-run policy — a native stack. Per #638, theorising about this class without one has burned several wrong hypotheses. The reproduction there needed a cold .pyc cache and piped children; worth checking whether the CI runner meets those conditions more often than a warm local run does.
Underworld development team with AI support from Claude Code
tests/test_0053_hang_watchdog.py::test_watching_restores_the_previous_watchdogfailed in CI with a crashed worker:Run 33142970081, on
feature/pin-y20-relaxation-rateat6c46c783.It is flaky, not deterministic
Re-running the same commit with no changes passed. The commit that failed touched only
tests/test_1072_free_surface_spherical.py, whichscripts/test.shdoes not run at all (test_106*py/test_107*pyare excluded pending the #504 triage), so the change could not have influenced it. Every othertest_uw3run in the preceding ~15, across seven branches, was green.Why it is worth a ticket rather than a re-run
The failure mode is a crashed worker, not an assertion — the test process dies rather than reporting. That is the same class as #638's root cause (faulthandler repeat-dump against a hot interpreter loops or SEGVs) and #639's orphan leak, both in this watchdog machinery. An intermittent worker crash under xdist is the symptom you would expect if a dump can still land on an interpreter that is not in a safe state.
Two consequences for anyone reading CI:
gw0do not report either.Suggested next step
Not a re-run policy — a native stack. Per #638, theorising about this class without one has burned several wrong hypotheses. The reproduction there needed a cold
.pyccache and piped children; worth checking whether the CI runner meets those conditions more often than a warm local run does.Underworld development team with AI support from Claude Code