You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
test(runtime): perry-runtime's full suite is flaky on main — different tests fail across runs, reproduced on a pristine worktree #7946
cargo test -p perry-runtime (full suite) is flaky on main, and CI runs cargo test --workspace, so it is a live source of red builds that get attributed to whichever PR happens to be in flight.
Evidence
Found while validating #7900/#7901/#7902 (gc-handoff/GCSAFE-NOTES.md):
Two runs on a feature branch each failed one test — a different test each time.
A pristine b8c1f103e worktree then reproduced run 1's failure with a byte-identical message, confirming it is not branch-attributable.
Why this matters more than an ordinary flake
The failure lands on whoever is merging. Several GC PRs merged today with admin bypass; a flaky required suite makes it impossible to distinguish "my change broke this" from "this was already broken", which is exactly the condition under which a real regression gets waved through as "the usual flake".
CLAUDE.md's own framing applies: a gate that fails for reasons unrelated to the change is not a gate, it is noise that trains people to bypass it.
Suggested first step
Identify the flaky set and whether they share a cause (test-order dependence, a process-global GC counter, or shared thread-local state across cargo test's thread pool are the obvious candidates given the subject matter). Then either fix, serialise, or quarantine them explicitly — quarantine being far better than leaving them to fire at random.
Note perry-runtime tests share process-global collector state, and several GC tests use RAII thread-local overrides (OldDefragTestEnable, OLD_DEFRAG_TEST_OVERRIDE, barrier-arming overrides). Test-order or parallelism interaction there would produce exactly this signature.
Root-caused and fixed in #7954 (five distinct process-globals; 24/100 failed runs → 0 in 300, excluding one pre-existing wall-clock case). Two members of the set are filed separately rather than left to fire at random: #7955 (prototype_addr_cache, structural — the per-thread conversion breaks dead_owner_side_tables) and #7956 (telemetry_verifier, a wall-clock pause bound that fails on a loaded host). Full characterisation, the A/B that isolates the environment cause, and the sabotage check are in the PR description.
Activity
test(runtime): stop five process-globals leaking across libtest threa…
proggeramlug commentedon Aug 12, 2026
Root-caused and fixed in #7954 (five distinct process-globals; 24/100 failed runs → 0 in 300, excluding one pre-existing wall-clock case). Two members of the set are filed separately rather than left to fire at random: #7955 (
prototype_addr_cache, structural — the per-thread conversion breaksdead_owner_side_tables) and #7956 (telemetry_verifier, a wall-clock pause bound that fails on a loaded host). Full characterisation, the A/B that isolates the environment cause, and the sabotage check are in the PR description.test(runtime): stop five process-globals leaking across libtest threa…