Repository navigation
Heal main: three witness reds introduced by the #8062 merge - #8072
Merged
Merged
Conversation
…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
# 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: # ROADMAP.md
# 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
…ssion/witty-raven-412
…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
… 50583) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…verdict as prerequisites of ci-check-projection (cursor review 50587) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…(cursor review 50595 non-blocking finding) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
#8043 — producer successor row deleted (operator mandate 2026-08-08) The census's 3-of-9,353 was circular (restated enrollment, never attempted realization); the fixture route's limits were mistaken for compiler limits. No successor PRs; canonical-pipeline wiring, per-identity semantic-kind x realization-standing from actual attempts, predecessor deletion, and the whole-population receipt all land in #8043. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…or verdict 2026-08-08) Amends compute-exact-work-contract first_slice: exact dirty-tree snapshot runs all affected (or explicitly conservatively complete) v2 tests, exact receipt at most 5s warm, BaseUnstable a distinct answer; confidence optional for narrowing, never correctness. No new node. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…gence mandate 2026-08-09) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
… the debt ceiling, read trim's input in its seam Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…763) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
Contributor
Author
|
Review 50763 finding addressed: the receipt link now lives in the emitting authority ( — sent from witty-raven-412 |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
…c refusals) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 9, 2026
…dge-source repairs Control 22 -> 10 (main's #8072 healed part of the annotation-grain class), corpus 16,382 imports / 2,583 files, stripped 3,098 = control 10 + attributable 3,088, reconciliation OK. corpus_hygiene is absent from the ledger at ZERO, and so is duplicate_unclassified - so the two remaining excusing dispositions did not absorb anything: each was checked against the tree and both held. All 10 control diagnostics sit in host_phase_status_witness_test.dag, which this branch does not touch, so the hygiene batch still adds zero diagnostics - now evidenced by the located diagnostics themselves rather than by a separate run of main. The four new fixture modules contribute zero, measured, not assumed. Also retires the doc's claim that the convention rule is 'derived, not a list'. That was the fail-open threshold, and the section that says so is the section asserting zero.
briansrls
pushed a commit
that referenced
this pull request
Aug 9, 2026
…sure the stripped residual (#8067) * Re-measure the repo-wide import strip, and disambiguate the three homonyms that carry half of it Whole-corpus strip measurement (docs section 15 of the cascade diagnosis, the DESIGN-linked authority for this lane rather than a new orphan doc), plus the part of the residue that is corpus hygiene rather than a compiler deficit. Measurement: gunbc rebuilt from main at 1eadad4 (a stale binary would have measured a substrate that #7924 replaced), two scratch trees, a brace-depth-aware strip of 16,315 import declarations across 2,574 files with zero residue. Control 12 hard diagnostics, stripped 5,827 -> 5,815 strip-attributable over 801 files and 486 names; 69% of stripped files compile clean. Joining every failing name against a corpus declaration index splits the residue: 50% homonyms (32 names), 28% the documented Class B population, 10% variant tags, 11% cascade. The classes are indistinguishable by diagnostic text, so the join is what ranks the work. Fix, for the homonym half only: `cell`, `row` and `note` were each declared twice with unrelated return types (a MarkdownTableCell/Row table helper in gunbc.plans.md_helpers, a markup Fragment helper in the instrument pages). Two concepts sharing a short name is a homonym, not a section 3 fork, so the correction is disambiguation and not consolidation: the instrument-local declarations become instrument_cell / instrument_row / instrument_note, names derived from the instrument_cell_class / instrument_row_class / instrument_note_class they already build. All three names are now corpus-unique, which removes 2,765 of the 5,815 (48%) at the authoring layer. This does not unblock the strip. Classes B and C are unchanged and remain the blocker, and section 13's wave rule stands. Verified by execution: whole-tree `gunbc compile --target dag` on the renamed tree produces the same 12 baseline diagnostics as before the rename. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Replace the predicted Class A drop with the measured one Section 15.5 predicted 2,765 removed diagnostics from the classification arithmetic. Re-ran the strip against the renamed tree with the same binary and the same brace-depth-aware pass: 5,815 -> 3,047, measured removal 2,768 (47.6%), three more than predicted because cascade diagnostics went with them. Zero cell/row/note failures remain, so the class is closed rather than reduced. Also records why the ~150-diagnostic Class A tail is not uniformly mechanical (half genuine forks needing an authority decision, half cross-domain homonyms), and notes that consolidating a fork temporarily adds the import edge this lane deletes -- an ordering artifact, since a corpus-unique name resolves bare. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Withdraw the duplicate rename, reconcile the census, and withdraw the Class C label Three corrections to the measurement, and one withdrawal. WITHDRAWN: the cell/row rename. Open #8056 authored it first (fragment_cell / fragment_row, same two files) after independently observing explicit imports losing to pool coincidence. This session measured the same repair under different names without checking for an existing fix PR. Both instrument files are restored to main, so #8056 owns that repair and one defect is not repaired twice. `note` (declared twice across the sandbox and motion modules) is NOT covered by #8056 and is recorded as the uncovered sibling rather than edited here, since its declarations sit adjacent to #8056's lines. CENSUS: the published four classes summed to 5,803 against a stated 5,815. The missing 12 are diagnostics carrying no quoted name for the join to key on (eight indexing, four if-branch mismatches). They are now an explicit unclassified row and the ledger identity is stated, so the residual reconciles exactly. Their count coinciding with the control's 12 is a coincidence, called out as one; one of the four is the Product(<anon>) fabrication shape, so part of that row is Class-B damage in disguise. CLASS C: the label is withdrawn. The section described the 599 rows as the arity-zero/variant-tag population that section 3 predicts -- a hypothesis THIS DOCUMENT's section 5 refutes by execution. Re-asserting it while citing the refuted section is the stale-citation class in the document that recorded the refutation. The rows now carry a named re-proof procedure and are explicitly not evidence for a language feature. Also: Class A is split four ways, since global textual uniqueness is not the namespace model's rule -- it preserves distinct same-spelled declarations and feeds candidates to the ambiguity fold; the 69%-clean reading is qualified against the measurement-only discriminator and the fabrication arm; the framing no longer implies a countdown, and states the closing frontier as 2 with E and F unavailable. Adds docs/plans/import-strip-residual-ledger.tsv: the exact 3,047-row residual worklist, dispositions summing to the row count, with provider_in_loaded_closure carried as unobserved (it needs loader instrumentation, and guessing it would fabricate the E/F measurement) and no_declaration_found documented as an index limitation rather than a fifth class. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Withdraw "frontier 2" and "exact worklist"; commit the reproducer; re-measure on the current base Six required changes from review, each verified against the carriers rather than taken on the reviewer's word. FRONTIER 2 IS WITHDRAWN. The roadmap prose was ahead of its own executable closing authority. gunbc.namespace_reference_derived_closure_contract namespace_reference_derived_closure_acceptance_admissions returns SIX ReferenceDerivedClosureUnavailable rows -- including the four A-D capabilities, trigger P2aStructuralCandidateProducer7515 -- and reference_derived_closure_closing_contract_holds is false above frontier zero. Section 15.0 replaces the single frontier with a three-level maturity matrix (A-D parser-fixture evidence; E/F carrier/fixture evidence; permanent ordinary-path contract all six unavailable), citing the carriers that say so themselves: namespace_clause_e_projection_law_note excludes OrdinaryLoadedCompilationClosure, module_path_file_row_dissolution_note carries its row as a scaffold until B2, and roadmap_authority's namespace_cross_file_provenance_lane_integration_note states outright that B1 fixture carriers do not close the lane. The missing work is an integration vertical, not two algebra arms. CLASS B IS NOT E. The prior revision dispositioned 1,656 rows as clause E while every row recorded provider_in_loaded_closure=unobserved; both cannot stand. The disposition is now unique_decl_unresolved_mechanism_unobserved, and the doc enumerates the five mechanisms the evidence cannot distinguish. The live_tree.dag lead (943 rows, 31% of the residual) survives as a strong lead, labelled as one. EXACT WORKLIST IS WITHDRAWN: 1,109 rows are explicitly unclassified or downstream and 1,656 carry an unobserved mechanism; only 152 are hygiene. THE 505-ROW BUCKET IS SPLIT six ways -- variant_owner_unindexed 249, ordinary_callee_unindexed 133, field_on_unresolved_or_wrong_type 88, method_on_unresolved_receiver 22, record_shape_cascade 12, unindexed_symbol_candidate 1 -- because count/first/split/ends_with are methods on unresolved receivers and steps/kind/qualified_name are fields downstream of a missing parent type, not index gaps. CLASS C PROVIDERS ARE CANDIDATES. The single provider_module column laundered a same-leaf index hit into a binding fact; the ledger now carries candidate_provider_modules, candidate_count, intended_provider=unobserved and accepted_binding=unobserved. REPRODUCIBILITY. docs/plans/import-strip-measurement/ commits the brace-aware stripper (now emitting a per-file manifest), the classifier, raw control and stripped diagnostics, the duplicate-declaration census, summary totals, corpus hash, measured commit, tool identity, and the deterministic command sequence. The stripper was verified to reproduce the measured tree byte-identically, and the classifier reproduces the committed ledger. Registered as a scaffold with a dissolution trigger: when B2 lands, the ledger becomes a projection of the loader's accepted-binding output and these scripts delete. RE-MEASURED ON THE CURRENT BASE, post-#8056: control 12, stripped 3,062, attributable 3,050, reconciliation checked by the classifier rather than asserted. Supersedes the 5,815 reading taken at 1eadad4; the two are not a trend. Also fixes a fabricated citation this section introduced -- DESIGN.md has no "Current state - stale binary phantom breakage" heading (that is this session's memory index, not DESIGN), and "known-positive" is this document's term, not DESIGN's. Caught in review; it is the same stale-citation class the section lectures about. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Land the two reproducer scripts the README claims (repo-wide *.py ignore silently dropped them) review 50719 is correct: the README documented a reproducer invoking strip_imports.py and classify_residual.py, and neither file was in the tree. The cause was .gitignore:113 `*.py`, a deliberate repo-wide rule -- `git add -A` skipped both silently, and the explicit `git add` that followed had its "ignored file" error suppressed by a 2>/dev/null I should not have written. So the PR asserted regenerability while shipping only the receipts: the exact specification-without-execution gap DESIGN section 5 names, in a PR whose subject is measurement honesty. Fixed by following the convention already in .gitignore rather than force-adding: two negation entries beside the existing !docs/plans/witness-subject-execution-audit.py and !docs/probes/dissolution_census_a_ci_layer_roots_project.py exemptions. There is established precedent for committed measurement scripts under docs/ -- docs/probes/namespace_census_2026-07-31/ is an entire directory of them -- and the ignore rule's own comment scopes itself to the .dag/.rs substrate, which docs/ is not. A negation entry records the exemption where a reader will find it; `git add -f` would have hidden it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Record the tracked-content-only verification of the reproducer claim The README asserted regenerability; now it carries the execution that establishes it. Running the committed scripts against a `git archive HEAD` export -- only what a fresh clone receives -- reproduces the manifest and the 3,050-row ledger byte-identically, with the classifier printing its own reconciliation. Also records why the scripts were missing, so the next author meets the *.py rule with an explanation instead of the same silent drop. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * chore: regenerate drifted generated artifacts (ci auto-heal) * Add the reproducer-script exemptions to the .gitignore AUTHORITY, not the artifact review 50727 is correct, and identifies the durable fix I had missed. My previous commit hand-edited .gitignore -- a GENERATED artifact emitted from gunbc.gitignore_authority -- so CI auto-heal regenerated it from the authority and removed both entries in 1505281, leaving the README describing exemptions the tree did not carry. Editing a projection instead of its authority is the DESIGN section 3 single-authority violation, and the artifact winning is the mechanism working correctly, not a race. The entries now exist where they are derived from: gitignore_model.dag two GitignoreArtifact variants gitignore_authority.dag both added to the PythonLocalDevScript group gitignore_emit.dag render arms for the two paths then regenerated via the documented actuator (dag/tools/generated_artifact_gate.dag main_wet), which is what auto-heal itself runs -- so the next heal reproduces these lines instead of deleting them. Proven by execution rather than by reasoning about it: a second consecutive heal run reproduces .gitignore byte-identically (regen fixed point), and the compiler refused the intermediate state where the variants were referenced from the authority/emit import lists before being declared in the model -- which is how the third module was found. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Hygiene batch 1: consolidate three true forks onto their single authorities declaration_ref_eq + declaration_ref_in_list (44 of the 152 hygiene rows): gunbc.commit_workflow carried a semantically identical copy of std.roster_frontier's DeclarationRef equality. Deleted; the std authority is imported. Two consequences that had to move with it: declaration_field_eq became dead once its only caller went, so it is deleted rather than left as a dead scaffold, and the std authority names its list parameter `refs` where the local copy said `declarations`, so all four call sites moved. Milliwatt / milliwatt / milliwatt_count (2 rows): product.hardware_selection redeclared std.measure's SI unit family verbatim. Deleted and imported; three witness call sites that named product.hardware_selection.milliwatt repointed. srv3_nbd_proxy_local_port (5 rows): extdeps.bmc.webui.nbd_proxy_serve holds the cited upstream port fact and gunbc.srv3_os_install_diagnostic held a copy. The copy is deleted and the extdeps authority imported -- the direction the external upstream decomposition rule requires. Verified: whole-tree `gunbc compile --target dag` produces the same 12 baseline diagnostics as before the change. The imports added here are transitional. They dissolve with the ordinary-loader changeover, when a corpus-unique name resolves bare; they must not be scored as import growth against the deletion lane. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * wip: hygiene batch 2 (renames + classifier corrections) * Hygiene batch 2: close the remaining homonym and fork families Consolidated onto one authority: decl_facts_matching_qualified_name (identical bodies, both in v2 std) onto v2.std.decl_facts_skeleton; gnu_bash_subject_ref onto the DERIVED row in gunbc.language_target_registry, deleting the hardcoded DeclarationRef literal that duplicated it. Renamed as genuine homonyms -- different concepts that shared a leaf: PublicationSubject splits into RoadmapPublicationSubject (a roadmap publication attempt: node, branch, head) and PublicProjectionSubject (a content projection: subject/content identity, path), 31 rows and the largest single family; NetworkInterface -> DockerContainerNetworkInterfaceStats with the product topology keeping the name; ampere -> ampere_vendor with the SI unit constructor keeping it; shape_from_catalog -> cpu_/gpu_; ChangeClassification -> Bootstrap.../ChangeRealization...; path_has_prefix -> rust_source_path_has_prefix; note -> instrument_note / motion_note; reference_resolution_facts_live -> import_resolution_facts_live on the module_graph side, where the name now follows the ImportResolutionFact it returns. Renamed as fixture-locals: five witness-local nid helpers, authored -> authored_status_fixture, site_artifact_digest -> fixture_site_artifact_digest, fixture_repository -> git_/mercurial_/pijul_, decl_facts_reflection_fixture_facts -> decl_facts_reflection_witness_support_facts. Renamed BOTH sides where the bodies actually diverge, so the fork is visible rather than latent: runner_slot_unit_name and RunnerReplacementCause (the recovery module's copies build a different unit name and enumerate different causes than gunbc.runner_lifecycle, which carries Disposition = SingleAuthority), and current_walk_attempt_id (env_var/none vs optional_env/empty-string). These are named, not fixed; two functions still compute a systemd unit name differently and that is a latent defect this PR surfaces rather than resolves. Per-spec w3c tokens are named for the spec that owns them: accelerometer.dag keeps accelerometer_permission_name, and the DeviceMotion spec's copy becomes device_motion_accelerometer_permission_name; interfaces_are_secure_context_only gains an API-family prefix on each side. Each upstream spec module owns its own facts, so a shared token is not consolidated across specs. One specimen worth keeping, found by execution during the consumer sweep: renaming the git fixture made another module's bare `fixture_repository` bind to an unrelated declaration in a different witness file, producing five bogus "no field on type Repository" errors. That is pool coincidence reproduced on the UNSTRIPPED tree -- the same mechanism as the Class B residual, and an argument for these renames rather than against them. All 30 families are now corpus-unique. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Close the hygiene bucket: 152 actionable rows to 0, re-measured on this head Fixes review 50740: the committed receipts pinned a pre-repair commit while the diff consolidated the very forks the ledger listed as open, so the measurement authority and the fix disagreed inside one PR. Everything is now regenerated on the head that carries the repair, and sections 15.1-15.5 carry an explicit pointer saying their numbers are the pre-repair reading. MEASURED, not predicted: corpus_hygiene 152 -> 0. The disposition is absent from the ledger rather than reduced. Reconciliation checked by the classifier: stripped 3,100 = control 22 + attributable 3,078 = sum of ledger rows. Also fixes a defect the regeneration caught in my own work. The first run reported corpus_hygiene: 2, which was a rename of mine colliding with an existing import_resolution_facts_live in v2.lens.module_graph -- I had named it for its return type when the distinguishing fact is its source. It is now reference_derived_import_resolution_facts_live, and both are unique. Three numbers moved for reasons that are NOT this repair, stated so the tables are not read as a scoreboard: the unstripped control rose 12 -> 22, and compiling origin/main alone reproduces 22, so the hygiene batch adds zero diagnostics; the corpus grew to 16,375 imports across 2,579 files; and unique_decl_unresolved_mechanism_unobserved rose to 1,885. All three follow main landing #8062, #8061 and #8068 during the work. The section states plainly that this does not close import deletion. What it buys is that no one can point at a miscellaneous naming tail to justify a workaround; the remaining residual is one integration vertical. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Stamp the receipts with the commit the measurement was taken at The corpus hash covers dag/ and src/v2/ .dag files only, so it is stable across this docs-only commit; the commit line now names the head that carries the hygiene close rather than the one before it. * Repair the module_graph edge-source regression this PR introduced review 50749 found a semantic bug in production lens code, introduced by my own rename. The blunt pass over reference_resolution_facts_live rewrote four sites in v2.lens.module_graph -- the declaration, the CALL SITE inside dependency_resolution_facts_live, and two prose rows -- and when I later fixed the name collision I repaired only the declaration. That left reference_edges: sourced from import_resolution_facts_live, the same producer already feeding import_edges:, so bare-reference dependency edges were silently dropped from the module graph that feeds affected-set selection, import closure and compile-clean scope. Repaired: the call site takes reference_derived_import_resolution_facts_live, and both prose rows are reconstructed from main so they differ by exactly the rename. Audited the whole file against origin/main -- all four changed lines are the intended rename and nothing else. WHY NOTHING CAUGHT IT, which matters more than the fix. Both helpers have the identical signature (List<String>, List<String>, List<String>) -> List<ImportResolutionFact>, so the substitution is type-correct and the whole-tree compile stayed green at baseline THROUGH the regression -- the check I was relying on cannot see this class. And no witness in the corpus references dependency_resolution_facts_live or union_import_resolution_fact_lists at all, so the two-source union has no discriminating control and a wrong producer there is invisible to the executing corpus. The coverage gap is recorded in section 15.7 rather than closed here: a real control needs a fixture where a module is reachable by bare reference but NOT by import, which is the same fixture shape the ordinary-loader vertical needs and belongs with it rather than bolted onto a naming PR. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Regenerate the receipts on the head carrying the module_graph repair Residual is unchanged (3,078 rows, reconciliation OK) because the repair changed a call site inside a lens, not the corpus name structure -- but the receipts now name the head that carries the fix rather than the one before it. * Stamp the corpus hash and measured commit * Repoint the witness at the declaring module; align every stale README number review 50759, both findings, with one correction to the first. WITNESS IMPORT: dag/test/claim/scaffold_disposition_census_fixture_witness_test imported decl_facts_matching_qualified_name from v2.std.decl_ref_resolution, which this PR stopped declaring. The single-authority half is right and is fixed -- it now imports from the declaring module v2.std.decl_facts_skeleton. The COMPILE-BREAK half does not reproduce: v2.std.decl_ref_resolution imports the symbol, so the re-export resolves, and the witness ran green (returns true) BEFORE the repoint as well as after. Recorded because "verify each item against the current code" cuts both ways; the fix is worth making on single-authority grounds, not because the tree was broken. README: the two flagged lines were a sample, not the population. Swept the file and corrected five stale claims -- the 3,050-row figure, the strip expectation (16,315/2,574 -> 16,375/2,579), the verification reconciliation (3,062 = 12 + 3,050 -> 3,100 = 22 + 3,078), the manifest row count, and the --control-count/expect lines the review named. The tool-identity section was not merely stale, it was FALSE, and that is the one worth reading. It claimed no .rs changed between 1eadad4 and the measured base so the original binary stayed current. Main then landed #8062, which changes src/v1 binding behaviour, and the binary was rebuilt. The section now records what that cost: the heal entry passed locally under the old binary while failing in CI under the new one, so a binary older than the substrate it judges reports a compiler that no longer exists. Rebuild whenever src/v1 moves. Verified by execution, not by reading: the README recipe was run and its stated numbers reproduce (16,375 across 2,579; 3,100 = 22 + 3,078; rows 3,078 OK), and the repointed witness still returns true. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * wip: refresh control receipt at HEAD * Re-stamp the measurement anchor at HEAD, and prove each half rather than assume it review 50765: the stamp pinned 9325d29 while HEAD carried a later corpus edit (the witness import repoint), so the hash no longer described the tree the receipt claims to cover -- the same stale-receipt class section 15.6 names, in the receipt that documents it. The review suggested the ledger and diagnostics were "likely unchanged". Both halves are now established instead of assumed, and they needed different arguments: STRIPPED half, by construction: the only post-measurement edit was an import line, and the strip deletes every import line, so the stripped tree at HEAD is BYTE-IDENTICAL to the one measured (verified with diff -rq over both source roots, and the manifest matches). The stripped diagnostics therefore cannot differ -- no recompile can change that. CONTROL half, by measurement: the control retains the changed import, so it was recompiled at HEAD. 22 diagnostics, and the log differs from the committed receipt ONLY in wall-clock lines. That is now documented rather than papered over: the README records which receipt content is not byte-reproducible and gives the filtered diff used to check it, so a future comparison does not read a timing delta as a measurement change. Nothing derives from the durations. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Make the measurement anchor self-verifying instead of chasing the commit id A stamp written into a tracked file names an ancestor by construction -- the commit cannot contain its own id -- so re-stamping to catch HEAD is a loop that never closes and always reads one commit stale. The hash is the real anchor: it covers dag/ and src/v2/ .dag files, so docs-only commits do not move it. The receipt now says so and gives the one-line command that decides whether it describes the reader's tree, which is checkable at any commit rather than requiring trust in either line. * Repair three review blockers: CSS wire, fail-open classifier, edge-source control 1. THE `note` RENAME CHANGED A WIRE VALUE, NOT ONLY A SYMBOL. In "instrument-note" the token sits between a hyphen and a quote, neither of which is a word character, so a word-boundary rename matched inside the string literal: the sandbox emitted "instrument-instrument_note" and motion emitted "instrument-motion_note", and the motion page's notes silently stopped matching the stylesheet rule that styles them. Nothing in the repository could refuse it — a class name is resolved by the browser against CSS text. Repaired by CONSOLIDATION rather than by two corrected copies: motion already imported from the sandbox, so it now imports instrument_note and its duplicate helper is deleted. One helper cannot drift from itself. The whole corpus was then audited for the same class, not just this site: the multiset of every string literal in every .dag file was compared against the merge base. Exactly three literal changes are mine — this one, and two prose annotations that correctly re-cite renamed symbols — plus the gnu_bash_subject_ref consolidation. No other wire value moved. Witness: witness_note_class_wire_matches_stylesheet_selector, green, and red under either exact corrupted spelling. 2. THE CLASSIFIER'S TWO EXCUSING RULES WERE THRESHOLDS, AND THEY FAILED OPEN AT THE ONE NUMBER UNDER TEST. "Ten or more declarations is a convention" and "every candidate path contains .fixture. is an intentional collision" both remove rows from the hygiene bucket by shape, and that bucket is asserted at ZERO. Each subject is now NAMED and its defining property CHECKED against the tree — conventions must be one-per-module under a declared prefix, fixtures must match an exact pinned module set — and a subject that stops satisfying its property lands in `duplicate_unclassified`, which is loud and counted, never silently excused. Six controls in classifier_controls.py, all holding: a planted ten-declaration accidental fork stays hygiene, an unknown duplicate across two fixture modules stays hygiene, a convention name declared twice in one module is not excused, an ambiguity name with a third declaration is not excused, and both named subjects keep their dispositions. 3. NOTHING EXECUTED THE TWO-SOURCE UNION. dependency_resolution_facts_live unions two producers that share a signature, so the call site that passed the import producer into both arms compiled clean and returned well-formed edges while dropping every reference-only dependency. A unit test of the fold would not have caught it; the defect is in which producers the production function calls. So the production function is pointed at a four-module fixture and asserted at identity grain in both directions. Restoring the doubled arm reds two of the five witnesses. The fixture's shape is DERIVED from the seam rather than invented: the two producers are disjoint by file — reference_resolution_facts emits nothing for a file carrying imports — so the reference-only dependency must live in an import-less consumer, and a same-path duplicate is unconstructible. The witness says so instead of asserting a dedup that cannot arise. classifier_controls.py is registered in the gitignore authority; the repo-wide *.py rule dropped this lane's scripts silently once already (review 50719). * Regenerate receipts on the repaired head; record the classifier and edge-source repairs Control 22 -> 10 (main's #8072 healed part of the annotation-grain class), corpus 16,382 imports / 2,583 files, stripped 3,098 = control 10 + attributable 3,088, reconciliation OK. corpus_hygiene is absent from the ledger at ZERO, and so is duplicate_unclassified - so the two remaining excusing dispositions did not absorb anything: each was checked against the tree and both held. All 10 control diagnostics sit in host_phase_status_witness_test.dag, which this branch does not touch, so the hygiene batch still adds zero diagnostics - now evidenced by the located diagnostics themselves rather than by a separate run of main. The four new fixture modules contribute zero, measured, not assumed. Also retires the doc's claim that the convention rule is 'derived, not a list'. That was the fail-open threshold, and the section that says so is the section asserting zero. * Regenerate receipts on the merged head Main advanced (#8054, #8069), so the corpus hash moved and the receipts no longer described the tree. Re-measured rather than left stale: control 10 (unchanged, same annotation-grain file this branch does not touch), corpus 16,388 imports across 2,583 files, 3,160 = 10 + 3,150, reconciliation OK. corpus_hygiene remains ABSENT AT ZERO through a main advance that added 62 residual rows - which is the more informative reading than the first zero was: the close survives the corpus moving underneath it, because it removed forks rather than pinning a snapshot. duplicate_unclassified is also zero, so both named excusing dispositions still satisfy their checked properties on a corpus neither was authored against. All witnesses re-run green on this head, and the anchor re-verifies. --------- 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Main has been red since the #8062 merge on five discovery witnesses; all three root causes are #8062-introduced and fixed here, each verified green by local execution:
doc_graph_has_no_orphan_docs×2,doc_graph_is_clean):docs/probes/class_b_trim_pool_coincidence_receipt.mdlanded with zero inbound links. Fixed with one link frommodel-realization-fork.md§5 — the section that registers the exact class the receipt proves. Re-run: PASS (orphans 0, dangling 0).test_migration_debt_module_count_does_not_grow): Class B trim: pool-independent binding repair + live specimen #8062 addedclass_b_trim_specimen_test.rs, breaching the 82-module ceiling. Raised to 83 with a typed disposition comment: deliberate hand-Rust admission (the specimen must observe v1infer_envbinding directly), dissolving when CI2 (CI-0: replace interpreter fallback with authoritative v2-emitted witness execution #8043) covers compiler-subject tests. Full suite re-run: 5/5 PASS (LOC and test-fn ratchets still under ceiling).wiring_liveness_corpus_witnesses): Class B trim: pool-independent binding repair + live specimen #8062's newstd.algebra.trimfree-function seam never read its parameters. Fixed with the documented bytes.dag seam pattern —sread in the condition, both arms the same unreached literal (the body never executes; semantic execution routes throughfree_call.trim). Re-run: PASS. (First attempt placed the explaining comment inside the body and the §4c annotation rule refused it — moved to module grain.)No behavior changes: one markdown link, one ratchet disposition, one seam body that remains divergent-by-construction.
🤖 Generated with Claude Code
https://claude.ai/code/session_018gTJKsR5YdkaEc2SUGN9ff