Repository navigation
Restore the corpus: the two arms #8701 added and its consumer never got - #8744
Merged
Merged
Conversation
MAIN HAS BEEN RED SINCE 05:26 UTC. gunbc#8701 (73c62ca, merged 05:23:55Z) split FleetDesiredRevision from two variants into four, adding FleetDesiredAbsent and FleetDesiredUndecodable, and did not update fleet_desired_admission_decide. Every phase that resolves the corpus refuses: dag/gunbc/fleet_desired_admission.dag:169:7: error: non-exhaustive match: missing variant(s) FleetDesiredAbsent, FleetDesiredUndecodable Four lanes found this independently within an hour and all four declined to author the arms; three of them nearly routed it to #8643, which merely last touched the consumer file and widened nothing. THIS IS A HALF-FINISHED IMPROVEMENT, NOT A REGRESSION. The comment directly above the broken match ASKED FOR #8701 -- it names the deficiency (one variant carrying two states with opposite actuations) and states the remedy as "a distinguished observation, not as this arm guessing." #8701 delivered exactly that. So the wall fired correctly, one merge too late, and reverting would remove the improvement rather than the defect. WHAT THESE ARMS SETTLE, AND WHAT THEY DELIBERATELY DO NOT. Undecodable refusing is DERIVED, not chosen: gunbc.fleet_main_revision's own declaration says "the ref exists and is garbage -> alarm; never write over it". The cause is distinct from Unobserved's, honoring that authority's insistence that the two never fold because their remedies differ. Absent is different, and this is the part no lane had named. FleetDesiredAdmissionOutcome is exactly AdmissionAdvanceAuthorized { from: GitObjectId, to: GitObjectId } AdmissionRefused { cause: String } and the authority says Absent is the ONE observation licensing creation rather than an advance. AdmissionAdvanceAuthorized structurally requires a `from` -- precisely what Absent reports does not exist. #8701 widened the OBSERVATION coproduct to make first creation expressible and did not widen the DECISION coproduct it feeds, so the correct arm is not merely undecided, it is UNREPRESENTABLE. This arm therefore refuses with a cause that states the gap rather than pretending refusal is the answer. Both arms together reproduce this function's pre-#8701 semantics EXACTLY, since both states were previously folded into FleetDesiredUnobserved, which refuses. So this restores the corpus and captures none of #8701's benefit: the distinguished observation now exists and is still not acted on. That is honest as an interim and wrong as a destination, and the site says so. No wildcard. A wildcard would re-collapse the exact distinction #8701 was made to draw, which is the empty-observation narrow the surrounding prose calls out with the fleet as blast radius. TRIGGER, two parts, both fleet convergence's and neither this change's: (1) widen FleetDesiredAdmissionOutcome with a creation variant carrying no `from`; (2) decide whether an unadvertised ref licenses a first admission. The Absent arm and its note retire together when both land. VERIFIED BY EXECUTION, both arms, one dispatch, same binary and corpus: ARM1_RED_unfixed_from_main: absent_arms_present=0 result=non-exhaustive match: missing variant(s) FleetDesiredAbsent, FleetDesiredUndecodable ARM2_GREEN_with_fix: absent_arms_present=1 result=CallContractMismatch The green arm's CallContractMismatch is an ARGUMENT error, which is downstream of resolve -- so resolve succeeded. The only variable between arms is the two arms themselves. Stated because it nearly went unstated: two earlier attempts at this measurement failed, both in the direction that flattered the patch. The first used `git show origin/main:` inside the runner, which has no such ref, so the red control silently never executed. The second truncated with `tail`, cutting the red arm out of the capture. The red arm runs first, so truncation eats it and setup failures abort it while the green arm proceeds normally -- the bias is structural, not luck. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 21, 2026
The prior CI failure on this PR was entirely main's: PR #8701 (merged 05:23Z) split FleetDesiredRevision into four variants without updating fleet_desired_admission_decide's match, redding main 05:26-07:44Z. #8744 fixed it after this PR's CI run had already evaluated the merge ref against the broken state. No changes needed on this branch.
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 21, 2026
… refusing arms #8744 landed the minimal unblock for the same red while this PR was in review: two arms added to fleet_desired_admission_decide, both refusing. It touched only dag/gunbc/fleet_desired_admission.dag (+34 lines) and added no witness claim over either new arm. Conflict resolved toward this branch, and the resolution is a supersession rather than a preference. #8744's FleetDesiredAbsent arm states the open item in its own cause string: "gunbc.fleet_main_revision states this is the one observation that licenses CREATION rather than an advance, but FleetDesiredAdmissionOutcome cannot express a creation: AdmissionAdvanceAuthorized structurally requires a `from`, which is exactly what this observation reports does not exist. Refusing here preserves the pre-split behavior of this consumer EXACTLY ... and settles nothing." That is precisely what this branch closes: the outcome carries a GitRemoteRefExpectation, so creation becomes expressible, and the four-way decision moves to gunbc.fleet_main_revision fleet_desired_advance_expectation so this consumer stops being a second decision site at all. Both of #8744's arms are therefore subsumed -- its undecodable refusal survives in fleet_desired_admission_expectation_refusal_cause with equivalent remedy-bearing wording, and its absent refusal is replaced by the authorized creation it says it could not express. Verified nothing else of #8744 is dropped: the diff from the merge base is confined to the one file and to the region this branch rewrites.
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 21, 2026
gunbc#8744 restored the corpus by answering the two FleetDesiredRevision variants the #8701 split added, and it was right to land as fast as it did -- main had been refusing during preparation for over two hours, so nothing anywhere was executing. But it was a one-file compile fix, and that leaves the two most dangerous inputs to an ACTUATOR decided by arms nothing runs. A repaired build acquires an untested arm exactly this way: the resolve is green, so the gap looks closed. This PR previously carried its own edit to the same arms, reached independently before #8744 existed. That half is now redundant and is DROPPED rather than reconciled -- #8744's version is on main, its Absent reasoning is mechanically sharper than mine was (AdmissionAdvanceAuthorized structurally requires a `from`, which is exactly what the observation reports does not exist), and two edits to one file answering one question is the fork this repository spends its time removing. What survives is the half main did not get. The rows do not restate the arms. They assert the two causes are DISTINCT, each carrying its own remedy and neither carrying the other's, which is the property the four-way split exists to buy and the one a shared or copied cause would silently give back. Asserting only "refused" would pass against a single collapsed message, so each row also asserts the ABSENCE of its sibling's wording. 3/3 green, including the pre-existing unobserved row. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012q31BK3okLA8vG4kdTWtBf
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 21, 2026
…fore finalizing R3 fix
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 21, 2026
Main added exactly the two arms I had added locally as a holding action, but on the owning path and with the semantic decision made by whoever owns fleet admission rather than by me. Main's version wins on authority, not on content. Recut: 68 qualified, 0 refused. Imports tree-wide: 0.
gunbai-bot Bot
added a commit
that referenced
this pull request
Aug 21, 2026
…ision site — closing what #8744's unblock explicitly left open (#8746) * Close the fleet-desired admission gate over all four observations by consuming the authority's own expectation seam (main floor red 11 commits) `gunbc.fleet_desired_admission` `fleet_desired_admission_decide` matched `FleetDesiredRevision` directly, over the two variants that type had when it was written. #8701 split it into four -- "FOUR OBSERVATIONS, FOUR REMEDIES" -- and the match went non-exhaustive: dag/gunbc/fleet_desired_admission.dag: error: non-exhaustive match: missing variant(s) FleetDesiredAbsent, FleetDesiredUndecodable The required floor has refused on every main push since (measured: runs 32454040817..32454156307, `floor refused: subject=aa834da55e73187c modules_resolved=3762 modules_excluded=4`), so every PR inherits the red and eleven merged over it. THE REPAIR IS NOT TWO MORE ARMS HERE. `gunbc.fleet_main_revision` publishes `fleet_desired_advance_expectation` for exactly this question, and its own header already names the failure mode a second matcher creates: "a consumer holding only `none` cannot choose, so it would have to rematch the original observation, putting a second decision site beside this one". The gate now consumes that seam, so a fifth observation is a change in one place. What stays local is only the rendering of each typed refusal into this gate's cause string -- a fact about this consumer's diagnostics, not about the observation. `AdmissionAdvanceAuthorized` consequently carries a `GitRemoteRefExpectation` rather than a `from: GitObjectId`. The old field could only be spelled for the one observation yielding an oid, which made ref CREATION -- the other write the authority admits -- unrepresentable in this outcome type. The authorized push is now rendered from one `GitRemoteRefCasRequest` through `git_remote_ref_lease_word` / `git_remote_ref_cas_refspec`, which is the pairing that row's own next-trigger note asks its first production consumer to hold: this gate never spells a lease or a refspec of its own, so it cannot pair a lease naming one ref with a refspec moving another. Creation renders as git's documented empty `<expect>`, so it stays a compare-and-swap rather than an unconditional push. Behaviour preserved: an unobserved prior still refuses and is never read as an absent one -- that distinction is now the authority's rather than this arm's inability to tell them apart. Two new claims in test.claim.fleet_desired_admission_witness_test, each discriminating on the arm that did not exist before: - an absent ref authorizes a creation expecting ABSENCE (not an oid); - an undecodable advertisement refuses with the remedy-bearing wording, and the claim asserts the unobserved arm's wording is NOT what fired, so the two refusals stay distinguishable. Plus a creation-push claim pinning the empty-lease spelling. * Hoist the discarded-`from` note to module-item grain (§4c: annotations do not sit in a declaration body) The floor refused this branch during PREPARATION with five diagnostics, all on one comment I had placed inside the admitting arm of fleet_desired_admission_decide: dag/gunbc/fleet_desired_admission.dag:239..243: error: source annotation sits inside a declaration body. Only module-item grain is modeled; move it above the declaration it describes. DESIGN §4c admits only standalone leading `//` blocks attached to module-scope declarations. The note is moved verbatim in substance into the function's leading annotation block, where it reads as a statement about the arm below rather than a line inside it. WHY THE EARLIER RECEIPT DID NOT CATCH THIS, since it is the interesting half: this branch had 16/16 claims PASS under claim_batch both before and after the merge, and claim_batch does not enforce annotation grain -- only the floor's strict preparation does. A refusal at preparation means ZERO witnesses execute, so a green claim run is not evidence about this class at all. Verified this time with the check that does discriminate, `gunbc compile --entry <file>` counting `source annotation` diagnostics: 5 on the refused revision, 0 on both touched files now. --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 21, 2026
#8746 makes ref CREATION expressible and retires the second decision site, closing what #8744 explicitly left open. This is the third main change to this lineage that this branch has absorbed -- the two-arm consumer, then #8744's arms, now the creation path -- and each time the branch took main's version on authority rather than carrying its own. Both files taken whole from main and recut (80 and 116 qualified, 0 refused), then the post-integration fixup pass. No mirrors involved. Verified: imports tree-wide 0, unmerged 0, both entries resolve clean.
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.
Main has been red since 05:26 UTC. Every phase that resolves the corpus refuses:
#8701 (
73c62cad34, merged 05:23:55Z) splitFleetDesiredRevisionfrom two variants into four and did not updatefleet_desired_admission_decide. Four lanes found this independently within the hour; three of them nearly routed it to #8643, which merely last-touched the consumer file and widened nothing. All four declined to author the arms, which is why this comes from the coordinator they routed it to.This is a half-finished improvement, not a regression
The comment directly above the broken match asked for #8701. It names the deficiency — one variant carrying two states with opposite actuations — and states the remedy as "a distinguished observation, not as this arm guessing." #8701 delivered exactly that. The wall fired correctly, one merge too late. Reverting would remove the improvement rather than the defect.
What these arms settle, and what they deliberately do not
Undecodablerefusing is derived, not chosen.gunbc.fleet_main_revision's own declaration says "the ref exists and is garbage → alarm; never write over it." The cause is distinct fromUnobserved's, honoring that authority's insistence that the two never fold because their remedies differ.Absentis different, and this is the part no lane had named.FleetDesiredAdmissionOutcomeis exactly:The authority says
Absentis the ONE observation licensing creation rather than an advance.AdmissionAdvanceAuthorizedstructurally requires afrom— precisely whatAbsentreports does not exist. #8701 widened the observation coproduct to make first creation expressible and did not widen the decision coproduct it feeds. So the correct arm is not merely undecided, it is unrepresentable. This arm refuses with a cause stating that gap rather than pretending refusal is the answer.Both arms together reproduce this function's pre-#8701 semantics exactly, since both states were previously folded into
FleetDesiredUnobserved, which refuses. So this restores the corpus and captures none of #8701's benefit: the distinguished observation now exists and is still not acted on. Honest as an interim, wrong as a destination, and the site says so.No wildcard. A wildcard would re-collapse the exact distinction #8701 was made to draw — the empty-observation narrow the surrounding prose calls out with the fleet as blast radius.
Trigger
Two parts, both fleet convergence's, neither this change's:
FleetDesiredAdmissionOutcomewith a creation variant carrying nofrom.The
Absentarm and its note retire together when both land.Verified by execution — both arms, one dispatch, same binary and corpus
The green arm's
CallContractMismatchis an argument error, downstream of resolve — so resolve succeeded. The only variable between arms is the two arms.Two earlier attempts at this measurement failed, both in the direction that flattered the patch, and it is worth stating rather than quietly presenting the third: the first used
git show origin/main:inside the runner, which has no such ref, so the red control silently never executed; the second truncated withtail, cutting the red arm out of the capture window. The red arm runs first, so truncation eats it and setup failures abort it while the green arm proceeds normally. That bias is structural, not luck.Scope
One file, +34/−0, purely additive. Blocks #8597 (five of six phases green), #8699 (receipt green, floor inherited), and #8726's cause B, which cannot be built or validated while the corpus will not resolve.