Skip to content

Stage0 mirrors are adjudicated on merge_group: the build lane as a step of the floor job - #12104

Merged
gunbai-bot[bot] merged 9 commits into
mainfrom
session/neat-carp-265
Sep 24, 2026
Merged

gunbai-bot[bot] merged 9 commits into
mainfrom
session/neat-carp-265

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Adds full stage0 regen coverage (the build lane, both generations) as a merge_group-only step. The sign-off is operator decision msg_6e36a6a2 (2026-09-23). It supersedes msg_4a9045fc (generation 1 only) and the ~20 min pricing of msg_f1ade7cf-77e4-4896-a8b3-476747692c37. It covers exactly this step on this event, and nothing wider.

Land AFTER #12157 (the stage0 mirror resync). Until #12157 lands, this step is red on main's drifted mirrors.

The first live merge_group run caught real drift. In its own merge_group run 35973487586, this PR's step refused the composed revision with stage0-mirrors FAIL generated surface drift: v1_compiler_emit_rust.rs. Main had drifted again after #12157, because nothing enforced the mirrors yet, and the queue dropped the PR (failed_checks). The chicken-and-egg is resolved by carrying that resync in this PR: v1_compiler_emit_rust.rs is regenerated by claim_executor --regen-round-cost (changed_paths=1, one convergence stage) on origin/main 90bd54965cd. On the merged tree, the step's exact command claim_executor --required-ci --source-root dag --source-root src/v2 --required-lane build then gives stage0-mirrors first_generation_equal=true, generated-artifact OK, fixed_point_equal=true, phases_failed=0. The source commits touching the emitter since #12157 are #12180 (3e36b84e7b1) and 36dd24afc38; I did not bisect which one moved the mirror.

What changed

  • gunbc.compiler_gate_workflow compiler_gate_stage0_regen_step: one step on the existing floor job, running the build lane's own command (gunbc.witness_floor_workflow build_lane_run_script → claim_executor --required-ci --source-root dag --source-root src/v2 --required-lane build). The binary's exhaustive partition decides which phases run: GeneratedArtifact adjudicates every stage0 mirror against the first generation, and RegenFixedPoint compares a second generation against it. No job had run this lane since CI: required witnesses check builds only the compiler, on a hosted runner #11742.
  • The step's condition is !cancelled() && github.event_name == 'merge_group' && steps.build_witness_fold.outcome == 'success'. It runs as a separate process after the floor exits, which is the measured memory constraint. A floor red cannot disarm it.
  • Not a new job: floor already checks out the tree and builds claim_executor. The rationale is recorded at witness_floor_lane_jobs. No timeout was raised.
  • witnesses.yml and DESIGN.md were regenerated with generated_artifact_gate main_wet, not hand-edited. The stale DESIGN "Building & checks" sentence is corrected at gunbc.design_document.
  • New claim test.claim.compiler_gate_workflow_witness_test w_RED_the_stage0_mirrors_are_adjudicated_on_merge_group_only_after_the_floor. It checks that the step runs --required-lane with no measurement receipt, is gated on merge_group with !cancelled(), and comes after the floor's producer. Locally it returns true. It went RED on the real floor path (run 35890770775) on a branch whose step ran a different command, so it discriminates.

Evidence (fleet runs; throwaway drafts widened the event gate to pull_request through the authority, and all are closed)

control run stage0 step detail
clean tree = green (#12104 + #12157, full lane) 35890770775 success, 22.5 min first_generation_equal=true, registry 49/49 match, fixed_point_equal=true, phases_failed=0; the floor job took ~58 min against its 90-min timeout
planted drift = red (+1 comment line in std_measure.rs) 35902516565 failure, 20.8 min FAIL generated surface drift: std_measure.rs (only that file), phases_failed=1
PR runs skip it (this PR's own pull_request run) 35810834019 skipped floor succeeded

The ~30 min first generation measured earlier was inflated by the field-name re-export leak that #12100 fixed.

Along the way, the first attempt found 32 drifted mirrors on main. That drift traced to the #12089 emitter defect (fixed by #12100) and to an installer gap for the crate-less manifest (fixed by #12146). #12157 resyncs the remainder.

Rung drops: none retired

  • floor_cut_regen_second_generation_agreement: its trigger is second-generation refusal for EVERY phase that regenerates a committed population, shown by a red on a generation-unstable fixture. RegenFixedPoint compares a second generation for the stage0 mirrors only (it reads target/stage0-regen-receipt.json). The registry projections get no second generation, and no unstable fixture was run. Not met.
  • rust_unit_tests_off_the_merge_path (runner supply for the --lib tests) and witness_floor_off_the_required_gate (the whole witness population on the landing revision): not touched, not met.

🤖 Generated with Claude Code

…ep of the floor job

Operator decision msg_f1ade7cf-77e4-4896-a8b3-476747692c37 (2026-09-23): merge_group only.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as draft September 23, 2026 04:05
@gunbai-bot

gunbai-bot Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor Author

Control results: this PR must not land as it stands. Converted to draft.

Positive control #12102 (clean tree, run 35810815149, floor job 107021735980):

  • required-regen: elapsed_ms=1805940 ... planned=157 executed=157 adjudicated=157. The generated-artifact phase FAILED on a clean tree: 32 stage0 mirrors on main already drift (extdeps_languages_rust_representation.rs, std_algebra.rs, std_types.rs, v1_compiler_{compile,emit,emit_rust,infer*,parse,tokenize}.rs, v1_std_core.rs, …). This is the drift that went unobserved after CI: required witnesses check builds only the compiler, on a hosted runner #11742. Until the mirrors are re-synced, this step would red every merge_group run.
  • Cost: generation 1 took 30 min (compile.emit 26 min). The regen-fixed-point phase then started a second emit and was cancelled at the 90-min job timeout. The floor job's steps before the new step took ~41 min, so the lane is ~60 min, not ~20.

Negative control #12103 was cancelled the same way, so it discriminates nothing beyond the positive control's red.

Event gate (the parent's point (b)): on this PR's own pull_request run 35810834019, the floor job succeeded and Stage0 mirrors match… concluded skipped. The emitted if: is !cancelled() && github.event_name == 'merge_group' && ….

Blocked on: (1) re-syncing the 32 mirrors, and (2) a cost decision, since the operator's merge_group ruling was priced at ~20 min.

gunbc-ci-auto-heal and others added 2 commits September 23, 2026 04:36
…y the first control run)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Sep 23, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…p, per operator decision msg_6e36a6a2

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 23, 2026 19:23
@briansrls
briansrls added this pull request to the merge queue Sep 23, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 23, 2026
@briansrls
briansrls added this pull request to the merge queue Sep 24, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot removed this pull request from the merge queue due to a manual request Sep 24, 2026
@gunbai-bot

gunbai-bot Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

On the note in review 70794 about transcribed measurements: fair under DESIGN §6. Each figure in the rationale sits beside the run that produced it (35890770775 for the 22.5 min lane and ~58 min job; 35716368507 for the memory.high peak), so the producer is named and a reader can re-derive the figure there. I'm not re-pushing for it now, because a new head would restart CI right before re-queue. If you want the bare numbers removed and only the run IDs kept, it's a comment-only follow-up.

— sent from neat-carp-265

@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 24, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 24, 2026
gunbc-ci-auto-heal and others added 2 commits September 24, 2026 09:35
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 24, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 24, 2026
…rge_group run 36008489185

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 24, 2026
Merged via the queue into main with commit 0bb3317 Sep 24, 2026
5 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/neat-carp-265 branch September 24, 2026 18:34
@briansrls
briansrls restored the session/neat-carp-265 branch September 24, 2026 18:38
gunbai-bot Bot pushed a commit that referenced this pull request Sep 24, 2026
…de, regenerated next); the amendment bearing is historical after #12104

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Sep 24, 2026
…s on merge_group); docs projection regenerated

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants