Repository navigation
Fleet admission reads the merge queue: CI success from merge_group runs on R, branch fact from the push of R (PR 1 of 2) - #11238
Merged
Conversation
…rge_group runs on R, the branch fact from the push of R Re-sources the two propositions of gunbc.fleet_revision_acceptance onto the merge queue without changing them or their exact-revision join. The workflow_run route stays as a second admissible source until the witnesses push-on-main run is cut. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
…nal literal none Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
…e gunbc run argv Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
…low (heal-provided bytes, run 34738862591) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
Contributor
Author
|
Floor red on run 34740987623 is not this diff. Diagnosis below, recorded before re-running.
Re-running the failed jobs. |
… history, render only established facts (A) extdeps.github.workflow_runs ListForRef takes the event query input; the admission read passes merge_group and the fold refuses a response carrying any non-merge_group run (the realized request has no replay harness yet). pr_base_freshness passes pull_request, which its function always meant. (B) A matching run with run_attempt > 1 refuses as RequiredCiRunAttemptHistoryUnestablished, decided before non-verdicts drop. (C) The absent and unconcluded refusals state only what their predicates establish. The provenance warrant of the new producer is stated. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
…te request-boundary coverage as a temporary frontier C.1 RequiredCiRunsNotEventScoped reports what the returned list contains, not a diagnosis of the request; the text control now covers that arm. C.2 The unconcluded witness's annotation states the fact tested. A: request-boundary coverage is a temporary coverage frontier with its substrate limitation, residual, and closure criterion stated. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Sep 15, 2026
…nded sha The merge queue runs the required floor on its COMPOSED revision, and that revision is the one that lands -- measured, not assumed: the merge_group runs whose head_sha is 4f30460 and fe85902 are the commits main carries afterwards. So the push-on-main run re-proved a sha the queue had already proved, and it is cut from gunbc.witness_floor_workflow witness_floor_triggers. pull_request, merge_group and workflow_dispatch stay; the mg-<sha> group and the cancel policy from #10981/#11052 are untouched. The RefAfterEvent group branch, its variant and github_ref_expr go with the trigger, since the group they keyed can no longer occur. Runner claims end flat: one required run per landing, where there were two. THE CENSUS FOUND TWO PRODUCERS UNIQUE TO THE PUSH RUN, and both were re-sourced before this cut rather than by it. Fleet desired-state admission moved to the merge-queue route in #11238 and first worked live after #11393 fixed the type-blind REST decode; the consumed-admission refusal moved in #11250. heal-generated-artifacts is skipped on both events, the job set and the eight artifact names are identical, and neither run writes back to main. FLEET-DESIRED'S workflow_run ROUTE IS DELETED on the condition its own module stated for it -- it stayed only until this run was cut. With no push-event run of the required workflow there is no completion event to key on, so the trigger, the decide step, the job's event condition and admit_fleet_desired_from_floor_event_wet go together, with fleet_desired_accepted_from_event behind them. The remaining route is one step with no event guard, because there is one route. THE WITNESSES ARE RE-AIMED, NOT DROPPED. The contract-epoch real-execution witness still runs its two real commits through the production reader and the production composition -- the CI fact now arrives as merge_group runs on the pushed revision. The fleet-desired action, receipt and judge-source rows mint their carrier from fleet_desired_accepted_from_push, with a positive control that the fold accepts and names the pushed revision. Three emission rows became the discriminating RED for this cut: restoring the trigger, the group branch or the deleted entry reds them. gunbc.rung_drop main_per_commit_floor_verdict IS RETIRED BY ITS OWN TRIGGER. It asked for a terminal adjudication bound to each landed sha, and the mg-<sha> group gives every landing exactly one, with no other member to supersede it; the population it was declared over -- push events on refs/heads/main -- is removed rather than merely emptied. NOT IN THIS CHANGE, AND NAMED RATHER THAN LEFT TO BE FOUND: gunbc.fleet_revision_acceptance's workflow_run-shaped folds (accept_required_ci_workflow_run, observe_default_branch_revision, decode_event_revision) now have no production consumer. Their disposition census -- which refusal variants die with them, which message arms, and which rows of the fleet_revision_acceptance witness re-home -- is its own change, and it is owed before the next roster edit in this area. Operator sign-off for the job-roster change is cited in this lane's brief. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
PR 1 of 2. This PR has no prerequisite. PR 2 (the cut) is separately gated, on this PR, on #11250 (the consumed-row owner charge), and on live admissions through the push route.
Why
GitHub's merge queue is on for
main. The required floor (gunbc.witness_floor_workflow) now runs on the queue's composed sha as amerge_grouprun, and the concurrency group and cancel policy for that come from #10981 and #11052. After a queue merge, the push-on-main floor run re-runs the sha the queue just proved.A census over three queue landings (table below) found exactly two products the push-on-main run has that the
merge_grouprun on the same sha does not:fleet-desired.yml(gunbc.fleet_desired_admission_workflow) triggers onworkflow_runof witnesses onmain.gunbc.fleet_revision_acceptanceDefaultBranchRevisionObservedrequiresoriginating_event == push. Amerge_grouprun (head_branch gh-readonly-queue/...) never triggers admission and cannot satisfy it. This PR re-sources it.namespace-wave-admissionphase (namespace_wave_admissionwave_admission_refusal) refuses consumed rows only wherebase == heador the roster is touched. Every push-on-main run failed it on the twogunbc#11156rows, while themerge_groupruns printed the same rows and ended ADMITTED. That product is Namespace wave admission: the owner's merge_group run owes its consumed rows' deletion follow-up (carrier for the push-on-main cut) #11250's subject, not this PR's.An earlier revision of this body said "exactly one" and "nothing else is push-unique". That was a static reading of the workflow, which cannot see a phase whose verdict depends on the event; the landing census corrected it to the two above. Everything else matched on the observed runs:
heal-generated-artifactsruns onpull_requestonly, and was skipped on every observed run.So the push-on-main run cannot be cut until both products live elsewhere. This PR moves the first; #11250 moves the second; the cut itself is PR 2.
What changes (propositions unchanged, producers re-sourced)
RequiredCiSucceededandDefaultBranchRevisionObservedstay one proposition each, andadmit_fleet_revision's exact-revision join is unchanged. Only their producers gain a second binding.gunbc.fleet_revision_acceptanceaccept_required_ci_merge_group_runs: CI success for R, read from the floor'smerge_groupruns on R. Checks run in this order:RequiredCiMergeGroupRunsTruncated.merge_grouprun refuses asRequiredCiRunsNotEventScoped. This establishes what the response contains, not whether the request carried the selection.RequiredCiMergeGroupRunAbsent.run_attempt > 1refuses asRequiredCiRunAttemptHistoryUnestablished. The list carries only each run's latest attempt, so an earlier failure, or a later cancel hiding one, would otherwise vanish. This is decided before non-verdict snapshots drop.RequiredCiContradictoryRuns, carrying both id sets. Only failures refuse asRequiredCiMergeGroupRunsNotSuccess.WorkflowRuncarries no repository members, so this producer does not repeat the old producer's repository and head-repository checks per run. Its repository warrant is the requestadmit_fleet_desired_from_push_wetaddresses togunbc.repository. A bare caller-suppliedWorkflowRunListdoes not independently establish provenance.extdeps.github.workflow_runsListForRefgains GitHub'seventquery input. The admission read passesmerge_group.gunbc.pr_base_freshnesspull_request_run_started_atpassespull_request, which is what its name always meant.extdeps.transports.restreplay fixtures match on an input digest the host computes from per-parametervalue_hashlimbs (content_hash_service_inputs), which.dagcannot author.merge_groupruns is indistinguishable to the response guard.event=merge_grouppasses and removing or misbinding it is discriminated at that boundary. A digest helper, or a declared harness, does not close it.observe_default_branch_push: the branch fact from the push event itself (ref == refs/heads/<default branch>, repository, decodedafter). No run of anything is consulted.extdeps.github.push_eventPushRefUpdate:ref,afterandrepository.full_nameof the cited webhook payload.gunbc.fleet_desired_admission:admit_fleet_desired_from_push_wetreads the payload, judges the branch fact, then readsgithub.WorkflowRuns.ListForReffor R and runs the fold.fleet_desired_actuate_accepted_wet, so both routes share it byte-for-byte.gunbc.fleet_desired_admission_workflow:push: branches [main];github.event_name;GITHUB_TOKEN, and the jobactions: read.Expected refusal on pushes without queue evidence
A push whose revision has no qualifying
merge_grouprun refuses withRequiredCiMergeGroupRunAbsent: "no qualifying merge-group run of the required floor was observed for revision R in the complete queried result". An operator's admin-bypass merge or a direct push is one scenario that produces that absent evidence. The refusal reports the absence and never diagnoses a cause.During the transition, the
workflow_runroute can still admit such a revision once its push-on-main floor goes green. After PR 2 it cannot. A re-run merge_group landing also refuses (RequiredCiRunAttemptHistoryUnestablished) until attempt history is joined; the fleet advances on the next landing.Transition (accepted by the lane manager)
Both routes stay live between this PR and PR 2, so each queued landing runs two admission jobs. The CAS makes the second one
AlreadyConverged. Runner claims are briefly up, not flat. PR 2 lands once three live landings have admitted through the push route. It cuts the witnesses push trigger formainand deletes theworkflow_runroute in the same change.Live evidence: three queue landings
Each landing is a merge_group run and a push-on-main run on the same sha.
d7b7ab963b747abda6ae1af6merge_groupruns, and the fold refuses any other event.Witnesses
dag/test/claim/fleet/fleet_desired_merge_queue_admission_witness_test.dagexercisesfleet_desired_accepted_from_push, the same composition the wet entry runs.merge_grouprun;merge_grouprun;merge_groupsuccess with a push to another ref;after.a_qualifying_success_beside_a_push_run_refuses_as_an_unscoped_read;a_rerun_success_whose_earlier_attempt_is_unobserved_refuses(same run, different attempt);a_later_cancelled_attempt_is_judged_before_non_verdicts_are_dropped;the_absent_unconcluded_and_unscoped_refusals_claim_only_what_they_establish, covering the three refusal texts.Executed: the original 19 rows are
planned-and-passedon required floor run 34740987623. The rows added for the hold repairs run on this head's floor.Receipts
This change touches
dag/gunbc,dag/extdeps, onedag/testwitness file, and the generatedfleet-desired.yml. That it adds no compiler source does not by itself establish that every downstream composition receipt stays current for the added test declarations. No such receipt is claimed here.🤖 Generated with Claude Code
https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X