Symptom
The full-workspace cargo-test job (nightly schedule, tag pushes, workflow_dispatch) stopped completing on 2026-07-03. It hangs inside crates/perry/tests/issue_4903_listen_callback_deferred.rs until the job's 180-minute timeout kills it.
Evidence
Why #5831 is the prime suspect
issue_4903 is an in-process HTTP server + http.get client round-trip — exactly the in-process server+client wakeup path that #5831 ("JS-loop-driven current-thread async runtime + wait-driver with gated fast-native-drive", supersedes #5779) reworked. The #5779 deadlock family was always load/timing-sensitive, which fits a CI-only repro on 2-core ubuntu runners.
Consistent with timing-sensitivity: the same shape passes on macOS at bfa0f258d (perry-dev build, compile + run of the test's main.ts — clean exit, correct output). Linux/CI is where it parks.
Impact
Repro pointers
- CI: dispatch
test.yml on any SHA ≥ 45e6773, watch cargo test -p perry --test issue_4903_listen_callback_deferred (both tests in the file are in-process server round-trips; the orphan list shows main_bin + sleep parked).
- The 364 s / 283 s slow tests in run 28653372348's log may be a smaller, faster-to-debug signature of the same wait-driver latency issue.
Symptom
The full-workspace
cargo-testjob (nightly schedule, tag pushes, workflow_dispatch) stopped completing on 2026-07-03. It hangs insidecrates/perry/tests/issue_4903_listen_callback_deferred.rsuntil the job's 180-minute timeout kills it.Evidence
bfa0f258d(run 28653372348): last test-result line at 10:37:05, job killed at 13:04:54 — ~2.5 h with zero further progress. The runner's orphan-process cleanup terminatedissue_4903_listen_callback_deferred-82a5329debfca2bf, its compiledmain_bin, and asleep— the test binary was alive and parked at kill time.b08006923(run 28643991364, first nightly containing runtime: JS-loop-driven current-thread async runtime + wait-driver with gated fast-native-drive (supersedes #5779) #5831): ran ~3 h without finishing cargo-test before being cancelled.5df641c2e(pre-runtime: JS-loop-driven current-thread async runtime + wait-driver with gated fast-native-drive (supersedes #5779) #5831): full cargo-test completed in 66 min (its only failure was the since-fixed fix(runtime): #5763 regression — setPrototypeOf cycle walk must not advance past chain end #5866 setPrototypeOf regression).edd608a44will hit the same wall (contains runtime: JS-loop-driven current-thread async runtime + wait-driver with gated fast-native-drive (supersedes #5779) #5831).Why #5831 is the prime suspect
issue_4903is an in-process HTTP server + http.get client round-trip — exactly the in-process server+client wakeup path that #5831 ("JS-loop-driven current-thread async runtime + wait-driver with gated fast-native-drive", supersedes #5779) reworked. The #5779 deadlock family was always load/timing-sensitive, which fits a CI-only repro on 2-core ubuntu runners.Consistent with timing-sensitivity: the same shape passes on macOS at
bfa0f258d(perry-dev build, compile + run of the test's main.ts — clean exit, correct output). Linux/CI is where it parks.Impact
release-packages.ymlviaawait-tests; it will time out at 180 min on every SHA ≥ 45e6773.f3be32fa7(newest pre-runtime: JS-loop-driven current-thread async runtime + wait-driver with gated fast-native-drive (supersedes #5779) #5831 SHA) to route around this.Repro pointers
test.ymlon any SHA ≥ 45e6773, watchcargo test -p perry --test issue_4903_listen_callback_deferred(both tests in the file are in-process server round-trips; the orphan list showsmain_bin+sleepparked).