chore: merge train 243 (v0.5.1622) - #10838
Merged
Merged
Conversation
added 5 commits
September 20, 2026 19:54
…udget `compiler-output-regression` is a `main-gate` input and has been failing with `TimeoutExpired` on `h1_native_rep_equivalence`, the head of both proof suites, so every merge bypasses it. `perry compile` resolves `optimized_libs` unconditionally (`run_pipeline.rs:6169`), hundreds of lines before `--no-link`'s early return, so the first linking compile in the job blocks on a nested `cargo build --release -p perry-runtime-static -p perry-stdlib-static`. #10782 moved that off the harness's `--print-hir --no-link` probe but deliberately not off the linking compile, whose executed binary is where `runtime_budgets`' `*_traced` maxima come from -- suppressing it there would pass them vacuously. So the build only changed which 300s `--compile-timeout` it did not fit inside. Pre-warm before the gates instead, with `--skip-run --compile-timeout 2400`. It is TWO cold builds, not one: all gated workloads share one `target/perry-auto-<hash>/`, but the build stamp inside it keys on the cross-feature set, and `loop_bound_semantics` is the only gated workload with no `*_traced` budget -- so the harness leaves `PERRY_GC_TRACE` unset for it and it wants a runtime without `perry-runtime/diagnostics`. Measured with a debug compiler on an M-series mini: 244.6s and 242.1s respectively, each against 300s; warming one variant only moves the timeout to the other workload. Two assertions, because a pre-warm that silently no-ops is worse than none -- `perry compile` exits 0 when auto-optimize fails and falls back to prebuilt libraries. One requires a stamped `target/perry-auto-*/` holding a non-empty `libperry_runtime.a` (the directory alone proves nothing: cargo creates it before building into it). The other reads the third pre-warm's own compile duration, which flips the stamp and is only cheap if both variants are cached. Validated on a cleared `target/perry-auto-*`: pre-warm 476s exit 0 ("post-warm flip compile: 4.0s"), then both suites pass with `failed_workloads: []` and a slowest gated compile of 6.0s -- with `loop_bound_semantics` down from 242.1s to 3.0s and `native-region-proof` from 294s to 58s. Both assertions were sabotage-checked back to red. `gc_trace_unavailable` is False on all 23 suite workloads, i.e. the executed binaries still report `perry-runtime/diagnostics` compiled in, so the #10782 exclusion is intact and the budgets are not vacuous.
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (8)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This was referenced Sep 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merge train 243 — the last
compiler-output-regressionblocker, released as v0.5.1622.Contents
fix(codegen): point the module-globalPtr<Shape>denial at #10803, not closed #7109ci: givecompiler-output-regression's cold runtime builds their own budgetWhat was still red, and why it is the last one
compiler-output-regressionis amain-gateinput and has been red for weeks. As of v0.5.1618 its structural verdicts are all fixed —failed_workloads: []— and the only remaining failure was2 × TimeoutExpiredonh1_native_rep_equivalence, which is the residual recorded when #10782 was closed: that fix suppressed auto-optimize on the HIR probe but deliberately not on the linking compile, so the 343 s cold build simply moved into a different 300 s budget.The exclusion had to stand.
runtime_budgets'allocations_traced/gc_collections_traced/write_barriers_tracedare derived solely from the executed binary'sPERRY_GC_TRACEstderr, andoptimized_libs/freshness.rs:288-293addsperry-runtime/diagnosticsto the rebuild because the compiler sees that variable — a derivation that only runs on the auto-optimize branch. Those budgets are maxima, so a runtime emitting no trace scores 0 and passes all three vacuously.So the fix pays the cold build in a step of its own, before the gates.
Two cold builds, not one
This is the part worth reading. The obvious design warms once. It is wrong:
The
perry-auto-<hash>directory name excludes the cross-feature set, but the build stamp inside it includes it. The harness setsPERRY_GC_TRACE=1only for workloads carrying*_tracedbudgets, and that variable addsperry-runtime/diagnostics.loop_bound_semanticsis the one gated workload with no*_tracedbudget — so it wants the other feature set, hits a stamp mismatch, and re-runs cargo. A single-warm design would have left exactly one gate step to absorb a cold build.The step therefore warms both, then verifies.
It asserts it actually warmed — twice
A pre-warm that silently no-ops is worse than none: the gates then fail exactly as before while looking warmed. Two independent assertions:
target/perry-auto-*/holding both a build stamp and a non-emptylibperry_runtime.a, or::error::pre-warm warmed nothingand exit 1.The second is the one that discriminates. Presence can pass on a stale or partial directory; "a compile after warming still took 150 s" measures the property directly.
A gate caught the new step, which is the gate working
The first validation aborted at lint:
scripts/compiler_output_step_liveness.pypins that job's post-build step inventory. Registered inCOMPILER_SUBJECTSrather than exempted — it depends on the build and already carries the matchingif:guard, so a sibling failure cannot hide it. Gate now passes at 10 subjects, and its own self-test still passes at 8 cases, which was checked separately: a registry edit that broke the checker would be worse than the drift.Listing it matters beyond satisfying the check. The pre-warm carries its own liveness assertions and can fail, so it is a subject; were it ever silently removed, every gate step below would quietly inherit the timeout it exists to prevent, and the failure would look exactly like the red it just fixed.
Provenance
The #10782 work was produced by an agent that died on an authentication error after committing but before pushing. The commit was recovered locally, rebased twice as
mainmoved beneath it, and pushed. Because it never reached lint, the workflow change was verified here instead:test.ymlparses at 28 jobs, the pre-warm sits at step 10 with all seven gates at 11–17, andci_plan.py --self-testpasses.Validation
Assembled on
e2a0839074; both source heads asserted fresh; PR fully represented — zero missing insertions; no attribution trailers. Ten cheap gates,cargo check --workspace --all-targetsunder-D warnings, all five pinned artifacts byte-identical before and after, six unit suites with an empty failing set, andlintcomplete at 6-of-6 with nothing outside the known-red public-baseline step on the re-run.Both compiler-output suites at
failed_workloads=[];repsel_census rc=0 wasted_promotion=False.Gap sweep at
PERRY_RUN_TIMEOUT=30, six areas weighted to #10804'sPtr<Shape>surface, 197 fixtures, every area asserted live, zero unexplained regressions: