Repository navigation
Exact witness admission: one function-grain authority replacing the exclusion/probe_red dual representation - #7719
Conversation
…xclusion/probe_red dual representation
One operational fact was represented twice, in two hand-synchronized rows: a
`WitnessExclusionRow { pattern: FILE.dag, classification: QuarantineProbeExpectRed }`
saying the FILE must not run through green-only discovery, beside a
`probe_red(entry, f)` row saying that exact FUNCTION must execute on the
expected-red lane. Neither derived from the other, and the reconciliation
guarding them was weaker than its name: it asked only whether SOME scheduled
row's entry CONTAINED the exclusion pattern as a substring. It proved neither
exact identity, nor one schedule row per exclusion, nor reverse coverage, nor
that every function hidden by the file-level exclusion had a consumer, nor
that the pair deleted atomically.
The bad state that remained expressible: a file holds an expected-red function
and an ordinary green one, the file-level exclusion hides both, the schedule
names only the red one, and the green one executes nowhere while the check
still passes. MEASURED on the pre-change tree, it had exactly one live
instance: seed_honesty_discharge_unavailable_test.dag, 8 of whose 9 functions
had no probe row while the file's classification named the whole file
QuarantineProbeExpectRed. Everywhere else the file-grain roster form or the
Phase 0(b) orphan refusal already covered it. The same imprecision forced a
documented workaround: self_host_03_normalize's exclusion row records that
QuarantineProbeExpectRed on the file would orphan its sibling, so the file was
downgraded to OfflineLocalRecipe in prose instead.
ROOT FIX - `gunbc.explicit_witness_admission`, one row per admitted witness:
ExplicitWitnessAdmission { witness: ScheduleWitnessEntry,
cadence: WitnessConsumerCadence,
reason: NonEmptyStr, dissolve_on: NonEmptyStr }
Everything else derives from it. `known_red_probe_roster()` is its
CorpusWitnessKind projection; `seed_emitter_behavioral_wet_known_red_entries`
is its ExecutionWitnessKind projection (its hand rows are deleted, the decl
name kept so no consumer changed); the discovery exclusion is read straight
off the rows by `floor_discovery_producer` at exact (entry, function) grain,
per test declaration rather than per file; the consumer manifest and the
admission reconciliation read the same rows. 13 pattern rows are deleted.
A deletion now removes admission, roster entry and exclusion in one edit -
the merge hazard #7688 paid for by hand.
SEPARATION. `witness_exclusion_frontier` is now a PATH POLICY carrier
(`test/claim/long/` is a home, `test/manual/` is offline). Exact admission and
broad path policy no longer share a substring representation:
`witness_exclusion_row_well_formed` REFUSES a QuarantineProbeExpectRed row
there outright, so the fused shape is unwritable rather than reconciled.
Precedence is total - exact admission decides the functions it covers, path
policy applies only to functions with none - which is why a path-offline file
may legitimately contain an exact-admitted function without either fact
restating the other. The four remaining executing cadences still author a path
row beside their rosters; that residue is named and counted in
`explicit_witness_admission_separation_note` with its dissolve-on, and it is
not the bad state today (each is file-grain or fully enumerated, measured).
WALLS, all executing: exactly one admission per witness; every admission names
a cadence that executes (DiscoverySelection / OfflineLocalRecipe /
FixtureExplicitRoster / NoConsumer refused, so an admission cannot satisfy the
has-a-consumer rule while running nowhere); every admission is reached by its
cadence's derived roster; every admission is excluded by derivation; no
admission is restated as a path-policy row. Admitted witnesses stay COUNTED in
the deferred-discovery receipt - with the pattern rows gone they would
otherwise have vanished from it, the uncounted degradation DESIGN 5 forbids in
the mechanism whose job is making deferral visible.
Evidence, by execution:
- dag/test/claim/exact_witness_admission_witness_test.dag - 9/9 PASS. The
discriminating RED asserts the admission reaches the admitted function and
NOT the named sibling (false by construction under the old shape), with a
file-grain control proving that shape does reach the sibling so the claim
cannot pass vacuously; plus duplicate-row and non-executing-cadence controls.
- cli_run.rs `explicit_witness_admission_is_exact_not_file_grain` - the same
discriminator on the host side; 5/5 witness_admission unit tests PASS.
- witness_exclusion_reconciliation_test 8/8, witness_admission_test 15/15,
ci_floor_plan_witness_test 31/31, floor_discovery_hand_rust_equivalence
23/23, proactive_verification_ledger_witness_test 1/1.
- whole-tree `--target dag` compile: 4 hard diagnostics, byte-identical to the
same compile on main (434e217) in a clean worktree - pre-existing, unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
6e99e2d to
8b27217
Compare
…dmission authority that a stash cycle resurrected into the branch It was the first-round shape of this lane's carrier (known-red rows only, no cadence field, no path-policy separation) and was replaced by gunbc.explicit_witness_admission before any consumer referenced it. Nothing imports it. Leaving it would have shipped a second copy of the authority whose whole purpose is that there is one — the violation this PR closes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ored assertion loses its subject when the wall works Review caught a real defect before merge: the discriminating assertion was anchored to live rows that gunbc#7688 deletes tonight. It hardcoded the seed-honesty entry, its admitted function and a named green sibling, and read the live roster — so when the operator's verdict lands, the closing contract greens and the quarantine climbs out under DESIGN 4b(4), the assertion would have had no subject left: passing vacuously, or redding for a reason with nothing to do with the wall. The instinct behind it was the right one in general — a wall is better evidenced by a defect that actually happened than by a synthetic one — but it binds the evidence to the defect's CONTINUED EXISTENCE, which is precisely what the wall exists to end. 4b(4) says a climb deletes the production machinery and keeps the evidence enrolled; a live-anchored assertion cannot satisfy that clause, because the machinery and the subject are the same rows. Same shape as the vacuous-green trap a sibling lane hit on G1 an hour ago: a gate whose population reached zero could not be distinguished from a predicate returning true unconditionally. So the primary assertion now runs against a fixture this witness authors itself — one admission over a fixture entry holding an expected-red function and an ordinary green one — asserting the admission reaches the first and not the second, with the file-grain control running the SAME predicate over the file-grain shape to show it DOES reach the sibling. Both arms are synthetic, so neither can lose its subject. The Rust discriminator is re-anchored the same way, against synthetic source rather than the live authority, and gains a population-independent companion: no live known-red admission uses the file-grain form. The three remaining live-row claims are universals and a projection identity — true at any roster size including zero — and a note says so explicitly, so nobody later mistakes them for where the discrimination lives. The seed-honesty instance survives as a past-tense provenance note in the witness and on the row itself, stating that no evidence is anchored to it and it deletes cleanly. That keeps the measurement that justifies the wall without making the wall depend on it. Evidence: witness 9/9 PASS after re-anchoring; 6/6 Rust witness_admission unit tests PASS (one new). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nforcement lens inventory TWO CLIMBS CARRIED ACROSS. #7709 landed the emit repair that greens cross_module_same_leaf_emits_qualifier_module_not_registry_winner, so main deleted its QuarantineProbeExpectRed exclusion row and its probe_red row — the same §4b(4) climb #7688 performed for seed-honesty one merge earlier. On this branch each of those pairs is ONE explicit_witness_admissions row, so each climb is one deletion. Known-red admissions go 18 -> 17 (11 CorpusWitnessKind + 6 ExecutionWitnessKind). Both conflict hunks are again the pre-migration shape versus the migrated one, so the representation comes from this side while main's substance is carried by hand — which is the hazard this lane exists to remove, and it is now the third merge in a row where taking a side wholesale would have silently dropped or resurrected admission rows. BROKEN CALLER, found by review (review 47781), verified and fixed. `witness_row_excluded_from_discovery` gained a `function` parameter so it can consult the admission authority at the grain the authority is written in. `v2.lens.enforcement.inventory` `cadence_scheduling_rows_for_witness` still called it with `entry:` alone — an arity mismatch that refuses at typecheck, and worse than that: it would have left the lens inventory disagreeing with `floor_discovery_producer` about grain, which is precisely what wall (4) says cannot happen. `function` was already in scope there and is now threaded through, so both readers ask the same question. WHY MY OWN CHECKS MISSED IT, recorded so the next person does not assume the gate covers this. `src/v2/lens/enforcement/inventory.dag` is outside the compiled import closure — the whole-tree `--target dag` compile reports it in the 1180 census-only modules, which are name-censused and not typechecked — and its witness, `enforcement_inventory_witness_test.dag`, is corpus-denominated and path-excluded from per-PR discovery (enforcement_coverage_exclusion_note). So neither the compile I ran nor the floor would have caught it; an offline witness plus a census-only module is a blind spot for exactly the re-signature class, and here the reviewer was the only mechanism that saw it. Green by execution after the fix, including the witness that reaches the repaired caller: enforcement_inventory_witness_test 10/10, exact_witness_admission_witness_test 9/9, witness_exclusion_reconciliation_test 8/8, witness_admission_test 15/15. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
review 47781 — confirmed and fixed in f8029b9.
Verified by execution rather than by typecheck alone: Worth recording why neither my whole-tree compile nor CI would have caught it. Also in the same push: main's #7709 climbed the qualified-leaf quarantine out, so its admission row is deleted here (known-red admissions 18 → 17), the same one-row deletion #7688's seed-honesty climb needed one merge earlier. — sent from calm-bee-513 |
Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com>
* Reconcile generated artifacts for occurrence identity debt receipt test. #7559 landed v1_tests_claim_occurrence_identity_debt_receipt_test.rs without lib.rs registration, .gitattributes merge driver row, or regenerated ci.yml heal exclude list — regen_verify_gate_passes failed on main. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Lane B: write v2-emitted Rust to disk with compile receipt. Extend candidate_generation through emit, Filesystem.Write, and a wet cargo smoke transport so the direct rust door proves provenance, disk write, and compilation without v1.compiler.emit_rust in the closure. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix direct rust door proof plan to return WalkPlan. claim_executor requires WalkPlan with finalization field, not a bare batch list. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix direct rust door contract imports for v2 std modules. Use length from v2.std.algebra and split Bool/Int/List/String across v2.std.logic, v2.std.integer, v2.std.collection, and v2.std.text so discovery resolve succeeds on the acceptance witnesses. Co-authored-by: Cursor <cursoragent@cursor.com> * Exclude wet direct-rust-door compile witness from hermetic discovery. Hermetic CI cannot mock Filesystem.Write or shell.Mktemp.Dir; provenance and closing-contract witnesses stay on the discovery path while the cargo compile smoke runs via the offline wet recipe in tools.direct_rust_door_transport. Co-authored-by: Cursor <cursoragent@cursor.com> * Address review: scaffold Cargo.toml debt, drop golden-string gate. Mark direct_rust_door_cargo_toml with feature:medium_structure_containment and a named dissolve-on trigger. WrittenSourceIndependentOfSeedEmitter now checks only seed-free closure provenance; byte oracle stays on the discriminating provenance witness. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix v2_interpreted_emitter_closure module path for honest provenance. Record v2.compiler.self_host.candidate_generation (the real module authority) instead of the fabricated v2.compiler.candidate_generation path minted receipts were carrying. Co-authored-by: Cursor <cursoragent@cursor.com> * Route wet transport through candidate_generation write authority. direct_rust_door_transport now calls mint_written_provenanced_rust_artifact instead of duplicating Filesystem.Write of Cargo.toml and src/main.rs. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Operator freeze: monotonic receipts, ingest path, run closure. SourceProduced-only mint before cargo; advance_written after compile. Witnesses and wet transport use generate_*_from_ingest; closure from realized_closure_for_v2_direct_rust_door_emit_run() not static data. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Route wet transport through mint_written/write_rust_workspace authority. Review 47560: collapse parallel Filesystem.Write in transport; wet smoke calls candidate_generation.mint_written_provenanced_rust_artifact only. Fixture scaffold uses lib crate so emitted add fn compiles; CargoGreen advances only after cargo build executes (SourceProduced first). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Meet review-ready conditions: merge main, closure post-emit, quarantine. Merge main (#7704 landed). Bind realized_closure inside candidate_generation only after generate_rust_emission_candidate succeeds; remove caller-supplied closure parameters. Point acceptance quarantine probe to long-lane witness; update roadmap authority entry. Wet smoke still PASS on write_rust_workspace path. Co-authored-by: Cursor <cursoragent@cursor.com> * Rebase onto main (#7719 witness admission, #7720). Resolve ci_layer_roots conflicts by keeping explicit_witness_admission single authority; repoint direct-rust-door quarantine to long path. Sync stage0 after rebase (regen_divergence_count=0). Co-authored-by: Cursor <cursoragent@cursor.com> * Sync stage0_std_core crate index after rebase regen. Removes std_keyed_row/std_keyed_roster module paths dropped by main; required for regen_stage0 --verify split-crate boundary check. Co-authored-by: Cursor <cursoragent@cursor.com> * Sync stage0 measure/schedule emit after trait-derive Clone bounds. Fresh self-emit adds Clone generic param bounds on std_measure helpers; regen_stage0 --verify was failing on CI regen_verify_gate_passes. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * WIP: Lane B: direct v2 Rust door — emit one provenanced Rust artifact * Address review 47861: drop orphan proof plan, fix long-lane reasons. Delete unused direct_rust_door_proof_plan (enrollment is falsifier_substrate_long_lane_rows). Witness notes cite that authority with local recipes. SubstrateLongLaneRow reasons separate eval-budget routing from the ingest-path functional gap on closing-contract witnesses. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
What this does
One operational fact was represented twice in
dag/gunbc/ci_layer_roots.dag, in two hand-synchronized rows: aWitnessExclusionRow { pattern: FILE.dag, classification: QuarantineProbeExpectRed }saying the FILE must not run through green-only discovery, beside aprobe_red(entry, f)row saying that exact FUNCTION must execute on the expected-red lane. Neither derived from the other.gunbc.explicit_witness_admissionis now the single function-grain authority:Everything else derives from it —
known_red_probe_roster()(CorpusWitnessKind projection),seed_emitter_behavioral_wet_known_red_entries(ExecutionWitnessKind projection; hand rows deleted, decl name kept so no consumer changed), the discovery exclusion (read off the rows byfloor_discovery_producerper test declaration rather than per file), the consumer manifest, and the reconciliation. 13 pattern rows deleted. A deletion now removes admission, roster entry and exclusion in one edit.witness_exclusion_frontierbecomes a path-policy carrier andwitness_exclusion_row_well_formedREFUSESQuarantineProbeExpectRedthere, so the fused shape is unwritable rather than reconciled. Precedence is total: exact admission decides the functions it covers, path policy applies only to functions with none.Status
DONE and green by execution. The known-red cadence is fully migrated; all walls execute. Nothing in this PR is a stub or a placeholder.
IN FLIGHT: nothing. All work is committed and pushed. There is no local state.
BLOCKED: nothing. No question is outstanding for the parent or the operator.
CI: on the pre-merge head,
build,regen(10m2s — the self-host fixed point) andheal_generated_artifactsall passed; the floorcijob had not finished before main moved and the branch had to be re-merged. It needs a fresh run on the current head. If it is red, the surfaces to look at first are the seven files that re-enter the discovery walk now that their path rows are gone —logic_ground_truth_test.dag,english_emit_add_test.dag, and the fiveself_host_*_behavioral_witness_test.dagfiles — where the producer now reads each file and drops only the admitted functions rather than skipping the file wholesale.What I would do next if I continued: resolve the expected
ci_layer_roots.dagconflict with #7688 (see below), then nothing else on this lane. The remaining migration is deliberately not next; see the residue section.Two findings that the diff does not show
1. The bad state had exactly ONE live instance, and only under a specific condition.
Window: the pre-change tree at
434e217. Denominator: all 13QuarantineProbeExpectRedpattern rows and all 33 exclusion rows carrying an executing cadence (BinWitnessWet23,QuarantineProbeExpectRed13,FalsifierSubstrateLongLane4,FalsifierRehomedBinWet3). Method: for each such pattern, expand it against every*_test.dagin the tree, enumerate that file'stest fn/test datadeclarations, and subtract the (entry, function) pairs covered by any function-grain roster — treating the empty-function form as covering every declaration in its entry, which is whatexpand_explicit_entriesdoes at execution time.Result: 8 unscheduled functions, all in one file —
seed_honesty_discharge_unavailable_test.dag, 8 of whose 9 functions had no probe row while the file's classification named the whole fileQuarantineProbeExpectRed. They were absorbed asOfflineLocalRecipeby thetest/claim/execution/path policy, which is why the Phase 0(b) orphan refusal never saw them.The condition matters more than the count: absorption happens only where an explicit-cadence file exclusion also sits under a broad path policy. That is the exact-admission/path-policy fusion, confirmed by measurement rather than assumed. Everywhere else the file-grain roster form or the Phase 0(b) refusal already covered it.
2. A hypothesis I was handed, refuted. I was told six quarantine patterns had no matching
probe_redand asked to establish whether they were the bad state or a different classification. They are a different classification, not a defect: fiveself_host_*_behavioral_witness_test.dagfiles plus03_normalizeare SelfEmitted wet assemble-red receipts whose function-grain roster isfalsifier_self_host_wet_known_red_entries, notknown_red_probe_entries. Each of those files carries exactly onetest fnand it is on that roster, so no orphan exists. They are the same dual representation at a differentWitnessKind, which is why this PR migrates them in beside the hermetic rows rather than leaving them.3. A design mistake, caught in review, worth not re-deriving. My first discriminating RED was anchored to the real live defect above — hardcoded entry, admitted function, named green sibling, reading the live roster. Anchoring to a real defect is normally the stronger move, and here it was wrong: it binds the evidence to the defect's continued existence, which is the one thing a wall exists to end. #7688 dissolves that quarantine, which would have left the assertion with no subject — passing vacuously, or redding for a reason unrelated to the wall. DESIGN §4b(4) says a climb deletes the production machinery and keeps the evidence enrolled; a live-anchored assertion cannot satisfy that clause because the machinery and the subject are the same rows. Re-anchored to a synthetic fixture, with a file-grain control running the same predicate to show it DOES reach the sibling, so the
falseis a decision about grain and not a predicate that never matches. Same fix on the Rust side. The live instance survives as a past-tense provenance note.Note for whoever reads the approvals: one review praised the live anchor as "a real green→red flip, not a synthetic". It reviewed the commit before the re-anchoring, and that praise was for precisely the property that had to be removed.
Residue I deliberately did not close
BinWitnessWet,FalsifierRehomedBinWet,FalsifierSubstrateLongLaneandFalsifierSelfHostWetstill author a path row beside their function-grain rosters. Measured on this change's tree, none of them is the bad state — every one is either a file-grain roster row or fully enumerated. Migrating ~70 more rows through the load-bearing floor in one PR is where I judged risk to outrun benefit. It is carried as a counted frontier with a dissolve-on inexplicit_witness_admission_separation_note, not left silent: when each cadence's roster moves to the admission authority,witness_exclusion_row_well_formedwidens to refuse that cadence too, and the last enum arm that can appear in the path carrier is gone.Merge hazard — encountered three times, resolved
main is merged in (through #7709). The conflict predicted here happened on every merge and always in the same shape: main holds the pre-migration dual representation, this branch holds it migrated, so the representation comes from this side while main's substance is carried by hand. Taking either side wholesale would have silently dropped or resurrected admission rows with no conflict marker — the hazard that motivated this lane, met three times in one evening.
Two §4b(4) climbs landed on main while this was open and are carried across, each as a single row deletion where main needed two:
cross_module_same_leaf_emits_qualifier_module_not_registry_winner.Known-red admissions: 19 → 17 (11 CorpusWitnessKind + 6 ExecutionWitnessKind). No evidence moved with either climb — the discriminating RED was re-anchored to a synthetic fixture in
b353eb9precisely so a climb could not take the witness's subject with it, which is the anchoring fix paying for itself twice within the hour.The inherited main breakage — diagnosed here, repaired on main, now merged in
For a period this PR's
buildfailed witherror[E0061]:v1_compiler_emit_rust.rs:14088calledv1_generic_params_needing_clone_boundwith 6 arguments wherev1_compiler_trait_derive_emit.rs:321declares 9. It was never caused here — both files were byte-identical toorigin/main, and main's own runs failed identically.Cause, and it is worth keeping: a generated-artifact merge collision. #7708 changed that function from 6 params to 9 and updated its one call site, touching both the hand file and the generated
v1_compiler_emit_rust.rs. #7709 then rewrote 372 lines of that same generated file, regenerated from a base predating #7708, reverting the call site to 6 args. Git merged both without a conflict because the hunks were textually disjoint. There is exactly one call site in the file, which forecloses the missed-second-caller reading: this was one lane's regen output silently clobbering another lane's substance inside a derived artifact. Two changes to one generated file, merged clean, one dropping the other, no marker and no gate. Structurally the same hazard as the roster hazard above — which is what this PR removes for admission rows.A finding that outlives the incident: the heal path has a hole exactly where it is needed.
heal_generated_artifactsis the job that would regenerate a drifted artifact, but it is gated behindbuild. So it repairs every class of generated-artifact drift except the one that breaks compilation — the one case wherebuildcannot pass to let it run. On this PR's failing run,buildfailed at 1m8s andci,regenandheal_generated_artifactsall showedskipping. A regen cannot rescue it either, because regen runs the seed binary and the seed binary is what fails to build. That makes this class of break permanently manual. It is a property of the heal wiring, not of this PR, and is recorded separately for the operator.Repaired on main by #7733 (main
19cc776d4e, run 30787387741 withbuildandregenboth success), and merged into this branch at6c6a7b4. Verified rather than assumed:git diff origin/main...HEAD -- src/v1/stage0/src/v1_compiler_emit_rust.rsis empty — this branch contributes no change to that generated file, so the merge cannot have reverted the repair. (The three-dot merge-base diff is the right oracle; a direct compare against main produces false alarms when a branch is merely behind.)gunbc.stage0_emit_plan_generated.generated_stage0_files;cli_run.rsandclaim_executor.rsare hand-Rust and appear in neither.cargo check -p v1-compiler-tests --tests, now passes locally on the merged tree.No content changed in this merge — the approvals stand against the same work, and CI reruns on the new head.
A blind spot this PR found the hard way
review 47781caught a broken caller I had missed:v2.lens.enforcement.inventorystill calledwitness_row_excluded_from_discoverywithentry:alone after it gained itsfunctionparameter. Fixed inf8029b9by threadingfunctionthrough (it was already in scope), verified byenforcement_inventory_witness_test.dag10/10 PASS.The part worth keeping is why no automated check would have caught it.
src/v2/lens/enforcement/inventory.dagis outside the compiled import closure — the whole-tree--target dagcompile reports it among the 1180 census-only modules, which are name-censused and not typechecked — and its only witness is corpus-denominated and path-excluded from per-PR discovery underenforcement_coverage_exclusion_note. A census-only module whose only witness is offline is a structural blind spot for the re-signature class: neither the compile nor the floor sees it. On this PR the review was the only mechanism that did.Evidence, by execution
dag/test/claim/exact_witness_admission_witness_test.dag— 9/9 PASS. Discriminating RED plus a file-grain control so the sibling claim cannot pass vacuously; duplicate-row and non-executing-cadence controls.cli_run.rswitness_admission unit tests — 6/6 PASS, including the host-side discriminator against synthetic source and a population-independent companion (no live known-red admission uses the file-grain form).witness_exclusion_reconciliation_test8/8 ·witness_admission_test15/15 ·ci_floor_plan_witness_test31/31 ·floor_discovery_hand_rust_equivalence_witness_test23/23 ·proactive_verification_ledger_witness_test1/1.--target dagcompile: 4 hard diagnostics, identical to the same compile on main (434e217) run in a clean worktree with the same binary — pre-existingunresolved type 'Empty'rows in06_translate.dag, unchanged by this PR.— sent from calm-bee-513