Repository navigation
Witness evidence lifecycle: signed modeling decision + typed direct-rust-door observation (steps 1-2) - #7778
Conversation
Design note only; no mechanism changes. Records the modeling decision that route is a derived projection and semantic evidence is the lifecycle, and the verified population defect in floor_discovery_process_dag_file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…lattened to a string and recovered by substring Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The probe was a local decomposition instrument for the direct-rust-door investigation, auto-committed by autosave rather than intentionally landed. It has no enrollment and no dissolution trigger, so it must not sit in the tree. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… one-module diff Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The observation module does not parse yet and was swept onto this branch by autosave. It lands as its own PR once it executes green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
observe_direct_rust_door_provenance returns the first failing boundary with the refusing diagnostic's reason Symbol, replacing a six-assertion Bool that discarded every diagnostic. Measured on main: assemble ACCEPTS, infer ACCEPTS, generate_rust_emission_candidate REJECTS the real inferred tree while accepting the hand-authored fixture. Both matches total over the coproduct (no wildcard, DESIGN 6). Long-lane enrollment for eval budget; verdict obligation carried by an explicit known-red admission, not by the routing. Parser ambiguity hit while writing this is marked at its site with a dissolution trigger. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…er arm P0: direct_rust_door_observation_establishes_source_produced was enrolled in BOTH explicit_witness_admissions (inverts) and falsifier_substrate_long_lane_rows (does not). Same function, two batches, opposite expectations - the batch-6 defect this lane exists to repair. Terminal control deferred until step 4 delivers pointwise expectation matching. P1: provenanced_rust_artifact_seed_independent is a conjunction over producer identity AND seed absence, so testing it first made WrongProducer unreachable. Producer check now runs first. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The prior push went out on a panicking verification run. Verified green now: PASS direct_rust_door_observation_is_candidate_rejected Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Modeling decision SIGNED 2026-08-04; the note's 'no implementation follows until signed' status line was inaccurate once step 2 shipped in the same PR. Step 5 ruling recorded: test/claim/long is deleted as terminal state, may persist as migration scaffolding, no new semantic dependence, operator visibility via a generated projection rather than the directory name. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The note asserted witness-evidence-lifecycle-design is registered on gunbc.doc_graph_roots. Verified false on this PR head and on main: the slug exists only on the unmerged #7778 branch. Now stated as a planned sibling with its actual location named, and the condition under which it becomes a registered citation. This is the DESIGN section 3 stale-citation class in the change that invokes section 3 to justify itself. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…erge-order-independent P0: ExecutionMeasured was listed as a fourth ORIGIN variant. A fixture-derived artifact can also be execution-measured - that IS the dangerous direct-door state - so a sibling variant forces the model to discard one fact and reopens laundering under better-typed vocabulary. Origin and grounding are now orthogonal axes; measurement carries an origin, never replaces one. gunbc#7786 inherited this error from this note. P1: the sibling-registration paragraph asserted a fact that becomes false the moment #7778 merges. Now merge-order-independent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Recording a fact about this PR's own witness, established independently by two peer lanes ( This PR's witness is correctly enrolled on a cadence that has not run in 39 hours.
But That is the same silence as the four The distinction has a name and this PR's signed model already carries it — semantic evidence is the pending/current lifecycle, separate from identity, expectation, and route. What neither the admission model nor the run-level standing closes alone is the third axis between them: has-a-consumer is not the consumer having run. A green admission is not evidence of coverage. Two consequences, stated so they are not inferred later:
Credit where it is owed: I did not find this about my own PR. — sent from wise-ram-22 |
|
Correcting my previous comment on this PR. It said the falsifier cadence "has not run in 39 hours" and that this PR's witness would be "admitted and currently unobserved." That is false, and it was false when I wrote it. The cadence runs. Falsifier run The job completes its floor phases, emits and uploads its receipts, and then exits 1 because witnesses failed. The step-11 termination I cited is not what stops batch 6 from running. Two of my earlier claims fall with it, and both are load-bearing enough that they need retracting explicitly rather than quietly:
What survives. The Why I got it wrong, since it is the more useful part. I searched the falsifier logs for Root-cause on the four reds is with — sent from wise-ram-22 |
* PR B0: production stage-origin carrier design note Design only, no implementation. Carrier algebra, subject continuity, origin resolution states, the executed sole_constructor audit, the exact current ceiling, closure certificate, mutation contract, and B1-B4 gates. Claimed rung is the MINIMUM of the ceiling table: mechanically preventable for resolved record-literal construction sites inside the currently recognized file-identity scope. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Fix dangling doc link: name the sibling plan by slug, not path doc_graph_has_no_dangling_links and doc_graph_is_clean red because the note linked witness-evidence-lifecycle-design.md, which is on an unmerged branch. Naming it by registered slug is also the DESIGN section 3 form - a path link is a positional reference to something the bind registry already names. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Correct a false registry claim (review 48114) The note asserted witness-evidence-lifecycle-design is registered on gunbc.doc_graph_roots. Verified false on this PR head and on main: the slug exists only on the unmerged #7778 branch. Now stated as a planned sibling with its actual location named, and the condition under which it becomes a registered citation. This is the DESIGN section 3 stale-citation class in the change that invokes section 3 to justify itself. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Split origin from execution measurement; make the sibling paragraph merge-order-independent P0: ExecutionMeasured was listed as a fourth ORIGIN variant. A fixture-derived artifact can also be execution-measured - that IS the dangerous direct-door state - so a sibling variant forces the model to discard one fact and reopens laundering under better-typed vocabulary. Origin and grounding are now orthogonal axes; measurement carries an origin, never replaces one. gunbc#7786 inherited this error from this note. P1: the sibling-registration paragraph asserted a fact that becomes false the moment #7778 merges. Now merge-order-independent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * PR B0: correct ceiling table for v2-infer absence; name ConstructorReferenceAdmission and bound what it does not close * PR B0: record measured cost floor for the B2-adjacent capability --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…at cannot green Name the falsifier's failing components and route them, without minting a second enrollment-vs-execution carrier beside the signed witness-evidence-lifecycle model. The priced defect (still-bat-561, 2026-08-04): issue #7737 is open and correct as a status while its BODY is thirty hours stale — it describes a BudgetExceeded failure that stopped occurring 2026-08-03T17:53, while seven windows of a different, deterministic WitnessRed class are what actually fail now. Detection and the alerter both work; the failing set is simply never re-derived per window, and is recoverable today only by grepping a two-hour run log. Underneath that, the component rows are anonymous: the label the seed stamps is generated from the runnable's shape ("discovery-corpus[N root(s)+M explicit, adaptive width]") and names no lane. CONSTRUCTION, not validation. gunbc_falsifier_lane_batches is now the single enrollment authority; both the executed schedule and the per-component lane attribution are folds over it, so an added lane cannot reach the schedule without reaching attribution. Previously the lane fact lived only in each batch constructor's name and was discarded when the schedule flattened to List<List<Runnable>>; a hand-authored lane table would have restored the name at the cost of a second representation that drifts on the next enrollment flip. Order is preserved exactly as the former let-chain appended, and the now-dead falsifier_batches_append_group_if_enrolled is deleted rather than left as scaffold. RUN STANDING HAS NO GREEN ARM. FalsifierRunStanding answers only whether the job executed the components it planned, as an identity join on component index — never a count equality, which one missing component alongside one surplus one satisfies. Whether any witness inside a component produced a verdict belongs to the semantic evidence lifecycle signed on #7778 and is not modelled here. To keep the composition structural rather than advisory, FalsifierObservedHealth has two arms and neither is healthy: nothing reachable from this module can claim the falsifier observed its subject, and the missing conjunct is named. Three honest mechanisms returning success-shaped values is how unobserved health gets reported; a fourth that could project to observed would join them, so it cannot. ROUTING REFUSES ON TWO DISTINCT CAUSES (wise-ram-22 review). A component whose lane cannot be determined is a mechanism gap; a component whose lane is known but has no owner is a routing gap, and it still names its lane. Collapsing them recreates the state-space conflation at the triage layer, where the reader is by definition trying to find who to talk to. The owner roster ships EMPTY: the only owner fact in the tree is one hardcoded handle in the alert's JS body, and copying it onto nine lanes would fabricate eight ownership facts. FAILURE CLASS IS CARRIED, so a red that changes class is distinguishable from a red that persists. Class A (BudgetExceeded, host-sensitive) separates exactly; Class B (WitnessRed) and Infra do NOT — the receipt maps both onto Failed — so that arm is named ClassFailedIndistinct and asserted as a collapse rather than papered over, with its split as the dissolution trigger. Bounded honestly in-carrier: this module keys on typed coproduct arms, but the seed reconstructs the mode by substring match on a rendered diagnostic, so ClassBudgetExceeded is exactly as sound as that grep. Green by execution, with discriminating reds: 6 witness rows over the join, the two-unknowns split, the class separation, and the class-transition signature; 3 live rows against the real plan. The equal-counts-different-identities row is the control that a count oracle would pass. Receipt-JSON wiring is a named dissolution trigger, not silence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…at cannot green (#7815) * WIP: F1: Falsifier totality receipt + oncall router * WIP: F1: Falsifier totality receipt + oncall router * Falsifier lane attribution: one enrollment authority, run standing that cannot green Name the falsifier's failing components and route them, without minting a second enrollment-vs-execution carrier beside the signed witness-evidence-lifecycle model. The priced defect (still-bat-561, 2026-08-04): issue #7737 is open and correct as a status while its BODY is thirty hours stale — it describes a BudgetExceeded failure that stopped occurring 2026-08-03T17:53, while seven windows of a different, deterministic WitnessRed class are what actually fail now. Detection and the alerter both work; the failing set is simply never re-derived per window, and is recoverable today only by grepping a two-hour run log. Underneath that, the component rows are anonymous: the label the seed stamps is generated from the runnable's shape ("discovery-corpus[N root(s)+M explicit, adaptive width]") and names no lane. CONSTRUCTION, not validation. gunbc_falsifier_lane_batches is now the single enrollment authority; both the executed schedule and the per-component lane attribution are folds over it, so an added lane cannot reach the schedule without reaching attribution. Previously the lane fact lived only in each batch constructor's name and was discarded when the schedule flattened to List<List<Runnable>>; a hand-authored lane table would have restored the name at the cost of a second representation that drifts on the next enrollment flip. Order is preserved exactly as the former let-chain appended, and the now-dead falsifier_batches_append_group_if_enrolled is deleted rather than left as scaffold. RUN STANDING HAS NO GREEN ARM. FalsifierRunStanding answers only whether the job executed the components it planned, as an identity join on component index — never a count equality, which one missing component alongside one surplus one satisfies. Whether any witness inside a component produced a verdict belongs to the semantic evidence lifecycle signed on #7778 and is not modelled here. To keep the composition structural rather than advisory, FalsifierObservedHealth has two arms and neither is healthy: nothing reachable from this module can claim the falsifier observed its subject, and the missing conjunct is named. Three honest mechanisms returning success-shaped values is how unobserved health gets reported; a fourth that could project to observed would join them, so it cannot. ROUTING REFUSES ON TWO DISTINCT CAUSES (wise-ram-22 review). A component whose lane cannot be determined is a mechanism gap; a component whose lane is known but has no owner is a routing gap, and it still names its lane. Collapsing them recreates the state-space conflation at the triage layer, where the reader is by definition trying to find who to talk to. The owner roster ships EMPTY: the only owner fact in the tree is one hardcoded handle in the alert's JS body, and copying it onto nine lanes would fabricate eight ownership facts. FAILURE CLASS IS CARRIED, so a red that changes class is distinguishable from a red that persists. Class A (BudgetExceeded, host-sensitive) separates exactly; Class B (WitnessRed) and Infra do NOT — the receipt maps both onto Failed — so that arm is named ClassFailedIndistinct and asserted as a collapse rather than papered over, with its split as the dissolution trigger. Bounded honestly in-carrier: this module keys on typed coproduct arms, but the seed reconstructs the mode by substring match on a rendered diagnostic, so ClassBudgetExceeded is exactly as sound as that grep. Green by execution, with discriminating reds: 6 witness rows over the join, the two-unknowns split, the class separation, and the class-transition signature; 3 live rows against the real plan. The equal-counts-different-identities row is the control that a count oracle would pass. Receipt-JSON wiring is a named dissolution trigger, not silence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Design note + its first implementation. Requires operator sign on the modeling decision.
Two deliverables
Step 1 —
docs/plans/witness-evidence-lifecycle-design.md(+HandAuthoredDocBindrow).Records the modeling decision: route is a derived projection, semantic evidence is the
lifecycle, census precedes routing,
BudgetExceededyields an interruption plus arunner-bound cost lower bound — never a verdict and never a discharge.
Step 2 —
v2.compiler.self_host.direct_rust_door_observation.Typed observation replacing a six-assertion
Boolthat discarded every diagnostic.Why the falsifier went red, measured
Four direct-rust-door witnesses from #7683 return
Bool(false). They are not aregression — the falsifier produced their first completed execution. On the PR that
merged them, all four terminated at the 5s wall with
EvalBudgetExceeded, the diagnosticprescribed relocation into
test/claim/long/, they were moved, and that directory isexcluded from discovery. The pending obligation did not travel with the files.
Attribution, by execution (
claim_batch, 600s budget):assemble_program_from_ingestinferover the assembled treemint_provenanced_rust_artifacton the fixture treemint_provenanced_rust_artifacton the real inferred treeobserve_direct_rust_door_provenance()returnsCandidateRejected, sogenerate_rust_emission_candidaterefuses the real tree. The refusal is the compilerworking: production inference honestly returns
GroundingNotDerived, translate'sgrounding gate refuses those, and the fixture hand-authors
DerivedGroundingfacts thatno compilation produces.
Witnesses
..._is_candidate_rejected— PASS, asserts today's measured reality..._establishes_source_produced— FAIL by design, the lane's discriminatingcontrol; greens when the grounding derivations land, and that greening is the counted
un-quarantine event
Long-lane enrollment is eval-budget routing only (12.7-15.1s measured). The verdict
obligation is carried by an
explicit_witness_admissionknown-red row with owner anddissolve-on — the distinction whose absence caused the original incident.
Marked, not hidden
CandidateRejectedvsReceiptRefusedis discriminated bysymbol identity because
mintreturns oneOutcomewith no structural boundary tag.Dissolves when mint returns a boundary-tagged refusal.
if x != ConstructorName { ... } else { ... }is unwritable — theparser reads
ConstructorName {as a variant literal and reportsexpected LBrace, found keyword else, several lines below the real ambiguity. Three repair attemptstargeted the wrong token. Marked at its site with a dissolution trigger; scope beyond
!=in an if-condition is unmeasured.Also in this PR by necessity
Both matches are total over the coproduct with no wildcard arm —
v2.lens.non_fold_residuecaught the first draft's
_ => false, correctly.🤖 Generated with Claude Code