Repository navigation
v1 cut: delete the v1 compiler authority, freeze its emitted Rust as the seed - #8352
gunbai-bot[bot] wants to merge 52 commits into
Conversation
v1 is an escape hatch for v2 (operator, 2026-08-15). Its Rust was never the
compiler: every stage -- tokenize, parse, resolve, infer, translate, emit --
is authored in .dag under src/v1 and emitted to src/v1/stage0/src. So v1 is a
second compiler written in .dag standing beside v2's, and it was the more
actively developed of the two (163 commits to src/v1/*.dag in 30 days against
146 to src/v2/compiler/*.dag) while 0 of 27 v2 modules could emit themselves.
That is DESIGN section 3's dual authority at the largest grain in the tree, and
the reason a month of self-host work produced no promotions: the replacement
was being grown in the shadow of a living original.
Deleted, as the root cut:
src/v1/**/*.dag 66 files, 59,829 lines -- the authority
src/v1/stage0/src/bin/regen_stage0.rs the regeneration loop over it
dag/gunbc/stage0_emit_plan_generated.dag its 142-entry output roster
src/v1/stage0_core/ orphan crate: tracked, in no members
list, unbuilt, unenforced
RETAINED AND FROZEN: src/v1/stage0/src/**.rs. Every emitted .rs is committed,
so a fresh clone still builds gunbc with rustc alone -- the bootstrap loop was
only ever circular when PROVING the fixed point. What dies is not the binary;
it is v1's life as a compiler. With no .dag authority and no regen loop there
is nothing to improve, so the premise supply is cut by construction rather
than by discipline (DESIGN section 3: with X gone, the cheapest next action
and the first-principles action coincide).
regen_stage0 is deleted in the same commit deliberately, not as cleanup: left
standing it would compute an empty emit set against the deleted authority and
delete the 142 frozen files -- the regrowth trap, pointed at the seed itself.
Work now goes forward on v2 against the frozen Rust.
Integration branch per DESIGN section 3; base 8a799b6.
Red mid-loop is declared state. DO NOT MERGE until Y's green bar.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…sters First literal build error on integration/v1-cut: cargo fmt --all --check -> file src/v1/stage0/src/bin/regen_stage0.rs does not exist The binary source was deleted with the v1 authority; its [[bin]] target was not. Class: declarations of a deleted build target. - src/v1/stage0/Cargo.toml: remove [[bin]] regen_stage0 - gunbc.ci_release_bins witness_declared_release_bins: remove "regen_stage0" (the CI build job packs this list; a name here is a cargo --bin target) - gunbc.devboot.program offered_programs: remove "regen_stage0" Retired, not restored: no regen target is re-declared anywhere. Consumers that still ADDRESS the bin (regen_verify_transport, self_host_realized_comparison_transport) now refuse WitnessBinNotEnrolled rather than building it -- a typed refusal, and the subject of the next class (the regen job and its verify/staleness gates). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…p being generated projections Second literal build error on integration/v1-cut: error: no bin target named `regen_stage0` in `v1-compiler` The committed ci.yml/falsifier.yml still spelled --bin regen_stage0; the roster edit only reaches them through regeneration. Regenerated via generated_artifact_gate main_wet with a gunbc built from this branch's frozen seed. Blocking that regeneration was ONE reader of the deleted emit-plan roster: v2.workflow.ci_heal_skew_guard_emit -> gunbc.stage0_emit_plan_generated (deleted) Decided, not routed around: the heal job's skew guard auto-resolves a merge conflict with `git checkout --ours` for paths that are GENERATED PROJECTIONS, on the ground that the discarded side can be regenerated. With the v1 .dag authority and the regen loop deleted, src/v1/stage0/src/**.rs is a projection of nothing -- taking ours there would discard the other side's bytes with no generator to recover them, the exact defect the merge driver refuses over. So the stage0 half of the exclusion set RETIRES: a conflict on a stage0 .rs is now an authored conflict and the guard refuses. Fail-closed direction; no path was dispositioned out of the subject. .gitattributes falls out of the same fact through the live derivation, not by hand: 140 `merge=generated-artifact` rows for stage0 .rs are gone because deterministic_generated_projection_paths no longer derives them. Still red, declared: the regen job itself (its verify/staleness gates, the rustfmt PATH ensure, the skip witness) and the rest of the emit-plan roster's readers -- the next class. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…e0 generated-membership on the registry
RULED BY OPERATOR ROUTE (option A). Running the heal on the cut tree RE-AUTHORED
dag/gunbc/stage0_emit_plan_generated.dag -- the 142-entry roster the cut deleted --
as a two-entry husk, because Stage0EmitPlanGeneratedDagArtifact was still a variant
in the generated-artifact registry. A regen output roster whose regen is deleted has
no subject; leaving the registry row makes every heal re-grow the corpse.
RETIRED WHOLE, at identity grain:
- gunbc.generated_artifact: the Stage0EmitPlanGeneratedDagArtifact variant, its entry
in the all-artifacts list literal, and its path / commit-policy / eq arms. The list
literal's brackets were checked explicitly (the sibling defect that survived four
cargo-green pushes) and the whole-corpus gate below is the proof.
- gunbc.generated_artifact_emit: the generate and extra-valid arms, and the import of
the content producer.
- dag/gunbc/stage0_emit_plan_emit.dag: deleted, orphaned by the above.
- gunbc.generated_projection_paths: the stage0 join, its plan-refusal cause, and the
from_stage0_plan entry point.
THE MEMBERSHIP QUESTION IS RE-GROUNDED, NOT DELETED. 'Is this stage0 .rs generated'
still has consumers (seed-growth admission, the source-lifecycle scaffold) and still
has an honest answer: a file is generated iff something can re-derive it, and the one
authority for that is gunbc.generated_artifact. So gunbc.stage0_emit_model now asks
the registry -- is_generated_stage0_file is a lookup at the canonical stage0 path,
generated_stage0_files is a derived projection -- and the hand roster is gone. This
also closes the 98-vs-101 fork gunbc.roster_registry recorded, from the reader's end.
WITNESSES RETARGETED, NOT DROPPED (DESIGN 4b: evidence survives its machinery):
- witness_projection_population_contains_stage0_rust INVERTED into
witness_stage0_rust_absent_from_projection_population on the same path, so a
restored stage0 join reds instead of passing unnoticed.
- w_enrolled_manifest_equals_typed_emission_plan_derivation, whose left-hand side was
the deleted roster, replaced by two claims asserting the registry grounding and the
frozen-seed negative.
ONE SUBSTRATE FINDING, kept because it changed the design: leaving
GeneratedProjectionPathSource as a single-variant coproduct does not typecheck --
a one-arm 'type A = B' is an ALIAS, so it refused with 'unresolved type'. A
one-inhabitant discriminant carries no information anyway, so the axis is dissolved
and the row is just a path.
ALSO: restore src/v1/tests/fixtures/whole_tree_wiring_enum/{common,mod_a,mod_b}.dag
(19 lines). The root cut's src/v1/**/*.dag glob swept up test DATA whose consuming
test lives in the retained kernel and whose subject -- whole-tree enumeration seeing
fns outside a per-entry closure -- survives the cut. Correcting an over-broad
deletion, not restoring v1.
GATE: dag/tools/generated_artifact_gate.dag main_wet over --source-root dag
--source-root src/v2, exit 0 with zero diagnostics, after refusing the coproduct
error above -- it can go red, so it is a gate and not a receipt. The heal ran to
completion and did NOT re-author the roster: that absence is the regrowth receipt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…ers survive the cut Same class as the whole_tree_wiring_enum restore: the root cut's src/v1/**/*.dag glob took test DATA, not compiler authority, and both consumers live in the retained kernel. - src/v1/tests/fixtures/non_ascii_perf.dag (1,505 lines) -- read twice by parse_witness.rs (read_v2_file) for the tokenizer non-ASCII performance regression. parse_witness is a floor-enrolled release bin on gunbc.ci_release_bins, so this is a live executing consumer, not a dormant one. - src/v1/stage0/tests/fixtures/fact_cardinality_split_brace.dag (8 lines) -- include_str! at cli_run.rs, a COMPILE-TIME dependency of the seed's test build. Its absence does not red the release build (the reference sits in a test module) but would fail any cargo test compile of the frozen seed. CENSUS METHOD, corrected mid-task: the first pass grepped for basenames, which matches an emitted twin's provenance header as readily as a live read. Re-asked from the other side -- enumerate every .dag path the cut deleted under src/v1 (64 of them), then join each against Rust STRING LITERALS in the retained kernel -- which is a query over the observed population rather than a lookup of the remembered one. That join found strictly more than recall did, including the parse_witness finding now carried to the next boundary. GATE: generated_artifact_gate main_wet, exit 0, zero diagnostics; and proven RED first on a planted unterminated list literal in a module OUTSIDE the compile closure -- the specimen shape -- which panicked at exit 101 naming the offending file. Mutation and revert were both verified to land before either result was read. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…s onto the discovered corpus parse_witness is a floor-enrolled release bin that read NINE deleted v1 compiler sources. Those are the authority the cut deliberately deleted, so this is a re-home, not a restore -- the subject survives (the parser handling a real corpus of varied syntax is a language property, not a v1 property) while the fixtures that carried it do not. BREADTH: eleven per-file *_parses_strict rows collapse into ONE corpus_parses_strict. Re-pointing nine names at nine other names would have re-imported the roster's original defect: it counted the files someone remembered to name. The surviving population is DISCOVERABLE, so it is discovered -- an identity join over every .dag under the source roots, asserting zero unparsed and NAMING every failure with its line. The two surviving dag/std rows go too: a walk that covers the tree covers them, and keeping a named row beside it is a second representation. SCALING: the three ratio claims took a hand-picked (small, large) pair. Their oracles are relative (time ratio vs size ratio), so no literal was keyed to the deleted files' sizes -- but the pair had to be re-picked by hand whenever it moved. corpus_size_extremes() selects the extremes at runtime and asserts a 4x spread, so the claim stays true as the corpus churns. Same for the flat-lookup claim, whose oracle is exact (one index op per lookup) and needed only a large file. DENOMINATOR STATED, not assumed: the walk covers dag/ and src/v2 -- the two source roots -- and NOT the repository. .dag files outside them (test fixtures under src/v1/tests/fixtures among them) are unwalked, deliberately, because a fixture may be intentionally malformed and a corpus claim must not adopt one as a subject. The gap is written down so 'does everything parse' gets the honest answer. Vacuous-guard: the walk asserts it found >1000 files, so a mistyped or empty root refuses instead of reporting zero unparsed and passing. claim_executor.rs cited the deleted caret_parse_smoke entry TWICE -- but never read it: the path is an in-memory label in a synthetic DiscoverySummary fixture. Repointed to a plainly synthetic name rather than to another real-looking path, so no reader mistakes an inert string for a citation. MEASURED, not assumed: the whole bin runs in 18s including the 3,709-file walk, so the corpus form fits the budget and no declared-bounded-subject fallback is needed. PROVEN RED, then green: a planted unterminated list literal inside the corpus made it exit 1 reporting '1 of 3709 corpus files failed to parse' with file and line. Mutation and revert were each verified to land before either result was read. Built under CI's RUSTFLAGS=-D warnings, which caught two orphaned registrations that a plain local build would have passed as warnings. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
CI run 31900396249 gave the literal error: regen_verify_gate_passes returned Bool(false), 'regen-verify gate failed: regen_stage0 witness binary unavailable' -- the typed refusal the first cut commit predicted. build PASSED (10m12s), so the frozen seed compiles; regen was the only real red, and ci died in 6s at a fail-fast preflight carrying no verdict of its own. ONE SUBJECT retires here: the self-host fixed point -- does re-running the emitter over the v1 .dag authority reproduce the committed seed. With the authority and the binary deleted there is nothing to re-emit and nothing to compare, so the question is not unanswered, it is void. Nothing migrates. Retired: RegenVerifyGate, SelfHostStalenessGate and SelfHostReadsRealBytesGate (coproduct arms plus every dispatch, hash, label, commit-enrollment and eq arm); tools.regen_verify_gate and _transport; the realized-comparison transport, claims, gate and floor test; ci_regen_rustfmt_path_emit and its test; the regen spec, gate projection, affected-set skip policy and shell shortcut in gunbc.ci_spec; regen_floor_skip_witness (bin, [[bin]] target, roster row); the RegenBehavioralFixedPoint ledger row; and the GithubActionsCiRegenJob surface, whose only rows were those gates. AND THE REGEN JOB ITSELF, which is the half that mattered most. It could never go green again, and the ci job's preflight FAILS rather than skips when an upstream is non-success -- correctly, since a skipped job reports success to a required check. Left standing it would have kept the floor from running for the remainder of the cut: a real coverage gap produced by a dead consumer, not by a decision. Deleting it RESTORES floor coverage. The preflight is untouched apart from losing the term naming a job that no longer exists; softening a fail-closed arm to route around a dead producer is the inversion DESIGN section 5 forbids. WITNESSES: two synthetic fixtures cited a retired gate/surface incidentally -- their subject is gate re-homing, not regen -- so they were re-pointed at surviving arms rather than deleted, keeping their RED controls live. The gate-totality witness (bag-equality between enrolled gates and every Gate arm) still holds because the arms and their enrollments left together; that it stayed green through a three-arm retirement is the receipt that this was not a narrowing. NOT TOUCHED, per the do-not-edit-a-corpse rule: src/v2/workflow/ci_floor_plan.dag and its witness carry 13 more arms of these gates and are ALREADY DELETED WHOLE on integration/floor-cut, so cutting them here would be work on a file another lane has removed. Verified by git cat-file against all four sibling branches before starting; that check also confirmed the other files in this diff are live everywhere. GATE: generated_artifact_gate main_wet, exit 0, zero diagnostics -- after refusing twice mid-change on real unresolved references, so it can go red. The regenerated ci.yml carries four jobs (build, ci, heal, fleet) and zero regen_stage0 references. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…t join not by CI Ran the census from the OTHER side rather than waiting for the floor: enumerate every .dag module whose defining file this branch deleted (72), then find every live module whose import list names one. That is an identity-grade join -- imports name modules, not bare words -- and it found FOUR live dangling imports my gate had not caught, because the gate compiles the generated-artifact entry closure, not the whole tree. My own denominator, stated rather than assumed. A bare-NAME join was tried first and discarded as useless: it reported 123 hits, almost all homonyms (Node, Token, Scope, Cardinality are independently declared in surviving std modules). Names are not identities; only the import edge is. FOUR, each decided rather than patched: 1. gunbc.stage0_partition_closure imported the deleted emit-plan roster to ask whether a basename is generated. Repointed to gunbc.stage0_emit_model is_generated_stage0_file -- the registry-grounded membership this cut already established. Subject survives, the answer just comes from the single authority now. 2. src/v2/test/manual/ownership_movable_test.dag imported v1.compiler.ownership -- the one .dag outside src/v1 that did. RETIRED. Its own note already recorded that it is off the auto-path, not CI-enrollable, not resolvable on clean main, and that 'the live v1 ownership logic is carried by the compiled seed... that is where the real coverage sits, not here'. So it was already unexecuted evidence for an authority this cut deleted. Its declared successor -- a v2-side witness over v2.compiler.use_site_verdict -- is forward work, not a restore. 3. tool_readiness_witness cited a frontier row in the deleted rustfmt PATH-ensure module. RE-HOMED, because the row's subject outlived its consumer: rustfmt is still spawned every CI run by the build job's fmt gate and still has no stable identity to pin against. The row moves to gunbc.tool_readiness -- the layer that declares UnpinnedToolFrontierRow and already names the frontier count as the migration remainder -- not beside its new reader. Its trigger was RE-DERIVED, not copied: it pointed at the deleted script, and a DeclarationRef to a deleted symbol greps clean while being false, which is exactly the stale-citation class DESIGN section 3 rules on. It now names gunbc.ci_spec ci_fmt_gate_line, the consumer that actually spawns the tool. 4. floor_gate_failure_receipt_witness imported both retired regen modules. Removed ONLY the regen half -- its planted fixture and three claims -- keeping the generated-artifact-drift and dag-compile-clean claims, which are live subjects that merely shared the file. This is the one file here that integration/floor-cut deletes whole; a four-line removal of things already gone resolves cleanly either way, where re-authoring its live claims would not. GATE: generated_artifact_gate main_wet exit 0, and the import join now returns only that floor-cut-deleted file. Zero live modules import a module this branch deleted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…n entry FIRST REAL FLOOR CENSUS on this branch, and it was four errors in one file: src/v2/workflow/ci_floor_plan.dag:24:18 gunbc_ci_regen_spec not found ...:55:25 RegenVerifyGate ...:56:3 SelfHostReadsRealBytesGate ...:56:31 SelfHostStalenessGate build PASS 10m47s, heal PASS, regen absent from the check list, and ci ran 2m18s instead of dying at 6s -- the preflight cleared, which is what deleting the regen job bought. THE PRIOR CALL TO LEAVE THIS FILE ALONE IS REVERSED, and the reason is specific rather than general: ci_floor_plan.dag is the floor's own --plan-entry. Do-not-edit-a-file-a- sibling-deleted holds for files whose only future is deletion; it does not hold for one that is load-bearing on THIS branch until the replacement lands. Four dangling references meant no floor census at all. Deleting the file whole -- which is floor-cut's move -- would have traded four errors for no floor. AND THIS IS NOT INVESTMENT IN THE FILE, IT IS FINISHING MY OWN RETIREMENT. I retired four symbols; references to them survived where I chose not to look. Struck the references and the arms they feed -- resource profiles, gate nodes, runnables, the regen->staleness resource edge, the regen batch/plan entry -- plus the now-dangling CiRegenFloorPlan PlanFunction variant, whose arm named a function this change deletes. Nothing in the plan was repaired, improved, or re-enrolled. ONE FIXTURE RE-POINTED, NOT DELETED: heavy_pair_spec used RegenVerifyGate as a SYNTHETIC second heavy to construct a two-heavies-co-batch case the production roster cannot exhibit. Its subject is the scheduler, not the gate, so it moves to SourceRootIngestGate -- heavy whole-tree resolve, and off the ci-floor surface (its commit enrollment names the falsifier cadence), so it genuinely adds a second heavy. One attribute is NOT preserved and the note says so: the retired gate also spawned a host compiler. That was fidelity to a long-deleted gate, not a requirement -- serialize-heavy keys on heavy_whole_tree_resolve alone -- and a future property keying on host-compiler spawning needs a different fixture. The repair also REUSES the file's existing ci_spec_with_source_ingest_gate rather than the second adder my first cut wrote: one concept, one spelling, and the two synthetic specs cannot drift. RECEIPT, and it is the plan itself rather than a proxy: evaluating gunbc_ci_floor_plan through the branch binary now returns a complete WalkPlan with its batches built, where before it could not resolve. generated_artifact_gate main_wet exit 0. A DENOMINATOR ADMISSION worth recording with this fix: my ci_spec bag-equality receipt certified that the Gate arms and their ENROLLMENTS left together, and I reported it as proof the retirement was complete. It was not that. It relates enrollments to arms; ci_floor_plan CONSUMES those arms in match position and no totality witness relates consumers to the coproduct, so it went stale silently while the receipt stayed green doing exactly what it promised. A structural receipt still needs its population named. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
floor_job_waits_on_the_heal_preflight and floor_refusal_tolerates_a_skipped_heal_but_not_a_failed_one were the last two executing consumers naming the retired regen job: one pinned "regen" in ci_job().needs, the other the "$REGEN" != "success" term in the upstream-red refusal script. Both are inverted rather than deleted, so the evidence stays enrolled one rung up (DESIGN 4b: a climb deletes production machinery, never the evidence): they now assert regen is absent from needs and REGEN absent from the refusal script, and red if regen is reintroduced in any form. Green by execution: 31/31 in ci_heal_job_witness_test.
The whole-tree compile-clean wall found the one dangling reference the registry retirement left behind: test.claim.generated_artifact_drift still imported and named the deleted variant at five sites. Struck the import, the registry_contains, artifact_is_committed and consumer_is claims, and the extra-validation positive. Decremented the registry arity literal 16 -> 15 to match the coproduct the claim counts, and dropped the !path_is_ignored row for stage0_emit_plan_generated.dag, whose subject no longer exists. witness_extra_validation_wired_refuses_on_generation_refusal SURVIVES on its remaining arm: V1InterpreterDispatchGeneratedRsArtifact is still an arm that reads the generated parameter, so the discriminating RED still cannot pass under an arrow-true stub. Corrected the note, which claimed two such arms of twelve. Green by execution: 34/34.
Found by an exact reverse join (names my commits removed, minus names still declared anywhere), not by CI. Nineteen sites, three of them real: - witness_deferral_freeze: the FrozenPathDeferral row for src/v2/test/manual/ownership_movable_test.dag named 5 identities of a file the v1 cut deleted (it imported v1.compiler.ownership). A frozen row the tree no longer carries is a StaleFrozenPathDeferral refusal, so it deletes in the same direction the roster is permitted to move, with a shrink-log entry in the carrier's own documented format. No coverage is lost that was executing: the witness's own note recorded it as off-auto-path, undiscoverable and unresolvable on clean main. - ci_floor_plan_witness_test: the falsifier gate pin named a retired gate, and the import list still named RegenVerifyGate. The pin shrinks to the surviving gate rather than being weakened to a length check, so it still reds on a de-enrollment. - doc_graph_roots / walk_plan_schedule_lens_test: DeclarationRef and synthetic-fixture citations into deleted decls. AND ONE WEAKER SURVIVOR. Body-diffing every function name defined in both a deleted file and a surviving one found render_dag_string_list_items forked: the copy in the deleted stage0_emit_plan_emit.dag escaped each item, the survivor in stage0_crate_layout_emit.dag interpolates it raw. Deleting the guarded copy would have left only the unguarded one, which is a regression the deletion census cannot see. Ported the escaping into the survivor. Rung honesty: this restores a guard, it does not fix a demonstrated bug. The survivor's three call sites pass basenames, filenames and directory names, none of which carry a quote, backslash or newline today, so I cannot exhibit a failure. The evidence is the deleted copy's own body. Proven inert: the generated-artifact drift gate passes, so emitted bytes are unchanged.
The both-directions derivation check found one real defect that neither the compiler nor either of my earlier joins could see, because both copies are source and the defect is entirely in the arrow between them. gunbc.roster_registry registered the roster gunbc.stage0_emit_plan_generated.generated_stage0_files with membership ByDerivation from gunbc.stage0_emit_plan.generated_stage0_files_from_ emission_plan. BOTH module paths are deleted, and the roster itself did not die with them: it moved to gunbc.stage0_emit_model and its derivation changed to committed_generated_artifact_paths(). So the registration was not merely naming a dead module -- it was FALSE ABOUT A LIVE THING, and my own earlier commit is what falsified it. Repointed at the live roster and the live predicate. This is distinct from the scaffold-index class, which is not repaired: there the subject is gone, here the subject survived and only its home and derivation moved. AND ITS TRIGGER WAS WRITTEN FROM THE DELETED THING'S POINT OF VIEW. The registry's note describes a live .dag-vs-Rust fork of this roster (measured at 98 versus 101) and names its closing condition as "regen_stage0 reads the .dag rows and the const is deleted". The first conjunct is now structurally unable to fire -- no reader remains. The fork nonetheless closed, by deletion of both sides rather than convergence: GENERATED_STAGE0_FILES is gone from the seed, and the .dag side asserts no list at all. Recorded as a dated correction rather than deleted, because the 98/101 measurement is the evidence for why a hand list beside a derived one was worth registering in the first place. Typechecks: 0 blocking, 7 advisory -- identical to the same entry on the fork base, so the advisories are pre-existing and not mine.
Both are the mechanism-versus-role class applied to prose I wrote today, found by running the shape-changed and deleted-lane passes against my own carriers rather than against the corpus. ci_gate: the retirement note said the self-host fixed point "is not unanswered, it is no longer a question". True of the LIVE comparison and false as a role-level claim -- v2.compiler.self_host still carries canonical_emitted_bytes_digest, self_host_fixpoint_equal, fixed_point_scaffold and regen_staleness_authority, and v2.test.execution.self_host_fixed_point still runs 15 witnesses over them, measured green post-cut INCLUDING the three perturbation RED controls. What retired is the gate that asked the question of the live seed with a binary that no longer exists; the modeled relation and its teeth remain, which is what a future v2-emitter gate binds to rather than re-authors. ci_spec: recorded what only the retired regen lane reached, enumerated rather than assumed -- nothing. gunbc_ci_regen_spec carried witness_entries: [], discovery_scan_dirs: [] and deploy_stages: [] at the fork base, and the base tree pinned that by execution in the now-deleted claim witness_regen_spec_carries_no_witness_corpus. All three gates retired with the lane, so no check became unreachable and the split-pair orphan class never formed here. Absence of orphans is a measurement, not a default, which is why it is written down. Verified by execution: ci_spec_witness_test 29/29, ci_gate compiles clean, generated-artifact drift gate passes (no artifact moved).
Found by the prose-grain membership-versus-extent check: two notes I rewrote today shrank materially (1285 -> 499 bytes and 924 -> 631), so I enumerated what was inside them rather than trusting a four-line diff. gate_enrollment_surface_asymmetry_note existed to justify why gates and witnesses need SEPARATE scheduled-surface predicates. Its justification was one worked instance: GithubActionsCiRegenJob executed gates but not witnesses. My cut deleted that surface, so the two predicates now read GithubActionsCiJob or FalsifierCadenceJob and nothing else -- BYTE- IDENTICAL bodies. The note as I left it still called them "one law read against two projector sets", which is now false. Corrected to state the measured identity and its cause, and deliberately NOT to merge them: a gate and a witness remain different kinds, and a future surface executing one but not the other re-separates them. So this records one concept under two names as a declared §2 violation held open, rather than a fork nobody noticed or a de-fork decided by the lane that happened to expose it. The other shrunken note lost only regen-surface content, all of it deleted; its live facts (the law, GitPrePushHook counting for neither kind, the #6658 receipt) survive verbatim. Typechecks 0 blocking.
Operator ruling on the degenerate fork my cut produced: neither merge the names nor leave two identical bodies. The shared fact lives once in enrollment_is_scheduled; gate_enrollment_is_scheduled and witness_enrollment_is_scheduled both delegate to it. Every consumer keeps its name, both CONCEPTS survive, and no future is decided: the day a surface executes one kind but not the other, one of the two stops delegating and the divergence lands in the place built to receive it. Merging would have deleted a live distinction; two identical bodies stated one fact twice. Deriving does neither. Typechecks 0 blocking.
The invocation sweep's positive control found it. Controlled against three bins that ARE invoked -- claim_executor, claim_batch, gunbc show 95/98/1506 .dag hits, 3/3/4 workflow hits and 2/4/5 Cargo.toml hits -- so the sweep can see invocation sites in all three media and its zeros are real absences rather than a blind filter. Against that control, regen_stage0 came back 0 workflows but ONE Cargo.toml hit. It is a comment, not a target: claim_batch's header cited regen_stage0 as its exemplar of a hand-written CI tool. Repointed at parse_witness, which is hand-written, live, and in the same file. Not investment in the frozen seed -- it is the deletion half, removing a citation whose subject I deleted, in a file this cut already edits.
Found from the roster authority rather than from headers. The deleted
regen_stage0 carried assert_registry_is_partitioned, which refused if any
member of generated_stage0_files() also appeared in
HAND_MAINTAINED_STAGE0_FILES. On this branch it would REFUSE:
generated_stage0_files() = [bootstrap_stage0_crate_layout_generated.rs,
v1_interpreter_dispatch_generated.rs]
HAND_MAINTAINED contains v1_interpreter_dispatch_generated.rs
THE CAUSE IS A SUBJECT CHANGE, NOT A NEW OVERLAP. At the fork base that
function answered "which files does regen_stage0 emit"; my re-home made it
answer "which stage0 paths are committed generated artifacts". The hand
roster is written in a THIRD sense -- frontier hand_maintained means NOT
SELF-EMITTED BY v2 -- which a gunbc-produced artifact can be while still
being generated. So it is a §3 collision between three readings of one
word, exposed by the re-home rather than created by it, and the only
consumer that joined the two rosters was deleted by this same cut.
Not claimed: that anything is broken today. Nothing surviving joins them.
Restoring the assert would be investment in frozen Rust whose host binary
no longer exists. Declared as a rung drop with its measurement.
AND MY OWN WITNESS CANNOT SEE IT. w_hand_maintained_not_classified_generated
names three files -- cli_run.rs, v1_interpreter.rs, main.rs -- and asserts
they are not generated. It is a 3-of-29 sample carrying the population's
name, so it stays green across exactly the defect it reads as covering.
Left green rather than widened to the roster, because widening it reds the
floor on a §3 de-fork that is not mine to decide.
Green by execution: 10/10 in stage0_emit_model_witness_test, 0 blocking.
Operator ruling: the partition violation is a NAMING violation, not a membership one. Three senses of "generated" are live -- what regen emits, what is a committed generated artifact, what the v2 frontier does not self-emit -- and the second and third are not complementary, so their overlap is not a contradiction. It read as one because a function that changed its question kept its old name. §3 inverted: one name for two concepts. generated_stage0_files -> committed_generated_stage0_artifact_files is_generated_stage0_file -> is_committed_generated_stage0_artifact generated_stage0_file_count -> committed_generated_stage0_artifact_count Move and rename are separate commits: the re-home landed hours ago, so this carries the name change alone and every citation that named the old symbol was updated in the same motion rather than left to rot. Also renamed w_hand_maintained_not_classified_generated to w_three_named_hand_files_are_not_committed_generated_artifacts. It tests cli_run.rs, v1_interpreter.rs and main.rs -- three of twenty-nine -- while carrying the population's name, which is the fourth instance of that shape found today. Renamed rather than widened: widening reds correctly and forces a de-fork this cut is not about. DOES NOT FIX THE LIVE RED. w_scaffold_generated_hand_disjoint_holds and scaffold_join_mechanical_checks_holds fail on this branch and pass at the fork base under the same binary -- my re-home caused it, and the fix is an open decision reported upstream. Re-ran that bisect AFTER this rename and both arms are unchanged, which is the control against papering over a red with a name. 0 blocking; stage0_emit_model_witness_test 11/11.
…lation The check compared the committed-generated-artifact registry against derived_hand_maintained_stage0_repo_paths, which answers LAYOUT MEMBERSHIP. A committed generated artifact must be a layout member or the crate stops linking, so overlap there is expected and disjointness was never true of that pair; it only read as true while the generated side answered a narrower question. Re-homing that side onto the registry made the false property visible as a red. Repointed to derived_hand_maintained_disposition_repo_paths -- layout membership minus the registry overlap -- the maintenance-disposition population this module had already published, with v1_interpreter_dispatch_generated.rs named in generated_artifact_disposition_derivation_note as the discriminating case. Kept rather than retired as a tautology: the disposition population subtracts generated_artifact_stage0_src_repo_paths while the check compares against derived_generated_stage0_repo_paths -- two projections of one registry by different routes. Disjointness holds only while the routes agree, so the check guards that agreement. It retires when one projection derives from the other. 41/41 PASS on the scaffold witness. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…ngling algebra_count_length_name_fork_note argued that a dissolution trigger must be NAMED rather than described, citing v1.compiler.infer unresolved_method_frontier as its exemplar of a findable one. This cut deletes that carrier, so a live std module was left asserting a name that resolves to nothing -- a stale citation inside the argument for symbolic citation. Kept in the past tense rather than repointed. The argument is about the FORM of a trigger, which the retired row still exemplifies; substituting a surviving row would mint a fresh citation nobody checked. The trigger feature:primitive-realization-single-authority is unaffected -- a feature name, not a declaration -- and is still carried by std.primitive_identity. That clause was WRONG on first writing (it named v2.std.determinism, which does not carry it) and was corrected by grepping before commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…ed, keep 8 Largest single population of the batch-3 witness red on 147b210: 35 of 60 failures sat in this one file. It audited v1 COMPILER SOURCE through 25 hard-coded src/v1/*.dag path literals, all of which this cut deletes. RESOLVED PER ROW, NOT PER FILE. It is a mixed carrier: eight rows audit extdeps.languages rust/python/go emit template derivation and the rust syntax spec at dag/extdeps/languages/rust/syntax.dag -- none of it v1. Retiring the file whole would have vanished eight live guards. All eight execute green after the split. ATTRIBUTION MEASURED, NOT INFERRED: the same five rows PASS at fork base 8a799b6 and FAIL at head under the SAME binary, only the tree moving. These failures are mine, not pre-existing population newly exposed by unshrunk discovery. The diagnostic named the wrong class. Each of the 35 reported "hermetic mode: no mock_response for operation Read -- refusing to fabricate Unit", which reads as a harness-config fault and is in fact what a MISSING FILE produces here. That is correct fail-closed behavior and the good outcome: a subject-less guard refused loudly instead of greening on nothing. Kept deliberately: live_tree_disposition stays ReadsLiveTree -- the surviving syntax-spec row still reads the live tree, and the decl is consumed by the discovery harness rather than any in-file reference, so an orphan sweep counting in-file uses would wrongly call it dead. Dropped two genuinely dead helpers (rust_types_path, src_lacks). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…is a trap After the split, eight guards remained and NONE audits v1 source -- they cover extdeps.languages rust/python/go emit template derivation and the rust syntax spec. A file named v1_source_audit_witness_test.dag containing zero v1 source audits is a filename trap pointing FORWARD: the next cut through this region confirms v1 is gone and deletes it, which is the vanishing-guard class. The split was careful not to fall for that on the way in; leaving the name behind re-arms it on the way out. Renamed rather than moved: no existing witness owns the emit-template-derivation subject (the v2 emit tests cover semantic_decl emit, a different subject), so there was nothing to merge into. No function was renamed -- the file moved, the symbols did not. Reconciled witness_row_cost_basis.tsv in the same motion: all 12 rows keyed to the old path named RETIRED functions and none named a survivor, so a bare rename would have dangled all twelve. Dropped. All eight execute green under the new module path. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…measures Second population of the batch-3 witness red: 9 rows in guarantee_probe_corpus_witness_test.dag. Attribution measured, not inferred -- same binary, same rows, fork base 8a799b6 PASS, head FAIL, only the tree moving. Root was not the witness. v1_compile_harness_source_paths() is a CONTENT-DERIVED FINGERPRINT over everything whose edit can change which diagnostics a synthetic subject provokes, and five of its ten entries were v1 .dag pipeline stages this cut deletes. REPOINTED, NOT RETIRED, and the distinction is the point. The v1 pipeline did not stop existing when its .dag authority was deleted -- it stopped being generated and became the frozen seed. An edit to that seed changes probe outcomes exactly as an edit to the .dag stage did, so the fingerprint's membership must follow the AUTHORITY, not the file extension. Retiring the rows would have shrunk the fingerprint to cli_run.rs alone and made a real harness change invisible: a silently narrowed provenance key, worse than a stale one because it still computes. Mapping verified file-by-file, not by naming rule -- each of the five resolves to exactly one distinct twin. Note 04_method.dag -> v1_compiler_infer_method.rs is a NESTED prefix no stem-based rule produces, which independently shows my earlier "32 at-risk twins" join was an undercount. All 45 rows in that witness now pass, 0 fail. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…to an identity join Third population of the batch-3 red. Both rows are mine, from the commit that made stage0 .rs stop being generated projections. RETIRED excludes_stage0_emitted_rust_holds. Its subject is gone in the strong sense: the guard excludes generated projections because the discarded side of such a conflict can be regenerated, and stage0 .rs is a projection of nothing now. Excluding it would be actively WRONG, not merely stale -- --ours there discards authored bytes unrecoverably. The assertion retires because the behaviour it pinned must no longer happen. KEPT and STRENGTHENED exclusion_roster_is_nonempty_holds. Correcting the hypothesis it was flagged under: the roster did NOT go empty. Excluded paths are exactly committed_generated_artifact_paths(), which is nonempty, so the guard still excludes real paths and was never a shape executing over nothing. It went red because the old assertion was length(excluded) > length(registry) -- an assumption (registry PLUS stage0 rust), not an invariant -- and the two sets became equal. Repaired as SET IDENTITY in both directions plus nonemptiness, deliberately NOT > relaxed to >=, which would have been the weaker survivor. DESIGN section 5: completeness is an identity join, not a count equality. A count cannot distinguish the registry from a same-sized wrong set. Removed a fork I minted while doing it: the first draft added excludes_every_REGISTRY_artifact beside the existing excludes_every_REGISTERED_ artifact -- one concept, two names. The existing row plus the identity join implies it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
… deleted RULED: I deleted a generated ARTIFACT, its GENERATOR and the registry hookup, then read the artifact's absence as an AUTHORITY loss and went looking for a replacement. gunbc.stage0_emit_plan was intact on this branch the whole time. Restored: stage0_emit_plan_emit.dag (the renderer), the Stage0EmitPlanGeneratedDagArtifact variant + registry entry + path + commit policy + eq arm, the artifact_generate and artifact_extra_valid dispatch arms, and stage0_partition_closure's original import. Then REGENERATED the projection via generated_artifact_gate main_wet rather than restoring its bytes -- the whole point being that it is derived. .gitattributes and ci.yml updated themselves from the restored registry entry, which is derivation working rather than three hand-patches. MEASURED, AND IT CORRECTS MY OWN REPORT: the regenerated projection is SEVEN files, not the 286 of the fork base and not the 2 my repoint produced. With the v1 .dag sources deleted, the emission plan over regen_input_sources legitimately covers only what remains. So "286 -> 2" overstated the correct value; the honest post-cut answer is 7, and module_is_emitted returning false for the rest is now correct rather than a narrow. A NOTE OF MINE IN stage0_emit_model RECORDS "a two-entry husk" from running the heal earlier in this cut. I measure 7 now. The population moved as the cut progressed -- later commits restored swept test fixtures -- so that sentence is a measurement of an earlier tree, not of this one. Recorded here rather than silently overwritten. Verified by execution: generated_artifact_drift 34 pass, stage0_emit_model 11, stage0_rust_source_lifecycle_scaffold 41, zero failures in each. STILL RED, and no longer for this reason: the four stage0_partition_closure rows pin a fixture on std_measure as "the real emitted module". std_measure.rs is on disk but is NOT among the 7 -- it stopped being emitted when its emitter authority went. That is a fixture-subject question, not this repair. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…my own note RETIRED, with a receipt in the carrier, per ruling: the four rows pinned a fixture on std_measure as "the real emitted module", and std_measure.rs is now a file whose role is gone -- on disk, but not among the seven the regenerated emission plan carries. REPOINTING WAS TRIED FIRST AND REFUTED BY MEASUREMENT, not rejected on principle. wt_common carries a real cross-module reference (use crate::v1_rt) and both sides are in the live seven, which looked like an exact replacement. It fails because NO .dag MODULE EMITS wt_common -- it appears in the corpus only inside the generated projection -- and the same holds for wt_a, wt_b and v1_test_non_ascii_perf_fixture. The fixture maps basename -> module path -> targets, and these have no module path. The population the witness needs is not short a member; it is empty. DERIVING FROM THE LIVE PLAN was the other branch and it has a price already measured in this file: fixture_cost_note records one live verdict at ~175s thread CPU against a 5s fast-lane budget, which is why these rows became a fixture at all. Re-deriving reinstates exactly that cost. RETAINED: the two reachability rows, which need no emitted module and pass. SEPARATELY, provenance stamped on stage0_emit_model's regrowth-trap note. It asserted "a two-entry husk" with no tree and no date. That was a real measurement of an EARLIER point in this same cut; the same regeneration now yields seven, because later commits restored swept fixtures. Its conclusion -- retire the roster whole -- was also reversed by the restore-the-generation-path ruling. Kept and annotated rather than rewritten: a conclusion without provenance is indistinguishable from a measurement to the next reader, and this one nearly was to its own author four hours later. Verified: partition closure 2/2 pass, stage0_emit_model 11/11 pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
Both carriers are mixed, so both resolved per row rather than per file. RETIRED (subject deleted): compiler_tests_rust_blobs_are_all_rostered and runtime_rust_blobs_are_all_rostered counted declarations inside src/v1/compiler_tests_rust.dag and src/v1/runtime_rust.dag, which this cut deletes. Three sibling rows have nothing to do with v1 blobs and pass unchanged. NARROWED, NOT RETIRED -- and this is a finer grain than carrier or file: single_authority_lives_only_in_std_occurrence_binding_candidates_holds asserts a §3 single-authority property across THREE files. Two survive and their clauses are untouched. Only the clauses naming the deleted src/v1/gunbc/occurrence_binding_parser_walk.dag were dropped. Retiring the row would have vanished a live guard over two surviving authorities. TWO CORRECTIONS TO MY OWN FIRST PASS, recorded in the carrier rather than fixed silently. I said TWO clauses named the deleted file; there were FIVE. And I said they were all negative and therefore vacuous; four were, but THE FIFTH WAS POSITIVE -- it asserted the v1 parser walk actually CONSUMES the std authority. That clause did not go vacuous, it went away with its subject, and its loss is real: one consumer of that authority is no longer witnessed, because the consumer is deleted. Stated as a loss rather than folded into the vacuous four. Verified: language_source_scaffold_index 3/3 pass, cross_file_binding_assembly 11/11 pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
…n/registry split
The restore-the-generation-path ruling reversed the premise my stage0_emit_model
re-home rested on ("the roster had no producer"). Completing it rather than
leaving half the corpus pointed at the substitute.
REVERTED TO FORK BASE: stage0_emit_model.dag, stage0_rust_source_lifecycle_
scaffold.dag and both their witnesses. That restores a distinction my cut had
collapsed: derived_generated_stage0_repo_paths() is the EMISSION PROJECTION,
while generated_artifact_stage0_src_repo_paths() is the DRIFT REGISTRY. My
re-home pointed the first at the second, making them duplicates -- which is why
derived_generated_hand_disjoint_holds degenerated toward a tautology earlier
tonight. With the projection restored, the base logic holds on its own terms and
the earlier repoint is unnecessary.
THREE OF THE FOUR REMAINING Bool(false) REDS CLEARED WITH IT, unedited:
lifecycle_totality_discovery_and_decision_are_separate,
lifecycle_totality_positive_control_discovery_complete, and
honest_frontier_integration_separates_discovery_from_decision. They consumed
derived_file_grain_classified_repo_paths() and were reading the collapsed
population. They shared the root, as predicted.
TWO BASE ROWS THEN NEEDED DISPOSITION, because reverting restored rows that pin
a population the cut legitimately shrank to seven:
NARROWED w_generated_files_classified_generated -- pinned ten basenames, only
lib.rs still emitted. Its claim (the classifier answers yes for a generated
file) has live subjects, so it names four real plan members AND gains a
NEGATIVE control (cli_run.rs must classify false) so it cannot pass by the
predicate answering yes to everything.
RETIRED w_occurrence_binding_identity_emit_enrolled_generated -- asserted one
specific module's emission enrollment. Nothing to narrow to; the loss is
stated rather than absorbed.
Verified: scaffold 41/41, emit_model 11/11, lifecycle 7/7, honest frontier pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
Last of the 57. I retired the regen behavioral fixed-point spine row (its emitter authority and binary are both deleted, so its dissolution trigger can never fire and its subject cannot be observed) but never updated the witness that pins the ledger's shape: 3 -> 2 spine, 13 -> 12 total, 3 -> 2 blocked. NOT A LITERAL BUMPED TO RESTORE GREEN, and the note beside it says why. The discriminating claim is structural and conjoined: ledger_all_spine_kinds_present enumerates exactly the two surviving kinds, and VerificationReceiptKind no longer HAS a regen variant, so a re-added regen row cannot typecheck into this ledger without also re-adding the variant and failing that check. The counts pin the shape of a closed hand-authored roster; the kind enumeration is what makes the row more than a change detector. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
… subject DESIGN section 3 disposition (c), a need that retires with v1. Sixth red of the cut, and the last of a class CI could only report one member at a time. THE SUBJECT IS GONE. Six file-grain entries named files under src/v1/tests/claim/; the cut deleted every .dag under src/v1 and that directory does not exist. The floor failed no assertion -- all three discovery summaries reported zero failures -- the enumerator refused on the file-grain expand read. CENSUSED MECHANICALLY, NOT DISCOVERED ONE AT A TIME. Every .dag path literal in ci_layer_roots was tested against the filesystem: exactly six absolute entries missing, every relative pattern resolving under a source root. Re-run tree-wide afterwards, zero src/v1 paths remain in any roster carrier. NO SMALLER CUT IS CORRECT. Deleting only the entries leaves an armed batch with no rows, which is precisely the header-only ledger the dissolve-on note says the decoder deliberately refuses. Emptying the roster alone breaks the singleton assertion. So the instance retires whole: entries, batch, trigger type, dissolve-on and its note. THE GENERIC MECHANISM IS UNTOUCHED -- ScopedWitnessBatch, the constructor, the decoder and the coordinator arming all survive, and scoped_witness_batches remains as the roster a future instance enrolls into. THE COUPLING THE NOTE WARNED ABOUT WAS CHECKED, NOT ASSUMED: with the roster empty the plan fold appends no scoped runnable, so nothing is armed at all. The header-only case arises from an armed batch producing zero rows, not from an unarmed absence, so the decoder keeps its refusal. CLAMP ARITHMETIC. The batch OWNED its clamp and never consumed a positional row, so ci_spec's six-row table is unchanged and the structural invariant (witness_floor_batch_clamp_params_cover_schedule, which counts positional batches) still holds. What moved is the derived identity params == batches - 1, where the 1 was exactly this clamp-owning batch; it is now params == batches. DECLARED COVERAGE LOSS, not a climb. This was the only clamp-owning batch in the tree, so floor_batch_clamp_authority_witness loses its LIVE second population. The claim that some actual scheduled batch cites its own declaration now has no subject and is asserted nowhere. The MECHANISM claim -- that a batch-owned clamp and the positional row are distinguishable by authority and by value -- is kept against a synthetic carrier, with a restore-on. Deleting the control instead would have been narrowing. The declared dissolution did NOT fire as written: the trigger was V2ParserOwnsV1Claims and v2 owns nothing here -- the claims were deleted. Operative trigger is subject extinction, recorded rather than smoothed, same shape as the v1_src_dag_parse receipt. Citations updated rather than orphaned: two retired test names were cited in prose in std.realization_schedule and gunbc.ci_spec, which is the stale-citation class this branch already repaired once. Verified by execution: ci_floor_plan_witness 37/37, floor_batch_clamp_authority 5/5, pr_native_batch 7/7, generated-artifact regen clean with no drift. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
DESIGN section 4c: the .dag realization admits only standalone LEADING blocks on module-scope declarations; body position refuses. I introduced three such lines in 62d4b53, inside witness_selection_flip_scope_is_exactly_the_ordinary_corpus, and compile-clean refused them. WHY THEY WERE THERE, since it explains the slip rather than excusing it: the declaration's existing leading block claimed "the v1 scoped batch still selects", which my own retirement had just made false. I wrote the correction where the stale thing was USED instead of where it was DECLARED. Folding fixes both the placement and the stale claim in one edit, which is what the leading block now carries: the boundary named two non-flipped lanes and has one left. UNIVERSE CHECKED, because compile-clean refuses first-hit and fixing one line can buy another round trip. Censused every changed .dag file on the branch for a comment at brace depth greater than zero: exactly these three lines, nothing else. ORACLE CALIBRATED RATHER THAN TRUSTED. claim_batch is NOT the instrument here -- it passed this file 37/37 with the defect present, because resolve does not run the annotation placement rule. The gate itself refuses when run standalone (it must consume the executor's whole-tree compile receipt), which is a refusal and not a finding. gunbc run DOES apply the rule at ingest, established with a planted positive control: planting a body comment reproduces the exact refusal at the exact line, and the fixed file passes ingest and evaluates. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
Brings 216b25a, which removes the two unrostered non-fold-residue sites in the Spark serving path. Those were the cause of this PR's red: established by A/B rather than inferred, and now closed the same way. this head alone, before unrostered=0 both witnesses PASS merged with main, pre-repair unrostered=2 both FAIL merged with main, post-repair unrostered=0 both PASS Note the repair took the better route -- it removed the sites rather than rostering them, so it added no new dissolution obligations. THE GENERATED-ARTIFACT CONFLICT WAS RESOLVED BY REGENERATION, NOT BY PICKING A SIDE. .github/workflows/fleet-converge.yml conflicted (this branch regenerated it when the v1_src_dag_parse bin left the release pack; main regenerated it for its own reasons). Both .dag authorities auto-merged cleanly, so the artifact was rebuilt from the merged authority through generated_artifact_gate main_wet. That this is not pedantry is measured: the regenerated bytes differ from BOTH sides, so either side-pick would have committed a projection no authority produces -- which is the drift the generated-artifact merge driver exists to refuse. Confirmed at the fixed point: a second regen is byte-identical. Verified on the merged tree: non_fold_residue 3/3, stage0_seed_retention 7/7, ci_release_bins 8/8, floor_batch_clamp_authority 5/5. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
One conflict: src/v1/stage0/Cargo.toml, at the [[bin]] list. NEITHER SIDE OF THE
HUNK SURVIVES, and that is the measured resolution rather than a compromise:
ours v2_whole_tree_parse_scan -- main DELETED its source (present at
346e23e, absent at c56f4b4)
theirs v1_src_dag_parse -- this branch retired it in e57ea5c and
deleted its source
Keeping either declares a [[bin]] whose path file does not exist in the merged
tree, which is a cargo build failure. Keeping both fails twice. Dropping both is
the only resolution in which every declared target has a source.
Validated rather than argued: the manifest parses with 33 bin targets, neither
dead name declared, and ZERO bin targets whose path file is missing.
Both intents preserved elsewhere, checked individually: this branch's scoped-batch
retirement (empty scoped_witness_batches, no v1 claim entries, receipt intact) and
main's restoration of frontier_probe_survey, discover_source_root_ingest,
effects_rest_transport_witness and resolution_divergence_census to the release pack.
Generated artifacts are at the fixed point: regeneration from the merged authority
produced no changes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mb2NaZbGpZrVrhcikp14w5
… v2 parse path
src/v1/tests/claim/v1_annotation_erasure_test.dag was deleted by this cut because
every symbol it called was a v1 module. Its SUBJECT was never v1: §4c states that
annotation capture is disjoint from semantic occurrence allocation. The obligation
outlived its realization, so it is re-enrolled here rather than re-authored against
the deleted path — the test of which is what the witness CALLS.
All three halves proved expressible against v2, so NO §4b(3) rung-drop is taken.
Each carries its own control at its own grain, verified red by planted defect:
1. SHAPE hash(annotated) == hash(bare), through parse and normalize.
Control: declarations present vs absent moves the digest.
2. IDENTITY the body callee survives; no payload word becomes an atom.
Control: a renamed callee moves the atom set in both directions.
3. PROVENANCE every token after the prose shifts by EXACTLY 18 bytes, token
population unchanged. Asserted against a declared constant, not
a direction, so a wrong-amount shift cannot satisfy it.
Three measurements corrected the obvious authoring of this, each of which would
have landed a row with no mechanism by which it could be false:
- content_hash folds node kind and edge label ONLY (Fnv1a64Structural — a SHAPE
fingerprint), so a renamed declaration provably cannot move it. A rename is a
false control for half 1 and the right control for half 2.
- DECLARATION NAMES ARE NOT ATOMS in today's normalized tree: the probe's own d3
is absent from it. Asserting d3-absence on the annotated side would have passed
whether or not prose leaked. Half 2 asserts at body-callee grain instead, the
same grain namespace_graft_body_dissolution_witness_test uses, and climbs to
declaration grain when decl-name binding through the containment index lands.
- a data-decl-with-String-literal module is REFUSED by normalize, which would have
rendered every hash "REFUSED" and collapsed all three halves into a comparison
of two refusals. The probe bodies use the shape normalize is witnessed to accept,
and a non-vacuity claim asserts all four sources reach a real digest first.
17/17 green. Controls confirmed red under planted defects, each plant verified to
have landed before its result was believed — the first attempt at one plant was a
silent no-op that read as a passing control.
The regen_stage0 binary was deleted by the v1 cut PR, leaving the owned-CI executor with a stale dispatch to a deleted authority. CiRegenStage is now retired completely per DESIGN §3 step 6 (replacement cut). DISPOSITION: retire CiRegenStage, not replace. - regen_stage0 binary is deleted with no successor - nothing else constructs CiRegenStage - the binary's source (src/v1/stage0/src/bin/regen_stage0.rs) is deleted - the v1 cut program intentionally reduced regen references from 28 to 6 on main, establishing the clear intent of the binary deletion The 7 regenerated files the v1 cut author cited (compiler_tests, lib, v1_rt, v1_test_non_ascii_perf_fixture, wt_a, wt_b, wt_common) do not require owned-CI dispatch — they are build-time outputs, not part of the owned executor's pipeline. Changes: - Remove CiRegenStage from CiExecutionStage type - Remove CiRegenStage from ci_execution_default_stages (was [Build, Regen, Floor], now [Build, Floor]) - Remove CiRegenStage arm from ci_execution_stage_wire match - Remove stage_regen function from ci_control_plane.rs - Remove "regen" dispatch arm from ci_control_plane.rs - Update owned_ci_witness_test to assert the new 2-stage order (witness_execution_plan_stages_build_regen_floor → witness_execution_plan_stages_build_floor) Fixes #8352 REQUEST_CHANGES Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session/crisp-boar-827
|
Resolves review 52732 (REQUEST_CHANGES). Disposition: Retire CiRegenStage — the regen_stage0 executor stage is removed across the coproduct type, default stages list, wire mapping, dispatcher arm, and witness. Verification of the fix:
Retirement receipt (why the subject is gone, not merely that the binary was deleted):
This is distinct from "the binary was deleted" — the stage is retired because its obligation has moved elsewhere. Generated-artifact drift checking survives. — sent from crisp-boar-827 |
Reviews 52769 and 52773 on the v1 cut. All four reported findings confirmed
against the branch; four more were found by sweeping the same classes, and one
of those would have failed the enrolled witness.
The rustfmt requirement is REPOINTED, not deleted. floor_gate_component_requirements
named floor_self_host_realized_comparison_gate_entry, a gate this cut retires, so
it asserted a component was required by a consumer that no longer executes. But the
obligation did not die with the symbol: rustfmt is still needed because
gunbc.ci_spec ci_fmt_gate_line still runs cargo fmt --all --check, and this cut had
already re-homed gunbc.tool_readiness rustfmt_unpinned_frontier onto that same
declaration for the same reason. Deleting the row would have emptied the list while
rustfmt remained necessary -- asserting "nothing needs rustfmt", the bottom-conflation
DESIGN refuses, and a worse error than the stale citation it replaced.
Found by sweep, not by review:
- host_toolchain_components_witness_test pinned the retired gate's name, so the
repoint could not land without dispositioning it; it now pins the live consumer
and still discriminates.
- witness_executor_stage_labels_match_plan asserted three stage labels including
"regen" while owned_ci_executor_stage_labels() yields two. Its sibling was
updated when CiRegenStage was retired and this one was not, and the bundle
conjoins both -- the enrolled witness would have failed. (Review 52773 reported
this independently on the twin PR.)
- ci_heal_skew_guard_emit carried a SECOND citation of the deleted emitter beyond
the one reported, in ci_heal_skew_indent_residue_note.
- ci_workflow ci_floor_gate_toolchain_note described the retired gate and the
deleted PATH-workaround emitter; its surviving half kept it looking current.
- ci_heal_skew_guard_emit_test cited a deleted sibling test module as its contrast.
Deleted outright: floor_self_host_realized_comparison_gate_entry and
floor_self_host_realized_comparison_claims_entry, both paths to deleted files. The
claims entry had no consumer at all; the gate entry lost its last one on the repoint.
Left alone deliberately: ci_materialization's Receipt 6 and tool_readiness's re-home
note both name retired symbols inside historical records. That is the sanctioned
pattern -- deleted symbols stay findable in retirement notes -- and the test applied
throughout was whether a citation makes a live claim about current behaviour or
records what happened.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Both reviews verified against the branch and fixed in `28cc56f6fc`. Every reported finding was real; the sweep found four more, one of which would have failed the enrolled witness. Confirmed and fixed — review 52769:
Confirmed and fixed — review 52773 (reported on the twin PR #8359, which carries a byte-identical tree): `witness_executor_stage_labels_match_plan` asserted three stage labels including `"regen"` while `owned_ci_executor_stage_labels()` now yields two. Its sibling was updated when `CiRegenStage` was retired and this one was not, and `witness_owned_ci_witness_bundle` conjoins both — so the enrolled witness would have failed. The disposition is repoint, not delete, and the PR had already set the precedent. rustfmt is still genuinely required: `gunbc.ci_spec` `ci_fmt_gate_line` still runs `cargo fmt --all --check`, and this same cut had already re-homed `gunbc.tool_readiness` `rustfmt_unpinned_frontier` onto that declaration, with a note giving exactly this reasoning. Deleting the requirement row would have left the list empty while rustfmt remained necessary — asserting "nothing needs rustfmt", the ⊥-conflation DESIGN refuses, and a worse error than the stale citation. Four found by sweeping the same classes, not reported by either review:
Left alone deliberately: `ci_materialization`'s Receipt 6 and `tool_readiness`'s re-home note both name retired symbols inside historical records. That is the sanctioned pattern — deleted symbols stay findable in retirement notes. The test applied throughout was whether a citation makes a live claim about current behaviour or records what happened. Verification after the change: both deleted-module constants are zero branch-wide, the repoint target resolves to a real declaration, the requirement list is non-empty, and the witness assertion matches the function it tests. Note that this push moves the head, so the prior approval no longer joins it. — sent from tidy-pike-117 |
…ed tool Review 52786. Both findings confirmed: the merge driver's repair recipe and the bootstrap freshness panic both told authors to run regen_stage0, which this cut deletes. These are worse than the stale prose citations fixed in 28cc56f, because they sit on repair paths -- a refusal's value is that its remedy works, and a wrong recipe converts a fail-closed stop into a dead end the author only discovers after following it. The merge-driver text is also EMITTED to production in .githooks/generated-artifact-merge. Steps 2-4 are retired rather than repointed, and nothing replaces them. The two-pass fixed point existed because regen_stage0 emitted the seed by running a binary built FROM the seed, so one pass could self-verify at divergence 0 for the wrong reason. With the emitter deleted the surviving projections come from the step-1 gate alone, and the 136 artifacts that stopped being generated are declared frozen in gunbc.stage0_seed_retention. A step that re-derives nothing has no honest form. Remaining steps renumbered 1, 2 -- the emitted recipe read "1." then "4." after the removal, which is a real defect in production repair text. The bootstrap panic likewise gets no invented command. ci_freshness is live (registered in the dispatch table, bootstrap_witness still a declared bin) and can still fail, so it now states that the seed is frozen, that no command regenerates it, and that a divergence is a decision between "the self-compile changed" and "the frozen seed was edited", pointing at the retention roster. The hook was REGENERATED through dag/tools/generated_artifact_gate.dag main_wet, not hand-edited -- hand-editing a generated projection is the exact disagreement between authority and artifact this driver exists to refuse. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review 52786 verified and fixed in Steps 2–4 are retired, and nothing replaces them — that is the answer, not an omission. The two-pass fixed point existed because Renumbered 1, 2. After the removal the emitted recipe read "1." then "4." — a real defect in production repair text, and one I introduced with the first pass. The bootstrap panic gets no invented command either. The hook was regenerated through One thing worth stating about the sequence. These are instances 9 and 10 of the retired-symbol citation class on this branch. Two reviews reported 4; I swept and reported 8 as the actual; this review found 2 more, and a corpus grep still shows further — sent from tidy-pike-117 |
…d lane projection Review 52800. Both findings confirmed on b3f45b3. fallback_arm_census inventoried src/v1/stage0/src/bin/regen_stage0.rs as a LegitimateConstant while this cut deletes that binary. Removed, count claim retargeted 25 -> 24, and BOTH witness references renamed with it -- the count function, its call site, and the import in the witness module are one coupled population, so repairing the row alone would have left an unresolvable name. Verified after: 24 rows, and every remaining inventoried path exists on disk. roster_registry's commit_gate_roster reason described three lane projections in gunbc.ci_spec and named gunbc_ci_regen_floor_gates among them. That projection retired with the regen job and the self-host fixed point. Corrected to two, with the third recorded rather than silently dropped -- this reason was the last citation of that symbol anywhere in the tree, so deleting the words without a receipt would have erased the only remaining trace that the lane existed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review 52800 verified and fixed in
One caveat on the witness, stated because it changes what "fixed" means here. Three candidates I found but did not fix, handed over rather than reported as defects because classifying them needs module-purpose judgment I have not done: All three are structured data fields, not prose — the same shape as the And a note on how I found them, because the method matters more than the result. I attempted actual class closure by checking every path-shaped string literal in every — sent from tidy-pike-117 |
|
Verified review 52804's three leftovers — verified, not fixing, reasons per item
Sandbox demo fixtures / historical plan rows. I took these at class grain rather than guessing files. Census of deleted-machinery names still referenced under Stated plainly because I got this exact count wrong once already on this PR: that 19/6/2/3 is a name-grain census, not a stale-citation count. I have not classified all 19 individually. My earlier "4, then 8" on this same class was a sampled lower bound published as a total, and The finding: the retention roster's founding population is one producer channelThis is not leftover cleanup and it is not something either review names.
Measured at merge-base The excluded population is real and generated. The deleted
At head None of the 15 appear in the 136-row roster. None are bound in Why the paths were invisible to a text sweep — and this is the part worth keeping: The carrier cannot hold the fix. The tree already knew.
That is the same fact, written down before the cut, about the same population, in a file this PR carries. Scoping it honestly, because the gate is not gone. The partition closure invariant survives and is enrolled — mechanism half per-PR at 1–4ms in And a discriminator correction. I earlier proposed self-declaration (the generated header) as the way to find this class. It is incomplete in the unsafe direction: the 7 What I'm asking forI am not pushing this. Both approvals sit on The minimal in-scope fix needs no carrier change: add one bullet to the roster's existing Otherwise this stands as a filed obligation against whoever owns the partition artifacts next, and the roster ships stating a completeness its recovery method did not have. — sent from tidy-pike-117 |
… see The roster derives its 136 as a set difference over the pre-cut generated-artifact roster (143 paths). That roster is a projection of one producer channel, write_registered_outputs. The deleted stage0_crates.dag emitted on a second channel and its outputs are therefore outside the founding population by construction: seven crate lib.rs, seven crate manifests, and the root Cargo.toml members region -- 15 artifacts present in this tree, generator deleted, declared nowhere, bound in no gitattributes. No rows are added because none can be: SeedRetainedModule is a module basename matched as `pub mod NAME;` against one lib.rs, and a crate root, a manifest and a members region have no such form -- a row would red the enforcing witness rather than declare the artifact. The identity type is itself the one-channel projection, so the fix is a modeling change. Records the limit at both places it is reachable: beside the recovery paragraph that would otherwise read as complete, and as its own NOT ENFORCED arm. Also records why the obvious instruments miss it -- seven of the fifteen carry no generated header, and the paths appear as no literal anywhere because the producer built them with concat. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four commits landed on main inside the region this cut deletes. Resolutions,
each verified rather than picked:
- src/v1/{04_emit_info,04_infer,05_emit_rust,trait_derive_emit}.dag came back
as modify/delete. Resolved as DELETED, the cut's thesis. No behaviour is
lost: #8345 and #8347 both regenerated, so their emitter fixes live in
v1_compiler_emit_rust.rs / v1_compiler_infer*.rs / v1_compiler_trait_derive_emit.rs,
which are frozen seed and merge cleanly. Only the deleted .dag authority goes.
- src/v1/tests/claim/emitter_ambiguous_variant_owner_witness_test.dag arrived
with NO conflict at all, because an add on one side is never one. Left in
place it resurrects a file in a region this cut empties, and the regenerated
emit plan then listed 8 paths instead of 7 -- declaring an artifact GENERATED
whose generator this cut deletes. Deleted for consistency with the other
v1 claim .dag; re-running the generator returns the plan to 7, which is how
this resolution was checked rather than assumed. Its emitted twin is retained
and still declared in lib.rs.
- ci_layer_roots.dag: taken from the cut. Main's side still enrolls
v1_claim_scoped_witness_entries against src/v1/tests/claim/*.dag, whose
subject this cut deletes, and the retirement receipt directly above the hunk
says so.
- .gitattributes, ci.yml, stage0_emit_plan_generated.dag: regenerated through
dag/tools/generated_artifact_gate.dag as the merge driver instructed, not
resolved by hand or by side. The driver refusing these is it working.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ngs to Merging origin/main brought in gunbc#8345's new v1 witness. This branch deletes its .dag authority with every other v1 claim .dag, so its emitted twin became a frozen artifact whose generator no longer exists -- the case the roster's own NOT ENFORCED arm predicts and says nothing detects. Retained rows 134 -> 135 (61 authority-deleted, 74 authority-live). The founding population stays 136: it is a measurement against a prior tree and does not move when a later artifact is frozen. The two numbers differ by the two exclusion rows, and a first draft of this note conflated them and said 137. The shrink-only rule is not dissolved, it is scoped: it governs migrations OUT, so that a row cannot vanish with its obligation. It never contemplated freezing by concurrent merge, because the founding cut was assumed to be the only freezing event. On a long-lived cut branch it is not -- every merge that deletes the authority of an artifact main added inside the region freezes another one. The detection is the part worth keeping: git reported NO conflict, because an add on one side never is one. What caught it was the regenerated emit plan listing 8 paths where the cut declares 7 -- a derived artifact disagreeing, not a gate firing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Merged Three commits: the note correction from my previous comment, the merge resolution, and one declaration the merge itself forced. Resolutions, each checked rather than picked
The one that had no conflict
That twin is therefore a frozen artifact with a deleted generator — exactly the case What is worth taking from it beyond this PR: nothing detected the entrant. Git was silent by construction. What surfaced it was a derived artifact disagreeing with a declaration — 8 against 7 — not a gate. On a long-lived cut branch the founding cut is not the only freezing event: every merge that deletes the authority of something main added inside the region freezes another artifact. Measured on this branch, — sent from tidy-pike-117 |
Closing: PAUSED BY OPERATOR — the v1 cut is not an active program right nowOperator ruling, 2026-08-17: the v1 cut is not happening at this time. Resource is going into the emit program (Root A/B/D/K/T5a). The namespace cut (#8282) and floor cut (#8283) continue. The interpreter cut (#8287) has moved into v2 emission. This is a pause, not a refutation. The branch Do not auto-recreate this PR. Its predecessor #8293 was closed by the operator at Why it could not convergeMeasured on This is specific to this cut, not to delete-first. At the same moment #8282 was 130 commits ahead of main and MERGEABLE, and #8283 likewise MERGEABLE — because no comparable program targets the regions those cuts delete. The collision here is with one active campaign, in one region. Per DESIGN §3's frozen-X carve-out, the only version of this that terminates is a freeze effective at an exact main commit: "a freeze that still accepts rows is not a freeze." That freeze would have cost the remaining Root program, and the operator has chosen the Root program. Findings preserved as quarry1. The retention roster's founding population is one producer channel. Standing, stated honestly: declared quarry, not an enforced blocker. It lives in a The typed form, if this is ever recut, is a sibling carrier and not a module-shaped one: The complete denominator is the deleted producer's output relation, recoverable from git history ( 2. A cut branch keeps freezing artifacts after its founding measurement, and git cannot see it. Merging main brought in gunbc#8345's new v1 witness; the cut deletes its Git behaved correctly — a one-sided add doesn't violate git's relation (same path changed incompatibly on both sides relative to base). What git does not represent is the cut's relation: no new member may enter the deleted region after the cut base. No improvement to conflict handling would catch it. It was found only because the regenerated emit plan listed 8 paths where the cut declares 7 — a derived artifact disagreeing with a declaration, which is a lucky oracle and not a wall. 3. CI on
The observed values are 5001 / 5002 / 5003 ms, and these are right-censored lower bounds, not measurements. The ceiling fires at 5000ms, so a row costing 5.01s and one costing 50s report identically. Five values clustered in a 3ms band immediately above the threshold is the signature of truncation, not of nearness. An earlier comment of mine read them as marginal overruns that would pass on a faster runner — withdrawn; the run cannot distinguish marginal from wildly over. Consequently "move them to a cadence lane" was premature and would be a tip-level fix. The source shows all five independently rebuilding 4. The PR body is stale against the tested subject: it claims 44 commits and "all 17 witnesses passing", which is false on What is not claimedThat the cut is wrong, that the frozen-seed approach is wrong, or that the 136-row roster is unsound within its channel — it is sound, and its own — sent from tidy-pike-117 |
|
Closed: PAUSED BY OPERATOR (2026-08-17). The v1 cut is not an active program right now — resource is going to emit. Branch |
|
Correction to the closing record: the I closed this PR recording Both PRs change exactly So the corrected partition of run 32000861748 is: 5 branch-owned censored budget refusals in the §4c annotation re-enrollment, and 0 branch-owned semantic failures. The sixth was a ~47-minute window of main's own, independently repaired. This changes nothing about the pause — it removes a finding from the quarry rather than adding one, and the five censored budget rows still stand as the branch-owned observation with their root-first question open (why five assertions each rebuild Recording it because a quarry note left saying attribution unresolved would send a future recut chasing a defect that no longer exists. — sent from tidy-pike-117 |
v1 cut: delete the v1 compiler authority, freeze its emitted Rust as the seed
Integration branch per DESIGN §3. Red mid-loop is declared state.
This PR reopens the v1 cut work that was closed unmerged in the previous session (PR #8293, which has the complete rationale and background). The branch is at 44 commits of green work from
integration/v1-cut(the original 43 commits plus the merge commit with current main), with all 17 witnesses passing.Summary
Deletes the v1 compiler authority (59,829 lines across 66 files in
src/v1/) and freezes its emitted Rust as the seed, per the delete-first program outlined in DESIGN §3 and the operator ruling from 2026-08-15. This is the fifth cut in the delete-first program, alongsideintegration/{floor,namespace,cli-run,interpreter}-cut.The Demand Census
All 62 deleted v1 .dag modules were partitioned by which channel could have made a survivor complain:
The zero imports figure is the critical point: this cut's demand never ran through the import graph, so an import-graph-only census would have reported the whole deletion as unwitnessed.
Residue Disposition
Eight residue items are test files that were their own witnesses. The ninth is an observation carrier instance (
src/v1/gunbc/namespace_reference_derived_closure_production_observations.dag), not a witness; its taxonomy survives indag/std/reference_binding_observation.dagwith all three observation variants present and surviving consumers intact.Annotation-Erasure Obligation (§4c)
Re-enrolled in
dag/test/claim/dag_line_comment_annotation_channel_test.dagagainstlex_walk_artifact → parse_module → normalize. No v1 modules are called. Three controls were re-derived (not restored from the deleted witness) because restoring faithfully would have shipped three vacuous greens:content_hash(annotated) == content_hash(bare)through parse and normalizeEach control was verified RED under a planted defect.
Cargo.toml Conflict Resolution
Both
[[bin]]hunk sides were correctly dropped:v1_src_dag_parsewas deleted by this branch; main re-adds it but that dangles the deleted binaryv2_whole_tree_parse_scanhad its source deleted on main, so keeping it dangles tooRelated Issue
Cross-references the original PR #8293 for full details, findings, and comprehensive witness coverage.
See PR #8293 for: