Skip to content

Restore the corpus: the two arms #8701 added and its consumer never got - #8744

Merged
gunbai-bot[bot] merged 1 commit into
mainfrom
session/smart-ram-730-fleet-arms
Aug 21, 2026
Merged

gunbai-bot[bot] merged 1 commit into
mainfrom
session/smart-ram-730-fleet-arms

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Main has been red since 05:26 UTC. Every phase that resolves the corpus refuses:

dag/gunbc/fleet_desired_admission.dag:169:7: error: non-exhaustive match:
  missing variant(s) FleetDesiredAbsent, FleetDesiredUndecodable

#8701 (73c62cad34, merged 05:23:55Z) split FleetDesiredRevision from two variants into four and did not update fleet_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

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 }

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 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:

  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, 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 with tail, 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.

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
gunbai-bot Bot merged commit 608248c into main Aug 21, 2026
1 check passed
@gunbai-bot
gunbai-bot Bot deleted the session/smart-ram-730-fleet-arms branch August 21, 2026 07:44
gunbai-bot Bot pushed a commit that referenced this pull request Aug 21, 2026
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
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.
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