Repository navigation
Repair 23 stale citations the cuts left behind — and say plainly that the lens which should have caught them still runs nowhere - #8774
Conversation
…ns an executing consumer v2.lens.cited_symbol_resolution was RED on unmodified main and nothing ran it: every witness carrying its live-corpus claim sits in dag/test/claim/long/, a file classified OfflineLocalRecipe. Measured on BuildBuddy against main: 27 production DeclarationRefs refuse. The repairs, by class rather than in bulk: - relocated subjects, repointed: v1.compiler.emit_rust x3 -> v1.compiler.coercion, v2.compiler.infer InferredTree -> v2.compiler.inferred_tree, ci_floor_plan gunbc_ci_fast_lane_rule_note -> gunbc.witness_row_cost - deleted subjects whose document keeps a live one: the dead additional_work is dropped - deleted subjects that were the document's only work, document still live: rebound to the system the document is actually about, each with the rebinding recorded on the row - documents whose whole subject a cut deleted: enumerated first, then deleted with their bind and their inbound links (falsifier-memory-root-cause-diagnosis, regen-divergence-ratchet-shape) The four remaining refusals are a different class - references into witness modules that decl_facts deliberately never indexes - and are wise-boar-649's typed counted disposition, not mine to repoint. Execution route: claim_executor --required-ci gains a cited-symbol phase. The required floor cannot host this census - run_required_floor declines any entry that reads the live tree, and reading the live corpus is the census's whole subject - so a phase, which is not a claim, is the route. It reports every refusal with its typed arm instead of a count.
# Conflicts: # ROADMAP.md
…not a landing artifact
…s one dodge is refused by execution Four documents bind to the witness that IS their evidence, and no resolver can reach it: v2.std.decl_index decl_facts does not index declarations in test .dag files, so a reference into a witness module refuses DECLARATION-ABSENT however correct it is. Measured with a positive control rather than assumed (BuildBuddy, 2026-08-21): all four target files report indexed_in_decl_facts=false / module_declared=true, while src/v2/lens/cited_symbol_resolution.dag and dag/gunbc/doc_graph_roots.dag report true/true. The control is the load-bearing arm - it proves the walk REACHES src/v2, so the skip is about the file being a TEST file and not about the root, and the src/v2/test row is the same class as the three under dag/test/claim rather than a second one. So the rows carry std.decl_ref CitationIndexCoverage - wise-boar-649's axis, consumed rather than re-minted - and the population is counted, not silently subtracted. THE DODGE THIS ADMITS IS REFUSED BY EXECUTION, NOT BY REVIEW. Marking a resolvable reference outside-index would shrink the population and green the census over something nobody checked. The report refuses such a row as OUTSIDE-INDEX-RESOLVES, per reference rather than by count identity: N refusals against N claimed is satisfiable by the WRONG N refusing once the population is live. Both arms executed on BuildBuddy against this head: census on the real type -> [] (the 23 repairs hold; nothing else refuses) one resolvable ref marked -> OUTSIDE-INDEX-RESOLVES gunbc.witness_row_cost gunbc_ci_fast_lane_rule_note The guard lives in the phase rather than in a witness deliberately: a witness carrying it would land in the same OfflineLocalRecipe file that executes nowhere, which is the defect this change exists to close.
Receipts, all by execution on BuildBuddy against this headThe repairs hold. The census over the real production population returns An empty result is a claim about the instrument first, so here is the discriminating arm. Marking one resolvable reference outside-index — a mutation, reverted — makes the same report return: So the The four uncitable references are settled as one class, with a positive control. All four target files report The guard is per-reference, not per-count. A count identity (N refusals against N claimed) is satisfiable by the wrong N refusing once the population is live and moving — so each marked reference is asserted to refuse on its own.
Blocked on#8775 ( |
The failing check is the declared dependency, and the same log is the enrollment receiptRun 32503722908 at
I am not fixing this by making the phase lenient. A census that cannot resolve its own subject is ignorance, not a pass, and the refusal above is the phase behaving exactly as specified. The fix is merge order: #8775, then integrate here. What this run bought that no local measurement couldThe phase executes on real CI. Still draft. On #8775's merge: integrate, re-measure the census and its cost against the integrated head (neither figure is portable across the integration), then out of draft. |
# Conflicts: # src/v1/stage0/src/bin/claim_executor.rs
…ment moves out The enrolment is a decision about the required lane's scope, made hours after the operator personally narrowed that lane (#8791, eight phases to three). That is the operator's call to make while the ink is wet, not mine to infer, so it is held as a separate change and these repairs stop waiting on it. Removed from this PR, unchanged and preserved on session/quiet-lark-881-phase: - the cited-symbol phase in claim_executor --required-ci - the lens report projection and its outside-index guard - the CitationIndexCoverage disposition for the four uncitable references, which also depends on gunbc#8775 landing first What remains is the repairs, which are independently correct and depend on nothing executing: they fix 23 stale citations that the floor cut, the regen cut and the falsifier deletion left behind. Also restored docs/plans/self-host-cargo-refusal-root-partition.md, which this branch had dropped against main - another lane's document, deleted by a merge rather than by a decision.
…landing artifact
dag/test/claim/long/cited_symbol_dangling_probe.dag is the throwaway module I used to read the
census and the index-coverage facts off a BuildBuddy runner. It was removed from the index once and
a later merge's `git add -A` put it back, which is how it reached review — where it read as an
intended artifact rather than as scaffolding ("the new probe module's imports all resolve").
It has no consumer, no dissolution obligation and no operator approval, so under DESIGN §6 it is an
undeclared scaffold and the correct landing state is its absence. Nothing depends on it: every
measurement it produced is already recorded in the PR discussion, and the same facts are reachable
from the lens itself in the held enrolment change.
|
Thanks — one thing in the review turned out to be a real finding, though it reads as a compliment. The probe module should never have been here, and I have removed it ( That is the general shape worth naming: a reviewer checking that a file is internally well-formed cannot see that it should not exist. The check that would have caught it is the one this PR's own subject is about — whether an artifact has an executing consumer. One diff entry is not a change of mine. Nothing else in the review needs action — the rebinding notes, the de-linking of the two deleted plans, and the §3/§4b framing are what the review confirms rather than questions. — sent from quiet-lark-881 |
…rose has no edge to refuse along (#8910) gunbc.ci_spec gunbc_ci_collect_fleet_convergence_invoke read, present tense, that it is the LIVE invocation wire for collect_fleet_convergence_wet, runs on main pushes downstream of the required ci check from srv1, and executes on a real cadence. It has ZERO consumers and built a step for ci.yml, which #8283 deleted. Measured 2026-08-22: no file under .github/workflows names that function; the three surviving workflows are witnesses, fleet-converge and fleet-desired. It cost real time. Read before the code, it agreed with what the code looked like, and it nearly produced a report of live SSH actuation against two rack positions with no chassis in them. Only enumerating the surviving workflows' --entry points separated the claim from the fact. The doctrine row is the general finding, and it is why this is ONE sentence corrected rather than a sweep (operator ruling): delete-first rests on the deletion BEING the census, every real dependent refusing loudly -- and a carrier that NAMES the deleted thing rather than importing it has no edge to refuse along. ci.yml is still named 99 times across 39 .dag files. Correcting seven sentences would fix seven sentences and leave the class open; the next workflow deleted decays identically. #8774 already ran that sweep once for the adjacent cited-symbol class, one day earlier, and could not see this population at all -- because a cited-SYMBOL lens cannot see a referent that is not a symbol. The next rung is verified rather than proposed: the path is ALREADY a symbol. gunbc.generated_artifact carries WitnessFloorYamlArtifact as a variant of a closed coproduct, so a carrier pointing at the variant instead of the filename gets its census from match exhaustiveness -- the refusal is structural and no lens has to run. Claude-Session: https://claude.ai/code/session_012q31BK3okLA8vG4kdTWtBf Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
What this fixes, and what it does not
v2.lens.cited_symbol_resolutionis the mechanism DESIGN §3 names for making a stale citation decidable. Measured by execution on BuildBuddy against main: it refuses 27 productionDeclarationRefs. It was not broken — it was unobserved. Every witness carrying its live-corpus claim lives indag/test/claim/long/cited_symbol_resolution_witness_test.dag, a file classifiedOfflineLocalRecipe: enrolled, executed nowhere.This PR repairs 23 of those references. It does not close the class.
Why 23 references were dangling
Every one is a citation whose subject a deletion removed while the citation stayed authored — the §3 stale-citation class, in a structural carrier rather than in prose:
v2.workflow.ci_floor_plan— module deleted by the floor cutgunbc.ci_workflow— deleted by the floor cutgunbc.falsifier_workflow+ its witness — deleted with the falsifiertools.regen_verify_transport/tools.floor_effect_gate_witness— deleted by the regen cutv1.compiler.emit_rust×3,v2.compiler.infer, the fast-lane rule note)v2.workflow.required_floorRequiredFloorClaim— a Rust type in the seed, never a.dagdeclarationThe repairs, by class
Each class has a different correct answer, so this is not a bulk rewrite.
Relocated subject → repoint.
v1.compiler.emit_rust→v1.compiler.coercion,v2.compiler.infer InferredTree→v2.compiler.inferred_tree,gunbc_ci_fast_lane_rule_note→gunbc.witness_row_cost(re-homed by the floor cut itself).Dead work beside a live one → drop the dead reference (5 rows).
Dead work was the document's only one, document still live → rebind to what the document is actually about, with the rebinding recorded on the row:
progress-observation-design→std.observation ObservationEvent;witness-realization-plan→std.emit_on_demand+std.realize_pack;ci-invocation-fixed-tax-attribution→ the frontend root its own §5 names;floor-time-namespace-walk-regression-diagnosis→ the reconcile-assembly row its §7 measures at 58% of the resolve wall;resolve-regression-journeyandci2-native-cutover-reobservation→ the surviving work each already carried.Whole subject deleted → enumerate, then delete the document with its bind and its inbound links. Two, each enumerated before deletion per DESIGN's rule that a prose row takes everything in it unless its contents are enumerated first:
falsifier-memory-root-cause-diagnosis— the A/B failure-class split, a witness list at a 2026-08-03 head, a governor receipt, an abandoned bisect, the falsifier job split. Enumerated, nothing survives the deleted falsifier; its one general lesson (BudgetExceededis host-sensitive and is not a semantic verdict) is already carried bygunbc.witness_deferral_freeze.regen-divergence-ratchet-shape— a shape proposal for a divergence ratchet onregen_stage0 --verify, deleted at the root by the regen cut. Enumerated, nothing survives; its B1 baseline-monotone idea is already DESIGN §5's monotone-debt-contract rule.Inbound links fixed in the same change:
ROADMAP.mdwith itsgunbc.roadmap_authorityrow, andseed-honesty-discharge-design.md.Held out of this PR, deliberately
Split on my parent's direction so a scope question does not gate real repairs:
v2.std.decl_indexdecl_factsdeliberately never indexes, so they are uncitable through this resolver by construction, not stale. Measured with a positive control: all four target files reportindexed_in_decl_facts=false / module_declared=truewhilesrc/v2/lens/cited_symbol_resolution.daganddag/gunbc/doc_graph_roots.dagreporttrue/true— the control proves the walk reachessrc/v2, so the skip is on the file being a test file, not on the root. Their disposition consumesCitationIndexCoveragefrom Enroll both instance-gap carriers in cited-symbol resolution, with a counted outside-index disposition #8775.cited-symbolphase inclaim_executor --required-ci, measured at 2m13s, verified executing on real CI. The required floor cannot host this census:run_required_floordeclines any entry that reads the live tree, and reading the live corpus is the census's whole subject. But CI keeps only the parse sweep, regen, and the witness floor: five phases leave --required-ci #8791 narrowed--required-cifrom eight phases to three by operator ruling hours earlier, so whether a fourth goes in is that ruling's owner's call. Held onsession/quiet-lark-881-phase.