Skip to content

CI cannot see crates/*/tests/*.rs regressions: per-PR runs --lib --bins, and SOURCE_SUITE_MAP is hand-maintained (2 failures beyond #7494) #7708

Description

@proggeramlug

cargo test -p perry-codegen is red on main (v0.5.1407) with 6 failures across 4 integration suites. All 6 predate the PRs merged today (verified by running the same command on main before and after: identical set).

integer_arithmetic_array_push_omits_inbounds_layout_note_and_barrier
integer_modulo::i32_counter_mod_unsafe_or_nonliteral_divisors_keep_frem
large_local_array_push_inbounds_store_emits_precise_slot_barrier
proven_buffer_and_typed_array_reads_are_numeric_operands
reassigned_typed_array_store_records_runtime_fallback
typed_f64_receiver_method_clone_raw_loads_after_composed_guards

Why this sat unseen

Per-PR cargo-test runs --lib --bins (.github/workflows/test.yml:829) — no tests/*.rs integration suite runs on a PR at all. e2e-scoped runs only suites the diff names, plus a hand-maintained SOURCE_SUITE_MAP that maps all of crates/perry-codegen/src/ to exactly three suites, none of these four.

scripts/ci_e2e_scope.py's own header already names this as the #6037 class: "a source change that regresses an existing suite the diff doesn't name… can land green and sit red for days." This is that, except it is longer than days and nobody has a number for how long, because nothing reports it.

Why it matters beyond these 6

Today two separate PRs (#7698, #7702) each broke a perry-codegen integration test, and in both cases the only way to find out was to run the full suite by hand and diff against a hand-captured main baseline. That is not a workflow — it depends on someone deciding to check. Both were caught; the next one won't be.

The two failures each PR introduced were also different in kind, which is worth recording:

Suggested

  1. Triage the 6 — some may be stale assertions, some may be real.
  2. Then either add perry-codegen's suites to the per-PR set, or make SOURCE_SUITE_MAP derive from something that can't silently omit a suite. A hand-maintained map of source dirs to suites has the same failure mode as the MIN_COMPILED=90 floor fixed in gate(gc): make the root-dominance corpus floor a two-sided ratchet #7706: it is correct on the day it is written and nothing tells you when it stops being.

Activity

  1. proggeramlug commented on Aug 9, 2026

    @proggeramlug
    ContributorAuthor

    Correction: this partially duplicates #7494 — narrowing it

    I filed this without finding #7494, which already documents four of the six and asks the right question about each ("did the lowering legitimately change, or did a proof regress?"):

    • proven_buffer_and_typed_array_reads_are_numeric_operands
    • reassigned_typed_array_store_records_runtime_fallback
    • integer_modulo::i32_counter_mod_unsafe_or_nonliteral_divisors_keep_frem
    • integer_arithmetic_array_push_omits_inbounds_layout_note_and_barrier

    Those four belong to #7494. It also establishes something I did not: they are lowering-independent (identical with and without PERRY_RS4GC=0, so not part of the #7370 native-roots family) and they reproduce when run alone, so they are not order-dependent either.

    What is genuinely new here — two failures #7494 does not list

    large_local_array_push_inbounds_store_emits_precise_slot_barrier
    typed_f64_receiver_method_clone_raw_loads_after_composed_guards
    

    Both are in the same untested tier. Whether they are older than #7494 or arrived since, I have not established — worth checking, because "the set grew" and "the set was always this size" have different implications for how fast this tier rots.

    And the structural half, which #7494 names but does not track

    #7494 explains why they went unnoticed; it does not carry the fix. That is what this issue should be:

    Per-PR cargo-test runs --lib --bins (test.yml:829), so no crates/*/tests/*.rs suite runs on a PR at all. e2e-scoped runs only suites the diff names, plus a hand-maintained SOURCE_SUITE_MAP (ci_e2e_scope.py:86) mapping all of crates/perry-codegen/src/ to three suites — none of them these.

    That map has the same failure mode as the MIN_COMPILED=90 floor fixed in #7706 (a 131-source corpus tolerating 41 silent failures) and the handle-floor regex found in #7709 (blind to sites whose local is named raw): a hand-maintained list of what to check is correct on the day it is written, and nothing tells you when it stops being.

    Two of today's PRs each broke a suite in this tier, both caught only by running the full suite by hand and diffing against a same-day baseline. That is not a workflow — it depends on someone deciding to check.

    Suggested split: the four → #7494; the two new ones → triage here or move them there once dated; and the CI-coverage gap stays here as the actionable item, since it is what makes the other two issues recur.

  2. changed the title [-]cargo test -p perry-codegen is red on main: 6 pre-existing failures no per-PR gate can see[/-] [+]CI cannot see crates/*/tests/*.rs regressions: per-PR runs --lib --bins, and SOURCE_SUITE_MAP is hand-maintained (2 failures beyond #7494)[/+] on Aug 9, 2026
  3. added 3 commits that reference this issue on Aug 9, 2026
  4. proggeramlug commented on Aug 10, 2026

    @proggeramlug
    ContributorAuthor

    Triage of the six, re-measured on main at v0.5.1432, one cargo test -p perry-codegen --test <suite> per suite. Four are fixed, by unrelated work, with nothing recording it:

    Four entries silently stopping being true is the same failure mode #797 recorded for the parity skip-list, and it shaped the fix more than the count did.

    One measurement worth having on the record: 23 of the 24 suites in crates/perry-codegen/tests/ are in-process (emit_ir_only: true — no perry compile subprocess, no link, no runtime), and every one completes in 2.2–10.4 s wall clock, nearly all of it cargo's freshness check. The map's three entries were never a judgment about the other 20; that was what one commit had time to verify. So the "either/or" in the Suggested section turns out not to be an either/or — the suites are cheap enough to add and the map can be made unable to omit one.

    PR #7748: map goes 3 → 22 suites; --self-test fails on any perry-codegen/tests/*.rs that is neither mapped nor in a new SUITE_EXCLUSIONS; exclusions are per-TEST (so native_proof_regressions contributes its other 261) and self-invalidating — the job runs exactly the held-out tests and fails if one passes. Also fixes the --cap of 12, which would have silently truncated the 22-suite set and re-created this bug one layer up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugConfirmed defect or regression

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions