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
Four perry-codegen integration-test failures on main (f05ae3b), arm64 macOS, debug, that are independent of the root-lowering default — they fail identically with and without PERRY_RS4GC=0, so they are not part of the #7370 native-roots family tracked in #7493:
tests/native_proof_buffer_views.rs
proven_buffer_and_typed_array_reads_are_numeric_operands (:915) proven native numeric reads should not force JS number coercion — the emitted IR now contains call double @js_number_coerce for a read the test proves is native-numeric.
reassigned_typed_array_store_records_runtime_fallback (:1942) expected reassigned typed-array store to record runtime fallback — no artifact record with expr_kind == "TypedArraySet", consumer == "TypedArraySet.slow_path", access_mode == "dynamic_fallback" and a non-null fallback_reason.
tests/native_proof_regressions/integer_modulo.rs
integer_modulo::i32_counter_mod_unsafe_or_nonliteral_divisors_keep_frem (:75) negative divisor must remain on floating remainder.
tests/typed_shape_descriptors.rs
integer_arithmetic_array_push_omits_inbounds_layout_note_and_barrier (:141) IR should contain block marker ….
All four reproduce when run alone, so this is not order dependence — unrelated to #7490 (poisoned mutex in typed_feedback.rs, fixed in #7492).
Why they went unnoticed
Integration suites under crates/*/tests/*.rs do not run per-PR (nightly/tag only — the CLAUDE.md pitfall), and cargo test without --no-fail-fast stops at the first failing target, so a log tail can look like a clean run.
What needs deciding
For each of the four, the question is the same and has to be answered before touching the test: did the lowering legitimately change, or did a proof regress?
If the numeric-proof / fallback-record / layout-note behaviour changed on purpose, the assertion is stale and should be re-pointed at the current contract — and made to assert the property rather than a textual window, so the next intentional change does not silently re-break it. (fix(test): isolate typed_feedback failures — a poisoned ENV_LOCK turned one failure into five (#7490) #7492's class-field assertion is a worked example: the positional "coerce appears between these two labels" window was replaced by an end-to-end data-flow assertion.)
If not, these are live regressions hiding behind an untested suite. An unnecessary js_number_coerce on a proven native read is a lost optimisation, but a missingdynamic_fallback record on a reassigned typed-array store is a soundness-adjacent gap in exactly the direction the test was written to catch.
Repro
cargo test -p perry-codegen --tests --no-fail-fast -- --test-threads=1
Symptom
Four
perry-codegenintegration-test failures onmain(f05ae3b), arm64 macOS, debug, that are independent of the root-lowering default — they fail identically with and withoutPERRY_RS4GC=0, so they are not part of the #7370 native-roots family tracked in #7493:tests/native_proof_buffer_views.rsproven_buffer_and_typed_array_reads_are_numeric_operands(:915)proven native numeric reads should not force JS number coercion— the emitted IR now containscall double @js_number_coercefor a read the test proves is native-numeric.reassigned_typed_array_store_records_runtime_fallback(:1942)expected reassigned typed-array store to record runtime fallback— no artifact record withexpr_kind == "TypedArraySet",consumer == "TypedArraySet.slow_path",access_mode == "dynamic_fallback"and a non-nullfallback_reason.tests/native_proof_regressions/integer_modulo.rsinteger_modulo::i32_counter_mod_unsafe_or_nonliteral_divisors_keep_frem(:75)negative divisor must remain on floating remainder.tests/typed_shape_descriptors.rsinteger_arithmetic_array_push_omits_inbounds_layout_note_and_barrier(:141)IR should contain block marker ….All four reproduce when run alone, so this is not order dependence — unrelated to #7490 (poisoned mutex in
typed_feedback.rs, fixed in #7492).Why they went unnoticed
Integration suites under
crates/*/tests/*.rsdo not run per-PR (nightly/tag only — the CLAUDE.md pitfall), andcargo testwithout--no-fail-faststops at the first failing target, so a log tail can look like a clean run.What needs deciding
For each of the four, the question is the same and has to be answered before touching the test: did the lowering legitimately change, or did a proof regress?
js_number_coerceon a proven native read is a lost optimisation, but a missingdynamic_fallbackrecord on a reassigned typed-array store is a soundness-adjacent gap in exactly the direction the test was written to catch.Repro