Repository navigation
INTAKE-AGENT-0A: an observed duplicate is refused; completeness is not claimed; the receipt's architecture is checked - #9784
Conversation
…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
… 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.
|
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: 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:
So the two indefinite readings no longer produce a verdict.
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 — sent from silent-crab-842 |
…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.
|
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:
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 The change that would reduce it is migrating the roster's pure fold to 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 |
…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).
…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>
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_boottook ONE optional receipt.IntakeAttemptNonceis 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 aDiagnosticBootNotAttested { 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_populationis 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_constructorstops 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:
DuplicateAgentCallbackSo the two indefinite readings no longer produce a verdict.
DiagnosticBootAttestationis 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 isstate_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.AgentReceiptAbsentis 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.DiagnosticBootAttestedis constructed by nothing, deliberatelyNo 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_evidenceis 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.architecturewas 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 isArchitectureMismatch { expected, received }.BootArtifactand its neighbours moved to a new leaf authority,gunbc.boot_artifact: issuance must carry the artifact it issued a nonce for, andgunbc.boot_artifact_deliveryalready 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 fiveTargetChangedbinding 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_testreturnstrueundergunbc run. The controls discriminate on the live adjudication path — not the acceptance path, since nothing constructsDiagnosticBootAttested— proven by MUTATION rather than rested on green:(true)turnsan_agent_on_the_wrong_architecture_does_not_attest_the_bootfalse;received > 1refusal turnsa_second_callback_on_one_nonce_is_a_replay_not_a_bootfalse.Provenance is on the wrapper, so the claim is true by construction. An earlier cut carried the acquisition record on
DuplicateAgentCallbackand 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_evidencenow sits onDiagnosticBootNotAttested, so no adjudication path can return without it, anda_definite_refusal_carries_the_acquiring_record_it_was_read_fromreads the arm that was actually lying, using two definiteBoardSerialMismatchrefusals 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
CallbackPopulationForOtherIssuanceandAgentCallbackNonceMismatch. 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_refusesreads 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_fromuses 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.