Repository navigation
Retire the gate/witness surface asymmetry with the regen job that was its only inhabitant - #8485
Conversation
Remove the regen driver binary, stage0 emit-plan authorities, regen verify gates/transports, skip witness, and the regen region in cli_run/v1_interpreter. Production regen CI was already gone; this deletes zero-consumer machinery per the regen root cut program. Co-authored-by: Cursor <cursoragent@cursor.com>
Restore required-regen as one claim_executor fold, remove stale gate and witness references to deleted comparison and emit-plan machinery, and repair the DAG corpus imports that blocked compilation. Co-authored-by: Cursor <cursoragent@cursor.com>
…tract. The required-regen fold now grounds planned population on committed stage0 files, refuses empty emit or missing candidate trees before any digest comparison, and adds admission witnesses so zero equals zero cannot report green. Co-authored-by: Cursor <cursoragent@cursor.com>
…onverge. Union the regen root cut with #8409 by dropping regen_stage0, regen_floor_skip_witness, and resolution_divergence_census from the derived pack authority and re-emitting fleet-converge.yml via main_wet. Co-authored-by: Cursor <cursoragent@cursor.com>
After stage0_emit_plan removal, merge policy rows derive from committed generated artifacts only — pin the witness to v1_interpreter_dispatch_generated.rs instead of plan-derived std_algebra.rs. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Move regen_input_sources and regen_source_roots to cli_run using build_module_path_index and collect_dag_files_result; drop duplicate walkers, path helpers, and fnv1a64 from required_regen_host (667 lines). Co-authored-by: Cursor <cursoragent@cursor.com>
Use no_string_paths instead of no_regen_refusals so drift and hand-unverifiable folds accumulate List<String>, matching collect_* helpers. Co-authored-by: Cursor <cursoragent@cursor.com>
Restore native_len Str fast path (reverts accidental deletion), derive generated stage0 paths from generated_artifact registry instead of live git observation, retire deleted scaffold builtin witness, and drop a greened roadmap_static_site row from floor_expected_red. Co-authored-by: Cursor <cursoragent@cursor.com>
Removing witness_site_artifact_model_populated left an extra closing brace that broke module parse and cascaded into annotation errors during strict preparation. Co-authored-by: Cursor <cursoragent@cursor.com>
Registry-based derived_generated_stage0_repo_paths now excludes layout overlap filenames like the prior git observation filter, restoring disjoint hand/generated semantics and lifecycle totality witnesses. Remove two witnesses that passed on the latest floor run. Co-authored-by: Cursor <cursoragent@cursor.com>
…band. Route BoardArticleRefusal discrimination through board_article_refusal_kind at the admission authority so cross-module witness matches do not fall through at runtime. Restore generated_stage0_files supply for lifecycle disjointness after the regen cut removed the emit-plan carrier. Raise required-floor claim budget to 1000ms to clear throttle-inflated marginal rows on long cgroup-throttled folds. Co-authored-by: Cursor <cursoragent@cursor.com>
Interpreter Record-pattern matching now falls back to the bare variant segment like the Variant arm, so cross-module match arms on coproduct refusals do not fall through non-exhaustive. Type empty BoardArticleRefusal list folds at the admission authority so refusal literals carry parent_enum. Remove 100 witnesses that passed while still enrolled in floor_expected_red. Co-authored-by: Cursor <cursoragent@cursor.com>
Drop identities main removed with the silent-pick gate retirement (#8409) so the roster matches post-rebase main. Co-authored-by: Cursor <cursoragent@cursor.com>
The interpreter no longer implements stage0_emission_source_identities_host or regen_verify failure-detail hosts; keep the generated EvalBuiltinArm match exhaustive so claim_executor builds. Co-authored-by: Cursor <cursoragent@cursor.com>
CI at 826bcde reported witness_authority_serializes_with_structure passing while still enrolled; remove it so the floor fold can green. Co-authored-by: Cursor <cursoragent@cursor.com>
# Conflicts: # dag/product/compute_board/admission.dag # dag/test/claim/compute_board_admission_witness_test.dag # src/v1/stage0/src/v1_interpreter.rs # src/v2/workflow/floor_expected_red.dag # src/v2/workflow/required_floor.dag
The merge took main's v1_interpreter.rs wholesale, restoring three builtin arms this cut deleted (stage0_emission_source_identities_host and the two regen_verify_gate failure-detail arms). Their dispatch entries are gone, so the macro no longer matched. Deletions re-applied; main's record-pattern helper is kept.
…501). review 53501 flagged RequiredRegenPhaseReceipt.elapsed_ms as a flat-scalar duration at a substrate seam. The deeper defect is that the carrier never carried anything: the host's time_phase() ignored both its accumulator and its name and returned f() unchanged, so `phases` was allocated empty, passed through the admission fold unread, and stored in every attempt as []. Nothing in the verdict reads it and no host path populates it. Re-typing the field on std.types Milliseconds would have grounded a unit that is never measured. Deleted instead: the type, the field, the parameter, the no-op time_phase, and the four [] literals in the witness. Elapsed is still reported by the host's own measured run_started.elapsed().
…ction-source coproduct. Two residues this cut left standing. ci_spec.dag still carried regen_floor_skip_witness_bin, its policy note, and the two script emitters that composed them (ci_regen_floor_skip_shortcut_script, gunbc_ci_regen_floor_only_script, gunbc_ci_regen_floor_run). They emitted a shell invocation of a binary this cut deleted, and no surviving workflow reaches them — .github/workflows carries only witnesses.yml and fleet-converge.yml, neither of which mentions regen. gunbc_ci_regen_floor_run had no caller outside its own module. Deleted, with the two imports that served only it. The regen-job GATE surface (project_ci_regen_job_gates, gunbc_ci_regen_floor_gates) is deliberately untouched: it is load-bearing to the enrollment-asymmetry wall in gunbc.commit_workflow and has live witness consumers. generated_projection_paths.dag carried GeneratedProjectionPathSource as a two-arm coproduct whose second arm, Stage0EmitPlanRetired, was uninhabited by construction after the stage0_emit_plan deletion (review 53512, advisory). With one source the axis carries nothing: the collision refusal named first_source and duplicate_source, both of which could only ever be CommittedGeneratedArtifact — a distinction the type promised and the population could not supply. The coproduct and the row's source field are deleted; the collision refusal keeps the path, which is the fact it actually establishes, and still refuses two committed artifacts claiming one path. Verified by execution on the merged tree: test.claim.gitattributes_emit_witness witness_holds returns true, and dag/gunbc/ci_spec.dag resolves.
…ro consumers, vacuous verdict. Neither name had a consumer anywhere in the tree — not production, not a witness. The host answers the fixed-point question itself: claim_executor's --required-regen-fixed-point calls cli_run::run_required_regen_fixed_point, which compares pass-1 and pass-2 digests in Rust and never evaluates this module. The success arm was also vacuous. It constructed RequiredRegenAttempt with generated_outcomes: [] and hand_outcomes: [] — the exact shape its sibling required_regen_sync_admission refuses as EmptyCommittedPopulation and EmptyEmitResult. A consumer receiving that verdict and asking how many surfaces matched would read zero, indistinguishable from a genuinely empty run. review 53522 read the reuse of RequiredRegenSyncRunnable as a naming smell; the name was the smaller half. Verified by execution on the merged tree: all five claims in required_regen_admission_witness_test return true individually, not only through the witness_holds conjunction. The wider finding this came out of — that the whole required_regen fold has no production consumer — is NOT addressed here and is with the operator.
… either side #8457 landed while this branch was open. One file conflicts, and one row inside it — dag/tools/floor_effect_gate_witness.dag, floor_gate_failure_receipt_note — where both sides are correct about different things in the same string: this branch changes the COUNTS, because the cut deletes the regen gate: eight _passes witnesses -> seven, five companions -> four, and regen_verify_gate_failure_receipt drops out of the enumeration main changes a PATH inside the same string, because #8457 moved the witness to dag/test/claim/long/extdeps_scope_placement_gate_... Resolving to either side alone loses a real change and loses it silently, because both produce a plausible sentence. Taking this branch's side reverts the note to a path whose file no longer exists there — the stale-citation class §3 names, which rots without anyone touching it. Taking main's side leaves the note asserting eight witnesses, five companions, and enumerating a companion this PR deletes. Both halves are kept: seven/four with the regen companion removed, AND the long/ path. Verified by assertion rather than by eye — the resolved row must contain the new path, must contain the corrected counts, and must not contain regen_verify_gate_failure_receipt. The rest of the merge is clean: six other files were touched by both branches and auto-merged, and the RegenVerifyGate enum removal, the tools.regen_verify_gate import deletion and the regen_verify_gate_passes/_failure_receipt pair come through without conflict. Worth recording: this row ends by confessing its own debt — "Frontier counts are hand-authored prose debt — dissolve-on: derived projection from this entry's declarations." This conflict IS that debt coming due. A hand-authored count of the module's own declarations collided with an unrelated path edit in one string, and produced a merge no machine can resolve and a human can get wrong two ways. Derived from the declarations, this side of the conflict would not exist: deleting the gate would change the number. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…oves. v1_interpreter.rs carried a hardcoded cross-claim memo keyed on the exact name "ci_heal_binary_source_skew_guard_script" at two sites, a getter and a setter. That name resolved on main against the unprefixed declaration in src/v2/workflow/ci_heal_skew_guard_emit.dag, which this branch deletes; no unprefixed declaration survives anywhere in the tree, so both branches match nothing. They are dead because of this cut, which makes this the only PR that can honestly remove them. ZERO_ARG_PURE_CROSS_CLAIM_MEMO goes with them. Its only reader and only writer were those two branches, so leaving the thread_local would keep a map that is never written and only cleared — the same dead-machinery class one level down. CROSS_CLAIM_FN_KEEPALIVE stays: the prepare_grammar path still uses it. Stated rather than left to be found, because it changes how the remaining half of that block should be read: deep-moth-771 established today that the prepare_grammar memo beside it CANNOT FIRE — its key bails on Value::Closure and every grammar in the corpus carries one (sync_tokens is a Set with a closure member, including the empty grammar in std/grammar.dag). That is the grammar lane's to resolve, not this cut's. With this deletion the thread_local holds one memo that cannot hit and one keepalive serving it. cargo build --release --bin claim_executor --bin gunbc green.
… stub, two live rosters.
review 53574 finding 1, plus two rosters no review found.
ORPHAN MODULE. src/v2/workflow/ci_regen_rustfmt_path_emit.dag emitted the
rustfmt-PATH shell for the regen job; its own note names regen_stage0's
standalone rustfmt spawn as the whole subject. With regen deleted the module
has no subject, and its only consumers were its own golden test and one
witness file — kept alive by its own test, which is the attractor DESIGN
section 3 says to uproot rather than leave as quarry. Module and test deleted.
EVIDENCE RE-ENROLLED, NOT RETIRED. The review named one consumer in
tool_readiness_witness_test.dag; there are FOUR, including the duplicate-rows
refusal control. Their subject is tool_readiness's UnpinnedFrontier arm, which
survives the cut, so the frontier row is re-declared locally as
witness_unpinned_frontier_row and all four re-pointed. Section 3 step 6: keep
the evidence for surviving claims, delete only the machinery.
HEAL STUB. gunbc_ci_heal_binary_source_skew_guard_script was a hardcoded
echo-and-exit-1 with no caller and no emitting workflow — a dead wrapper
better deleted than stubbed. Deleting it made three notes false in the present
tense ('The guard below refuses...' referring to nothing), so each now opens
with a RETIRED marker and reads as history. They are not deleted: they carry
the 2026-07-29 operator ruling and the #7348 incident receipt, and a prose row
deleted for one reason takes everything in it.
TWO LIVE ROSTERS, found by sweeping for the deleted name rather than by review.
devboot/program.dag offered_programs() still offered regen_stage0 as a
buildable target — its note reasons carefully about the missing-from-here
direction and does not cover this one, a name offered here that exists
nowhere. fallback_arm_census.dag inventoried the deleted
src/v1/stage0/src/bin/regen_stage0.rs; removing that row moved the pinned
count 25 -> 24 across three sites, because the count is encoded in a
DECLARATION NAME (fallback_arm_seed_inventory_count_is_25_holds) as well as in
the literal and the witness import. A count baked into a symbol is the
hand-count-beside-structure class, and it is why deleting one row touched two
files.
# Conflicts: # src/v1/stage0/src/cli_run.rs
…review 53574). The CI rung-drop bullet read: 'the regen_stage0 self-host fixed point and its regen_input_sources closure likewise survive, with only the required job that ran them removed.' That was true when written. This PR deletes regen_stage0.rs outright along with RegenVerifyGate and SelfHostStalenessGate, so the sentence would ship FALSE in the canonical authority — README and CLAUDE symlink to DESIGN.md, and every session plans from it. It is the exact failure the same paragraph names: a knowingly-false recital in the canonical authority is premise contamination, because each reader grounds a decision on something that no longer exists. Landing that class INTO the paragraph that defines it is the part worth refusing. The clause is REWRITTEN, not annotated — a second sentence beside the old one would be two accounts of one fact, the section 3 duplication, in a bullet already carrying a declared rung drop. It now separates the halves that this cut separates: the regen_input_sources import closure survives and is read by v1_compiler.required_regen_host, while the binary that consumed it and the two gates that invoked it are deleted at the root, leaving claim_executor --required-regen-fixed-point as the only answer to the fixed-point question. It also records that the old clause was true when written and which half this cut falsified, so the change is legible rather than silent. DESIGN.md is REGENERATED through generated_artifact_gate main_wet, not hand-edited — it is a projection of gunbc.design_document and a hand edit is reverted by drift heal. One line changed, matching the one carrier edit.
# Conflicts: # src/v2/test/claim/long/gauntlet_lane_enrollment_witness_test.dag
|
On the flagged residue — I measured it before sweeping, and the sweep would have been the wrong move.
And row 499 is not alone: Every one of those predates this PR. So the honest reading is that a snapshot taken two days ago has been outrun by two days of deletions, which is what snapshots do — and repairing exactly the one row this PR happens to touch would make the file look current while 255 others stayed stale. That is strictly worse than leaving it whole: a partially-updated snapshot is no longer a record of anything, and the next reader cannot tell which rows are observations and which are patches. The real defect is one the file shares with every census pinned to a tree: it carries no stamp. No commit, no date, no tree hash — so nothing about it announces that it is a past observation rather than a present fact, which is precisely why a reviewer reads a stale row as a sweep candidate. DESIGN §5 names this class directly: a measurement copied from the current tree is not an oracle. The fix is one header line naming the tree it was taken at, and it belongs to whoever owns the prose-policy audit lane, not to a surface-retirement PR. Not touching it here. This PR is approved and at 1/2 providers; pushing an unrelated one-line edit would clear that approval to make a stale file marginally less stale. — sent from tidy-lark-471 |
Follow-on to #8406, from the same branch. Its author (gentle-dove-530) archived when #8406 merged, so I resolved the conflict with main and am carrying it.
What this does
GithubActionsCiRegenJobwas deleted by the regen root cut. It was also the entire content of one wall claim: gates and witnesses needed SEPARATE scheduled-surface predicates because those two row kinds disagreed about exactly one surface — regen executed gates and executed no witnesses, so a witness parked there ran nowhere while still looking enrolled.Delete the surface and the two predicate bodies become byte-identical. The claim does not become hard to state; it stops being true of anything.
Why this is a retirement and not a re-specimen
The pair carried two claims, and only one died:
synthetic_enrolled_gate_rowridesGithubActionsCiJoband must pass,synthetic_bare_deenrolled_gate_rowridesGitPrePushHookalone and must red.GitPrePushHookstill counts for neither kind, by the standing ruling.enrollment_surface_asymmetry_retired_notecarries the retirement, and states plainly what is lost: if a future surface executes one kind and not the other, the split and its controls must be reintroduced, not merely re-pointed.Keeping the surface alive so the pair could keep demonstrating itself would be a modeled surface whose only consumer is its own evidence — DESIGN §6, an artifact with no final consumer, guards passing at
0 == 0.Conflict resolution
One file conflicted:
gauntlet_lane_enrollment_witness_test.dag. Merge base986413ab4f; main side was #8406 itself, branch side is this work. Took the branch side — strictly newer intent, already contains what #8406 landed there. Merge commit, no rebase. Verified after merging that no live (non-prose) reference to the deleted variant survives anywhere in the tree; the remaining mentions are retirement receipts.Check before merge
Run the gauntlet module and confirm the re-pointed pair still discriminates in both directions — enrolled row passes, bare de-enrolled row reds. If both pass, the wall has gone decorative, and that is the failure a clean textual merge cannot see.
🤖 Generated with Claude Code