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
cargo-test aborts with a stack overflow on every PR — statically_reachable_trusted_js_package_is_aot_compiled_without_route_entry, and a Python-only diff reproduces it #9196
The cargo-test job is failing on every open PR with a stack overflow, not an assertion:
thread 'commands::compile::collect_modules::tests::
statically_reachable_trusted_js_package_is_aot_compiled_without_route_entry'
(12606) has overflowed its stack
fatal runtime error: stack overflow, aborting
process didn't exit successfully: .../perry-c8602d85b11282cb (signal: 6, SIGABRT)
The abort takes down the whole test binary, so every test that had not yet run is skipped — the same masking shape as #9108. The visible failure is one test; the cost is the tail of the run.
It is not caused by any diff
Confirmed on four PRs with unrelated contents, all the same test, all the same signal:
#9193 is the decisive one: it changes a single Python file, cannot affect the compiled test binary at all, and reproduces the abort identically. Whatever the cause is, it is on main.
It lives in crates/perry/src/commands/compile/collect_modules/tests.rs:604.
It is a debug build (target/debug/build/perry/...), where stack frames are largest and no inlining trims recursion depth.
Stack overflow rather than assertion failure points at unbounded or deep recursion in module collection / reachability walking, not at a wrong expected value.
I have not root-caused it. This issue records that it is reproducible, that it is not diff-caused, and that a one-file Python PR is a free reproducer for whoever picks it up.
Why this is worth prioritising
Two required gates are red on main at once right now — this one and e2e-scoped (fixed in #9193). A permanently-red required check is CLAUDE.md hazard 2: it teaches reviewers to merge past red, and the next real regression lands invisibly behind it. The stack-overflow shape makes that worse than a normal failure, because it silently truncates the rest of the suite.
Suggested first steps
Confirm determinism: re-run cargo test -p perry --bin perry statically_reachable_trusted on main at 84185b5656 and see whether it aborts every time or intermittently. If intermittent, the trigger is likely test ordering or a shared fixture, not the test itself.
RUST_MIN_STACK bisection will say how deep the recursion is, and whether it is deep-but-bounded (a threshold problem) or unbounded (a cycle in the reachability walk — e.g. a package graph that re-enters itself when a subpath resolves back to its own root).
If it is a cycle, the fix is a visited-set in the walk, and the regression test is the package shape that closes the loop.
Summary
The
cargo-testjob is failing on every open PR with a stack overflow, not an assertion:The abort takes down the whole test binary, so every test that had not yet run is skipped — the same masking shape as #9108. The visible failure is one test; the cost is the tail of the run.
It is not caused by any diff
Confirmed on four PRs with unrelated contents, all the same test, all the same signal:
perry-runtimeonlyscripts/ci_e2e_scope.pyonly — zero Rust#9193 is the decisive one: it changes a single Python file, cannot affect the compiled test binary at all, and reproduces the abort identically. Whatever the cause is, it is on
main.What is known
fix(compile): AOT-promote trusted reachable JavaScript) and long predates any of these PRs.crates/perry/src/commands/compile/collect_modules/tests.rs:604.target/debug/build/perry/...), where stack frames are largest and no inlining trims recursion depth.I have not root-caused it. This issue records that it is reproducible, that it is not diff-caused, and that a one-file Python PR is a free reproducer for whoever picks it up.
Why this is worth prioritising
Two required gates are red on
mainat once right now — this one ande2e-scoped(fixed in #9193). A permanently-red required check is CLAUDE.md hazard 2: it teaches reviewers to merge past red, and the next real regression lands invisibly behind it. The stack-overflow shape makes that worse than a normal failure, because it silently truncates the rest of the suite.Suggested first steps
cargo test -p perry --bin perry statically_reachable_trustedonmainat84185b5656and see whether it aborts every time or intermittently. If intermittent, the trigger is likely test ordering or a shared fixture, not the test itself.RUST_MIN_STACKbisection will say how deep the recursion is, and whether it is deep-but-bounded (a threshold problem) or unbounded (a cycle in the reachability walk — e.g. a package graph that re-enters itself when a subpath resolves back to its own root).