Skip to content

INTAKE-AGENT-0A: an observed duplicate is refused; completeness is not claimed; the receipt's architecture is checked - #9784

Merged
briansrls merged 8 commits into
mainfrom
session/silent-crab-842-intake-agent-0a
Aug 31, 2026
Merged

briansrls merged 8 commits into
mainfrom
session/silent-crab-842-intake-agent-0a

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

INTAKE-AGENT-0A, the slice covering ruling 3's exit point 3 (replay and duplicate-callback refusal) and the wrong-architecture half of exit point 4. Both invalid states were authorable and silently attested.

The title's original claim — that the nonce's one-time-ness is checked — is withdrawn. What is checked is that an observed duplicate is refused. One-time-ness itself is a property of a closed callback population, and this repository has nothing that can close one; see What is definite and what is not, below. The body promised more than the diff delivers, and a merged body that overclaims outlives the diff.

Duplicate callback

attest_diagnostic_boot took ONE optional receipt. IntakeAttemptNonce is documented as a one-time callback token, but an optional cannot express the state that makes it one-time — a second callback bearing the same nonce — so a replay was not merely unrefused, it was unrepresentable.

It now takes the list of callbacks observed for one issuance. More than one is DuplicateAgentCallback { received } on a DiagnosticBootNotAttested { cause, population_evidence } wrapper, and a duplicate is refused even when the two callbacks are byte-identical: picking one of two to honour is an absorbing fallback (DESIGN §5) — widening on ambiguity instead of stopping the line. Cardinality is read before any callback is inspected, because a replay is a fact about the population and not about any one receipt.

What is definite and what is not

Review 57762 and the reviewing authority independently found that the list's completeness was still the caller's assertion: observed_agent_callback_population is publicly callable and accepts the callbacks and the acquisition evidence independently, so a caller handed [r1, r2] can pass [r1] with the evidence for both. sole_constructor stops the record literal being written elsewhere; it does not constrain who calls the mint or where they got the list.

The knife is monotonicity under hidden callbacks — whether a reading survives every completion of the population:

observed conclusion survives completion?
more than one DuplicateAgentCallback yes — a hidden sibling only makes it more true
exactly one, mismatching field refusal yes — any hidden sibling would itself be a duplicate, also a refusal
exactly one, matching — no — a hidden sibling makes it a replay
none — no — a caller can prefilter a real callback to zero

So the two indefinite readings no longer produce a verdict. DiagnosticBootAttestation is three-valued, and the third arm, DiagnosticBootCompletenessUnestablished { observed_callbacks, population_evidence, supporting }, reports what was seen and the record it was seen in. Collapsing it into either neighbour is state_space_conflation: into refusal it reports a boot as failed on a caller's filtering decision; into attestation it reports one as proven on the same.

AgentReceiptAbsent is deleted. Reading "the agent never called back" off a list's length is a claim about the world drawn from a caller's filtering decision. It returns with the producer that can close a population.

DiagnosticBootAttested is constructed by nothing, deliberately

No path in this repository constructs it, and that is a declared terminal state rather than dead code — do not delete it as unreachable. It is the terminal the intake transaction requires, held at its honest arity, declared here so the future producer has one authority to satisfy instead of a shape invented later. population_evidence is on it because the durable-provenance half of the design is already settled.

Its next-rung trigger is the annotation on attest_diagnostic_boot, under RUNG, HONESTLY, and it names a capability, not an artifact: an acquisition producer that closes a population — exact issuance identity, the exact callbacks, evidence derived from that same acquisition rather than passed beside it, and a declared closure boundary or one-shot nonce consumption. Producer identity alone is insufficient: without the closure boundary a producer can mint a singleton after the first callback and accept a second afterwards.

Architecture

IntakeAgentBootReceipt.architecture was carried into the attestation and never compared with anything, so an x86-64 agent callback attested an AArch64 unit's issuance. The architecture is a fact ABOUT the issued artifact, so it lands on the artifact beside the digest that names it, rather than being re-derived from the receipt it is meant to check. Refusal is ArchitectureMismatch { expected, received }.

BootArtifact and its neighbours moved to a new leaf authority, gunbc.boot_artifact: issuance must carry the artifact it issued a nonce for, and gunbc.boot_artifact_delivery already imports the receipt module, so importing back would have closed a cycle. Ordinary single-authority relocation — nothing is defined twice at any point. It produces five TargetChanged binding deltas, adjudicated by five exact (module, declaration, spelling) rows with blast radius 0 and a dissolve-on-merge trigger.

Evidence

Every witness in test.claim.machine_intake_disposition_witness_test returns true under gunbc run. The controls discriminate on the live adjudication path — not the acceptance path, since nothing constructs DiagnosticBootAttested — proven by MUTATION rather than rested on green:

  • replacing the architecture comparison with (true) turns an_agent_on_the_wrong_architecture_does_not_attest_the_boot false;
  • disabling the received > 1 refusal turns a_second_callback_on_one_nonce_is_a_replay_not_a_boot false.

Provenance is on the wrapper, so the claim is true by construction. An earlier cut carried the acquisition record on DuplicateAgentCallback and on the unestablished arm, annotated as "every outcome names the population it was read from" — which was false for the four field mismatches, and the control greened anyway because it only exercised the unestablished path. population_evidence now sits on DiagnosticBootNotAttested, so no adjudication path can return without it, and a_definite_refusal_carries_the_acquiring_record_it_was_read_from reads the arm that was actually lying, using two definite BoardSerialMismatch refusals differing only in their acquisition record.

One nonce constructor was answering for two failures. A population bound to another issuance is an acquisition splice, produced by whoever assembled the input; a callback returning the wrong nonce inside a correctly bound population is agent content. Different producers, evidence locations and remedies, now CallbackPopulationForOtherIssuance and AgentCallbackNonceMismatch. Neither carries the nonce — it is a secret with no place in durable output — so the cause names which comparison failed and the wrapper says where to look.

a_matching_callback_is_unestablished_and_a_wrong_nonce_refuses reads the asymmetry directly: from the same call, differing only in the callback, a match yields Unestablished and a wrong nonce yields a definite refusal. an_outcome_carries_the_acquiring_record_it_was_read_from uses two populations identical in every way except their acquisition record, so it reads the field rather than checking that some constant is present.

Not in this slice

Exit points 1, 2, 5, 6 and 7 (deterministic per-architecture artifacts with content identities, canonical durable receipt bytes and their SHA identity, raw EDAC/RAS capture, local execution without a physical BMC) are untouched here and remain open.

Brian Searls and others added 2 commits August 31, 2026 01:49
…ked, not carried

INTAKE-AGENT-0A (ruling 3 "artifact and callback contract") exit point 3 and
the wrong-architecture half of exit point 4. Both states were authorable and
silently attested.

attest_diagnostic_boot took ONE optional receipt. IntakeAttemptNonce is
documented as a one-time callback token, but an optional cannot express the
state that makes it one-time — a second callback bearing the same nonce — so
the one-time-ness was prose. It now takes the LIST of callbacks delivered to
one issuance: zero is AgentReceiptAbsent as before, more than one is
DuplicateAgentCallback. A duplicate is refused even when the two callbacks are
byte-identical, because the endpoint's one-time-ness is the property under
test and choosing one of two to honour is an absorbing fallback (DESIGN §5):
it widens on ambiguity instead of stopping the line.

IntakeAgentBootReceipt.architecture was carried into the attestation and never
compared with anything, so an x86-64 agent callback attested an AArch64 unit's
issuance. The architecture is a fact ABOUT the issued artifact, so it lands on
IssuedAttemptNonce beside the digest that names that artifact rather than
being re-derived from the receipt it checks.

Both new controls discriminate on the real acceptance path, proven by
mutation, not by green: replacing the architecture comparison with `(true)`
turns an_agent_on_the_wrong_architecture_does_not_attest_the_boot false, and
disabling the duplicate refusal turns
a_second_callback_on_one_nonce_is_a_replay_not_a_boot false. The five
attestation witnesses in machine_intake_disposition_witness_test all return
true unmutated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019fKvi5dnJ8TcE514qbmWTk
…cquisition

The reviewing authority's two construction gaps on INTAKE-AGENT-0A. Both were
fields that were CHECKED without their relationship being CONSTRUCTED, which is
validation standing where construction was available (DESIGN §5).

THE ARTIFACT BINDING. IssuedAttemptNonce carried artifact_digest and
artifact_architecture as sibling fields, so the pair was independently
authorable: an issuance could name an AArch64 artifact's digest beside X86_64,
and an x86 agent repeating that digest passed BOTH checks while the artifact the
digest names is AArch64. It now carries the exact BootArtifact, so digest and
architecture are two projections of one authority and the mismatched pair has
nowhere to be written.

That required gunbc.boot_artifact, an ordinary single-authority relocation:
boot_artifact_delivery already imports machine_intake_receipt, so issuance could
not reach BootArtifact from there without a cycle, and the import graph's one
structural law is acyclicity (§4). Copying the two fields into issuance was the
alternative, and it is the fork §3 forbids -- two places answering "which
artifact is this", free to disagree. The artifact is not a fact about delivery;
delivery is one consumer and issuance is another.

THE SEALED BATCH. Taking List<IntakeAgentBootReceipt> made a duplicate
representable, which is what allowed the replay refusal at all, but left
completeness asserted by the CALLER: a caller handed two callbacks by the
endpoint could pass one, and the attestation would attest a boot whose nonce had
in fact been replayed. The cardinality check was real; the population it counted
was not. The attester now consumes AgentCallbackDeliveryBatch, sole_constructor
and minted in this module, naming the issuance it is the population of and
carrying the digest of the acquiring party's own record. Cardinality is checked
BEFORE any callback is inspected, because a replayed nonce is a fact about the
population and reading a receipt first would let a well-formed one speak for a
batch that should have been refused outright.

RUNG, DECLARED HONESTLY: the seal does not yet establish that the mint's caller
supplied every callback the endpoint received -- no endpoint producer exists
here, so completeness is a claim the acquisition layer makes and this layer
records. That class is MITIGATABLE, strictly better than a caller-shaped list
and strictly weaker than a proof. Next-rung trigger: the callback endpoint
producer, at which point the mint is reachable only from it and completeness
becomes structural.

The duplicate refusal carries acquisition_evidence rather than per-callback
transport identities, which the review suggested: IntakeAgentBootReceipt has no
transport identity, and the fields it does carry are identical across legitimate
duplicates -- the artifact digest especially -- so listing them would be a
nickname for a fact this model does not hold. The evidence ref locates the
record that does hold it. The nonce is never carried; it is a secret.

A batch sealed for one issuance cannot speak for another, with its own control.
All seven attestation witnesses execute and return true.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019fKvi5dnJ8TcE514qbmWTk
@gunbai-bot gunbai-bot Bot changed the title INTAKE-AGENT-0A: the nonce's one-time-ness and the receipt's architecture are checked, not carried INTAKE-AGENT-0A: an observed duplicate is refused; completeness is not claimed; the receipt's architecture is checked Aug 31, 2026
… outcomes, not two

Review 57762 and the reviewing authority found the same thing independently.
observed_agent_callback_population is publicly callable and takes the
callbacks and the acquisition evidence as INDEPENDENT arguments, so a caller
handed [r1, r2] can pass [r1] with the evidence for both. sole_constructor
stops the record literal being written elsewhere; it does not constrain who
calls the mint or where they got the list. The name said "sealed delivery
batch" and the construction did not seal anything, which is a hollow alias:
every downstream reader inherits an assertion the type never held.

The knife is monotonicity under hidden callbacks - whether a reading
survives every completion of the population. received > 1 survives: a hidden
sibling only makes a duplicate more true. A field mismatch survives: any
hidden sibling would itself be a duplicate and also refuse, so every
completion refuses. But one MATCHING callback does not survive - a sibling
turns it into a replay - and neither does zero, because a caller can
prefilter a real callback to zero exactly as easily as a duplicate to one.

So the two indefinite readings no longer produce a verdict.
DiagnosticBootAttestation is three-valued, and
DiagnosticBootCompletenessUnestablished reports what was observed, the
acquisition record it was observed in, and the supporting activity.
Collapsing it into either neighbour is state_space_conflation: into refusal
it reports a boot as failed on a caller's filtering decision; into
attestation it reports one as proven on the same.

AgentReceiptAbsent is deleted. Reading "the agent did not call back" off a
list's length is a claim about the world drawn from a caller's filtering
decision; it returns with the producer that can close a population.

DiagnosticBootAttested is now constructed by nothing. That is a declared
terminal, not dead code: it is what the intake transaction requires, held at
its honest arity so the future producer has one authority to satisfy rather
than a shape invented later. Its trigger names the CAPABILITY, not an
artifact - an acquisition producer that CLOSES a population, with a declared
closure boundary or one-shot nonce consumption. Producer identity alone is
insufficient: without closure a producer can mint a singleton after the
first callback and accept a second afterwards.

Two witnesses changed meaning rather than shape. The empty-population case
asserted AgentReceiptAbsent and now asserts Unestablished naming the
supporting activity; the matching-callback case asserted attestation and now
reads the asymmetry directly - same call, differing only in the callback, a
match yields Unestablished and a wrong nonce a definite refusal. The
provenance control uses two populations identical except for their
acquisition record, so it reads the field rather than checking a constant.
31 witnesses, all green by execution.

Also: five namespace transition admissions for the BootArtifact relocation
into gunbc.boot_artifact. The required run reported FloorClean with the
failing phase namespace-wave-admission at 5 unadjudicated TargetChanged
deltas; the roster is empty after the sixth dissolution and empty is not
permissive. Each row names one exact (module, declaration, spelling) triple,
blast radius 0, dissolving when this PR merges.
@gunbai-bot

gunbai-bot Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

Review 57762's finding is correct and I have reworked rather than defended — the reviewing authority in my side chat reached the same conclusion independently and pushed it further. Pushed on the new head.

The finding: observed_agent_callback_population (was agent_callback_delivery_batch) is publicly callable and takes the callbacks and the acquisition evidence as independent arguments, so a caller handed [r1, r2] can pass [r1] with the evidence for both. sole_constructor stops the record literal being written elsewhere; it does not constrain who calls the mint or where they got the list. The old name asserted a property the construction did not hold.

What I did not do is bind the mint to a producer that does not exist. Instead the outcome type now says only what is definite, and the test is monotonicity under hidden callbacks — whether a reading survives every completion of the population:

  • received > 1 survives: a hidden sibling only makes a duplicate more true.
  • A field mismatch survives: any hidden sibling would itself be a duplicate and also refuse, so every completion refuses.
  • One matching callback does not survive — a sibling turns it into a replay.
  • Zero does not survive — a caller can prefilter a real callback to zero exactly as easily as a duplicate to one.

So the two indefinite readings no longer produce a verdict. DiagnosticBootAttestation is three-valued; DiagnosticBootCompletenessUnestablished reports what was observed, the record it was observed in, and the supporting activity. AgentReceiptAbsent is deleted — reading "the agent did not call back" off a list's length was a claim about the world drawn from a caller's filtering decision.

DiagnosticBootAttested is now constructed by nothing in the repository. That is deliberate and declared, not dead code: it is the terminal the intake transaction requires, held at its honest arity. Its trigger names the capability — an acquisition producer that closes a population, with a declared closure boundary or one-shot nonce consumption, since producer identity alone still lets a producer mint a singleton after the first callback and accept a second afterwards.

The PR title and body claimed one-time-ness is checked. That claim is withdrawn in the body text; what is checked is that an observed duplicate is refused.

31 witnesses green by execution. Two changed meaning rather than shape, and the separate CI red was namespace-wave-admission (floor was FloorClean), fixed with five exact transition-admission rows for the BootArtifact relocation.

— sent from silent-crab-842

Brian Searls added 3 commits August 31, 2026 08:25
…ter is their union

main landed XL-0N's single row (type_reference_declaration_ref relocating to
v1.compiler.infer_env, gunbc#9719) into a roster this branch had reopened
with five rows for the BootArtifact relocation. Neither side supersedes the
other: each row names one exact (module, declaration, spelling) triple with
blast radius 0, and each dissolves when ITS OWN pull request merges. Taking
either side alone would silently drop the other's adjudication and refuse
that PR's deltas as unadjudicated. Both justifications are kept for the same
reason - a row without its reason is unremovable, because nothing states
what its dissolution trigger was.
…is branch stops carrying it

The previous merge kept XL-0N's admission alongside the five BootArtifact
rows because both were live and each dissolves with its own PR. #9719 has
now merged, so main's seventh dissolution removed that row by its own
trigger -- base and head both carry the relocation and no run can produce
its delta. Keeping it here would have been exactly what the roster's rule
forbids: a stale row that refuses every unrelated PR in the repository.

Main's ledger prose is taken whole, including the dissolution note, since
the roster's history is the reason each shrink is removable. The five
BootArtifact rows remain, still dissolving when this PR merges.
The objection is that five admission rows expand hand-written compiler Rust
with none of the required receipts, and that a dissolution condition does
not by itself authorize the growth. Both halves are right as stated, so the
row now carries the measurement in the shape #9436 filed for the 53-row cut.

The load-bearing number: the declaration count is UNCHANGED, 38 on
origin/main and 38 here. No function, type, const, capability or mechanism
is added -- the rows are data consumed by the already-rostered declaration,
from an authored literal with no scan, file read, environment read or
computed predicate. 65 added lines, of which 16 are the justification and 49
are row literals; the one removed line is the const's own empty initializer.

And the rows are not scaffold beside the wall, they are the wall's required
input: the roster refuses a real delta as UNADJUDICATED until its author
adds a row, so a relocation that acyclicity FORCED has exactly one
sanctioned way to land. Declining to author them would not reduce hand Rust;
it would leave the relocation unmergeable. The move that would actually
reduce it -- migrating the roster's pure fold to .dag -- is blocked on
ModuleDeclarationRecord having no .dag carrier, which this module's own
CLASS A justification already names and which authoring one here would fork.
@gunbai-bot

gunbai-bot Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

Review 57801 is right on both halves — the rows do expand hand-written compiler Rust, and a dissolution condition alone does not authorize growth (DESIGN §6). Receipt filed on the roster row itself, in the shape #9436 filed for the 53-row cut, measured rather than argued:

  • git diff --numstat origin/main -- src/v1/stage0/src/namespace_wave_admission.rs → 65 added / 1 removed. Of the added lines, 16 are the justification and 49 are the five row literals; the single removed line is the const's own = &[];, reopened as = &[.
  • grep -cE '^(pub )?(fn|struct|enum|const|static) ' → 38 on origin/main, 38 here. No function, type, const, capability or mechanism is added. The rows are data consumed by the already-rostered NAMESPACE_TRANSITION_ADMISSIONS declaration, from an authored literal with no scan, file read, environment read, or computed predicate. Expansion in maintained lines only.

On the framing: these rows are not a scaffold standing beside the wall, they are the wall's required input. The roster's own rule is that a run carrying a real namespace delta refuses it as UNADJUDICATED until its author adds a row — empty is not permissive. The relocation was forced by §4 acyclicity (issuance must carry the artifact it issued a nonce for, and boot_artifact_delivery already imports the receipt module, so importing back closes a cycle), so it has exactly one sanctioned way to land. Declining to author the rows would not reduce hand Rust; it would leave the relocation unmergeable.

The change that would reduce it is migrating the roster's pure fold to .dag, and that is blocked upstream on ModuleDeclarationRecord / DeclarationIndex having no .dag carrier — which this module's own CLASS A justification already names as its trigger, and which authoring one here would fork away from gunbc.declaration_index_seed_growth. So the honest deferral is to that existing trigger, not a new one.

Each row is stale the moment this PR merges, and a stale row reds every unrelated PR in the repository — so the deletion is enforced by the same wall rather than by anyone remembering. That mechanism is why the count has returned to zero seven times in the ledger above.

— sent from silent-crab-842

Brian Searls added 2 commits August 31, 2026 10:13
…wering for two failures

Two findings from the reviewing authority against the exact pushed head,
both mine.

FIRST, THE ANNOTATION WAS LYING AND THE CONTROL COULD NOT SEE IT. The source
said "every outcome names the population it was read from". It was true of
DiagnosticBootAttested, of DiagnosticBootCompletenessUnestablished, and of
DuplicateAgentCallback -- and FALSE of ArtifactDigestMismatch,
ArchitectureMismatch, BoardSerialMismatch and the nonce refusal, which
returned a cause and dropped the record entirely. The control named
an_outcome_carries_the_acquiring_record_it_was_read_from exercised only the
unestablished path, so it greened while every ordinary singleton refusal
discarded the record. That is this repository's own §5 trap authored by me:
a claim about paths with an oracle blind to those paths.

Fixed structurally rather than by narrowing the comment. population_evidence
now sits on the DiagnosticBootNotAttested wrapper, so no adjudication path
can return without it, and DuplicateAgentCallback drops its own copy -- the
cause carries only what distinguishes it. The new control uses two DEFINITE
mismatch refusals identical in every respect except the acquisition record
they were observed in, which is the arm that was actually lying; a second
control checks the duplicate refusal still locates its record now that the
field moved up.

SECOND, NonceMismatch WAS TWO FAILURES UNDER ONE NAME. It was constructed
both when the supplied population was bound to another issuance -- an
acquisition splice, produced by whoever assembled the input -- and when a
callback inside a correctly bound population returned the wrong nonce, which
is agent content. Different producers, different evidence locations,
different remedies, and one constructor loses exactly the information a
refusal exists to preserve. Now CallbackPopulationForOtherIssuance and
AgentCallbackNonceMismatch. Neither carries the nonce: it is a secret with
no place in durable output, so the cause names which comparison failed and
the wrapper's evidence says where to look. The foreign-population control
and the wrong-callback-nonce control now discriminate the two; under the old
single constructor both greened on either bug.

33 witnesses, all green by execution (PASS=33 FAIL=0).
The helper was named delivered and described as the batch an ENDPOINT would
mint -- the population it actually received, sealed with the digest of its
own record. That is exactly the completeness claim the production type and
the PR body now withdraw, left standing in the test where it would teach the
next reader the withdrawn model. It is observed_population now, and its
annotation says what is true: the callbacks and the record reference are
handed over independently, as they are at every real call site, and nothing
here closes an acquisition or seals anything.

33 witnesses green (PASS=33 FAIL=0).
@briansrls
briansrls merged commit 383879d into main Aug 31, 2026
5 checks passed
@briansrls
briansrls deleted the session/silent-crab-842-intake-agent-0a branch August 31, 2026 13:35
gunbai-bot Bot added a commit that referenced this pull request Aug 31, 2026
…on) (#9820)

The five #9784 rows (BootArtifact/IntakeLinuxEnvironment/IsoImage relocations) were consumed by their own merge and now report stale on every unrelated PR (observed on gunbc#9792 run 33398398650, 5 stale admissions after verdict=FloorClean). Removed by their own dissolve-on trigger; roster returns to empty, fail-closed.


Claude-Session: https://claude.ai/code/session_01QhdaHkmZPoQoeUWz5V2mzF

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Fable 5 <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.

1 participant