Skip to content

Witness evidence lifecycle: signed modeling decision + typed direct-rust-door observation (steps 1-2) - #7778

Merged
briansrls merged 13 commits into
mainfrom
session/wise-ram-22
Aug 4, 2026
Merged

briansrls merged 13 commits into
mainfrom
session/wise-ram-22

Conversation

@briansrls

@briansrls briansrls commented Aug 4, 2026 •

Copy link
Copy Markdown
Contributor

Design note + its first implementation. Requires operator sign on the modeling decision.

Two deliverables

Step 1 — docs/plans/witness-evidence-lifecycle-design.md (+ HandAuthoredDocBind row).
Records the modeling decision: route is a derived projection, semantic evidence is the
lifecycle, census precedes routing, BudgetExceeded yields an interruption plus a
runner-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 Bool that discarded every diagnostic.

Why the falsifier went red, measured

Four direct-rust-door witnesses from #7683 return Bool(false). They are not a
regression — the falsifier produced their first completed execution. On the PR that
merged them, all four terminated at the 5s wall with EvalBudgetExceeded, the diagnostic
prescribed relocation into test/claim/long/, they were moved, and that directory is
excluded from discovery. The pending obligation did not travel with the files.

Attribution, by execution (claim_batch, 600s budget):

Stage Result
assemble_program_from_ingest ACCEPTS
infer over the assembled tree ACCEPTS
mint_provenanced_rust_artifact on the fixture tree ACCEPTS
mint_provenanced_rust_artifact on the real inferred tree REJECTS

observe_direct_rust_door_provenance() returns CandidateRejected, so
generate_rust_emission_candidate refuses the real tree. The refusal is the compiler
working: production inference honestly returns GroundingNotDerived, translate's
grounding gate refuses those, and the fixture hand-authors DerivedGrounding facts that
no compilation produces.

Witnesses

  • ..._is_candidate_rejected — PASS, asserts today's measured reality
  • ..._establishes_source_produced — FAIL by design, the lane's discriminating
    control; 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_admission known-red row with owner and
dissolve-on — the distinction whose absence caused the original incident.

Marked, not hidden

  • Arm-split scaffold: CandidateRejected vs ReceiptRefused is discriminated by
    symbol identity because mint returns one Outcome with no structural boundary tag.
    Dissolves when mint returns a boundary-tagged refusal.
  • Parser defect: if x != ConstructorName { ... } else { ... } is unwritable — the
    parser reads ConstructorName { as a variant literal and reports expected LBrace, found keyword else, several lines below the real ambiguity. Three repair attempts
    targeted 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_residue
caught the first draft's _ => false, correctly.

🤖 Generated with Claude Code

Brian Searls and others added 2 commits August 4, 2026 03:41
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>
@gunbai-bot gunbai-bot Bot changed the title falsifier is red again Witness evidence lifecycle: design note (step 1 of 5, sign required) Aug 4, 2026
Brian Searls and others added 8 commits August 4, 2026 03:44
…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>
@gunbai-bot gunbai-bot Bot changed the title Witness evidence lifecycle: design note (step 1 of 5, sign required) Witness evidence lifecycle: design note + typed direct-rust-door observation (steps 1-2) Aug 4, 2026
Brian Searls and others added 2 commits August 4, 2026 14:28
…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>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 4, 2026 18:50
gunbai-bot Bot pushed a commit that referenced this pull request Aug 4, 2026
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>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 4, 2026
…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>
@gunbai-bot gunbai-bot Bot changed the title Witness evidence lifecycle: design note + typed direct-rust-door observation (steps 1-2) Witness evidence lifecycle: signed modeling decision + typed direct-rust-door observation (steps 1-2) Aug 4, 2026
@gunbai-bot

gunbai-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Recording a fact about this PR's own witness, established independently by two peer lanes (still-bat-561 and merry-raven-690) after the approvals landed. No change is required and none is being pushed — the head is unchanged and the merge bar still holds. But the fact should be on the record at merge time rather than discovered later.

This PR's witness is correctly enrolled on a cadence that has not run in 39 hours.

direct_rust_door_observation_is_candidate_rejected carries a function-grain SubstrateLongLaneRow, resolves to WitnessHasExecutingConsumer with cadence FalsifierSubstrateLongLane, and never reaches any path-policy arm — verified by merry-raven-690 by merging this branch into a disposable worktree at their head. Enrollment is sound.

But FalsifierSubstrateLongLane is nightly falsifier batch 6, and the only step in that job which runs claim_executor is step 11 — which has terminated on nine consecutive scheduled windows, last success 2026-08-03T07:31:05Z. So the witness is admitted and currently unobserved, and both are true at once.

That is the same silence as the four direct_rust_door witnesses this PR exists to explain, reached by a different route. Those four had never produced a verdict and were relocated out of discovery; this one is well-instrumented and will report the moment the cadence recovers. Different defect, identical observable: a witness that looks enrolled and produces nothing.

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:

  • Nobody should read this witness's enrollment as coverage until the falsifier cadence recovers. It is instrumentation that is ready, not evidence that exists.
  • The model's completion criterion is unaffected. It never claimed enrollment implies execution — that separation is the whole point of the signed decision, and this is its first live specimen rather than a counterexample to it.

Credit where it is owed: I did not find this about my own PR. merry-raven-690 established the admission path and the cadence's 39-hour outage; still-bat-561 refined an earlier certification of mine that had implied enrollment meant execution.

— sent from wise-ram-22

@briansrls
briansrls merged commit 631acc9 into main Aug 4, 2026
10 checks passed
@briansrls
briansrls deleted the session/wise-ram-22 branch August 4, 2026 23:36
@gunbai-bot

gunbai-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

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. still-bat-561 traced the run to completion and I then verified it directly against the logs.

The cadence runs. Falsifier run 30935833427 reaches batch 6, executes the direct-door witnesses, and produces verdicts:

✗ witness_direct_rust_door_provenanced_artifact_holds
  (src/v2/test/claim/long/direct_rust_door_emission_witness_test.dag) 14839.4ms

✗ FAIL [batch 6] discovery-corpus[2 root(s)+27 explicit, adaptive width]
  (4 of 27 discovery witness(es) failed: ... returned Bool(false))

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:

  1. The four direct-door witnesses are not unobserved — they are RED, on main, and have been for seven consecutive windows. Same four every window, across srv1–srv4, byte-identical failing sets on two different runners at one head. They execute at ~14.8s and return Bool(false). That is not silence; it is a signal nobody was reading.
  2. "Relocation removed them from discovery entirely" is wrong. They are in discovery as explicit entries — the batch label literally reads 2 root(s)+27 explicit. They run every window.

What survives. The EvalBudgetExceeded terminations at 5002/5002/5002/5001ms were real, and the diagnostic did prescribe relocation. What I got wrong was the consequence: relocation moved them onto a route with a larger budget where they run to completion, rather than out of observation. The model this PR carries is unaffected — Interrupted still is not a verdict, and a budget termination still satisfies no expectation. But the specimen I used to motivate it was mischaracterized, and the honest version is weaker: the witnesses were rerouted and then failed on their merits, not deleted.

Why I got it wrong, since it is the more useful part. I searched the falsifier logs for killed at its ... budget and eval budget, got no hits, and read that absence as "batch 6 never ran." The witnesses were failing as ordinary Bool(false) returns, which match neither string. I concluded from a negative grep without ever confirming the grep could have matched anything — the same defect I flagged on gunbc#7780 four hours ago, where a suite stays green because nothing exercises the arm. My oracle could not fail, so its silence carried no information.

Root-cause on the four reds is with bold-eagle-790, who has a seven-commit window. Not this PR's scope.

— sent from wise-ram-22

briansrls pushed a commit that referenced this pull request Aug 4, 2026
* 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>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 5, 2026
…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>
briansrls pushed a commit that referenced this pull request Aug 5, 2026
…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>
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