Skip to content

Retire the parse walker reference_sites_from_parsed_module onto collect_reference_sites - #12910

Merged
briansrls merged 14 commits into
mainfrom
session/bold-crane-252
Oct 2, 2026
Merged

briansrls merged 14 commits into
mainfrom
session/bold-crane-252

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

What

Retires the parse walker v2.lens.reference_deps reference_sites_from_parsed_module, a replacement migration under DESIGN §3. It also deletes the walker's parsed census and its parsed closure walk. After this, reference sites have one authority, v2.compiler.reference_site_collector collect_reference_sites, and dependency edges have one producer, v2.lens.module_graph dependency_resolution_facts_live. That producer is import facts plus edges derived from the collector's sites. Nothing falls back to the walker.

Step 1: the cells disagreed, and the walker was the one at fault

New cells in v2.test.claim.namespace_xl0.qualified_site_enumerator_differential use the fixture fn qsd_call() -> Bool { v2.test.qsd_provider.qsd_callee(x: v2.test.qsd_provider.qsd_argument) }. Run with claim_batch at pin ebcc7cdfbd25, on a 28 GB runner with the cgroup recipe:

run dotted callee call argument
agreement cell as written FAIL FAIL
collector half negated FAIL FAIL
walker half negated PASS PASS

So the collector sees both sites and the walker sees neither: it has no postfix handling. This was escalated, and gentle-koi-724 ruled option A: retire the walker, and keep the cells as checks on the collector.

Cells now: the collector's exact site set

qsd_call's body must carry exactly two sites:

  • …qsd_call.arrow_body_edge @ v2.test.qsd_provider.qsd_callee
  • …qsd_call.arrow_body_edge.x @ v2.test.qsd_provider.qsd_argument

These positions were captured from the collector itself. The parameter and field cells remain as collector presence checks. Run with claim_batch at 87447bb3:

run parameter field callee (exact) argument (exact)
as written PASS PASS PASS PASS
collector mutated: named edges don't extend position PASS PASS FAIL FAIL
collector mutated: qualified spelling replaced FAIL FAIL FAIL FAIL

Step 2: who consumed the walker, and where each went

I grepped for every consumer before deleting.

  • The census, the parsed BFS and the parsed closure: reference_resolution_facts_from_parsed_corpus, reference_closure_bfs_parsed_walk, reference_closure_parsed_live and the *_census_live / *_facts_live / refusal_count_live family. None had a consumer outside the lens. They duplicated module_graph's dependency_resolution_facts_live and dependency_closure_live_excluding. Those already compose import facts with reference_derived_resolution_facts, which is built on collect_module_reference_sites, and their own notes forbid a second edge producer beside them. So I deleted these rather than rebuilding them on raw sites. A rebuild would have been a second edge producer: a §3 fork and a dangling declaration under §3c.
  • reference_parsed_tree_facts_match_import_facts_at_path: replaced by reference_dependency_facts_match_import_facts_at_path. It compares the producer's keyed edges for a path (dependency_resolution_facts_at_live) with that path's import facts, at (path, module) identity, in both directions.
  • reference_closure_ingest_refusal_witness: now refuses on the ingest route the collector consumes (module_roots_from_source_root_ingest).
  • dag/test/claim/long/reference_closure_equivalence_test: repointed onto both of the above.
  • The differential test: its qsd_parsed floor-share row is removed.
  • Deliberately kept: reference_qn_from_import_decl_strict. It reads import declarations for admission_from_module_root, which is live in frontier_probe and compile_door_ledger. It is not a reference-site walker.

Also deleted, in the same PR: reference_deps_dissolve_on, the Scaffold disposition, the dissolution note and its gunbc.dissolution_migration_census row, and the parsed-closure observation types.

Delta: no edge changes in either direction

The old walker census and the new producer's keyed edges were run per file, at pin ebcc7cdf (where both exist), over all 11 members of the conformance closure, including the conformance entry and src/v2/std/node.dag. The result is identical edge sets, with 0 added and 0 dropped in every file, and 0 OOM kills. No growth shows up here because these std files contain no dotted calls. Growth appears where a module is reached only through a dotted call or a call argument, which is the fixture case above.

Two closures were not compared:

  • The old parsed closure walk did not finish within the runner deadline. That matches the lens's own recorded "no result within 15 minutes" observation, and the walk had no consumer.
  • reference_closure_live never used the walker (it is the import closure), so it is unchanged.

The B2 safety wall is removed, and its check is now held by two claims that run

This section records the removal against the B2 ruling (operator, sharp-bee-290). The ruling was revised option A, approved by default after escalation through gentle-koi-724 and neat-boar-16 to the operator.

Why the wall could not stay. dag/test/claim/long/reference_closure_equivalence_test did not resolve on main: it used gunbc.ci_layer_roots witness_layer_roots without importing it. Its golden list had gone stale behind that failure. Once this PR repaired it, the floor ran it as a changed witness, and it took 14.1s against the 8s budget (floor run 36883586866, COMPLETED-OVER-COST-REQUIREMENT). Rostering it would not have helped: the file had to change, because it called the census this PR deletes.

The claim that was cited as covering it was not running either. import_closure_live_test had the same unimported name and the same stale golden. Even once it resolved, the floor counted it as declined_long and never ran it. Both failures are now recorded in gunbc.recurring_failure_mode admitted_module_without_judged_standing.

What holds the check now (DESIGN §3 pairing: a supplied-input claim plus a real-route claim):

  • The real corpus: test.claim.module_graph.import_closure_live. It moved out of test/claim/long/ into a per-PR home, and its frozen deferral row is dropped.
    • Its golden list is derived from each file's declared imports, not copied from the producer's output.
    • Its pool is the golden members' directories, computed inside the test.
    • It asserts that every import in the closure resolves inside that pool, so narrowing the pool cannot hide an edge.
    • It executes green on the floor: run 36883586866, [changed-witness] … import_closure_live … outcome=passed, observed_wall_ms=843. That is under 8s, but over the 302ms enrolment margin, so it has a typed cost-debt row in v2.workflow.floor_cost_debt_admission, granted by deep-ferret-305 and conditioned by jolly-boar-500. Its retirement trigger is the gunbc.resolver_cost_frontier row for the whole-pool heads demand (demand-engine M1).
  • The supplied input: test.claim.module_graph.demand_closure_agreement_witness. It runs the same walk (import_closure_live delegates to dependency_closure_live_excluding) over dag/test/fixture/demand_closure. Its header cited a broker witness that does not exist; it now cites import_closure_live.

Receipts. claim_batch on a 28 GB runner with the cgroup recipe:

claim / run commit result
import_closure_live, as written 0f5101d PASS, 554 ms
— golden member removed 0f5101d FAIL
— extra import on the entry 0f5101d FAIL
— import that resolves only outside the pool 0f5101d FAIL
— same, with the in-pool assertion removed 0f5101d PASS (so the assertion is what catches it)
demand_closure_agreement, both claims 05011dd PASS
import_closure_live 05011dd PASS, 602 ms

Deleted:

  • the equivalence test;
  • its frozen deferral row and its dissolution-census row;
  • the lens functions only it consumed: reference_dependency_facts_match_import_facts_at_path, reference_closure_ingest_refusal_witness, reference_closure_live(_excluding) and reference_path_excluded, plus their data rows.

Its unimported-name roster row is now Retired { cause: FileDeleted }. conformance_imports_only.dag stays, because import_closure_live_test still uses it.

Failure mode

New row: gunbc.recurring_failure_mode reference_reader_without_postfix_handling_drops_call_sites.

🤖 Generated with Claude Code

Brian Searls and others added 4 commits October 1, 2026 10:02
…ollector

v2.lens.reference_deps reference_sites_from_parsed_module and its parsed census and closure
walk are deleted. Measured: the walker missed a dotted callee and a qualified call argument
that collect_reference_sites sees. The equivalence test now reads the one edge producer,
v2.lens.module_graph dependency_resolution_facts_live (import facts plus collector-derived
edges). The differential cells become collector exact-site-set controls. Records
gunbc.recurring_failure_mode reference_reader_without_postfix_handling_drops_call_sites.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t consumes

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor Author

Re-verified at merged head 1a541bf with claim_batch (28 GB runner, cgroup recipe): all four collector cells PASS as written. Both call cells FAIL under the position mutation (named edges not extending position) and under the spelling mutation. All four FAIL under the spelling mutation.

Brian Searls and others added 10 commits October 1, 2026 12:38
…the stale golden

The test did not resolve on main (witness_layer_roots used bare, an ActiveDebt row in the
unimported-bare-provider roster), which hid a golden listing an import envelope the entry no
longer has. Import it, retire the debt row, and re-derive the golden from the dependency closure.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s_layer_roots row (ImportsFixed) instead of deleting it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…golden from the declared import edges

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tire the ReadsLiveTree debt row

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…osure's homes with an in-pool resolution assertion

The floor declined it as a long-home witness even when changed, so the closure golden had no
executing claim. Moved out of test/claim/long/, its frozen deferral row dropped, and its pool
derived from the golden's directories rather than the whole corpus. Every import of a reached
file must resolve inside that pool, so the narrowing cannot hide an edge.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… pairing claim (the cited broker witness does not exist)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…a wall and its claimed cover were both silently non-executing

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…unctions only it consumed

Its closure check is now held by test.claim.module_graph.import_closure_live (real corpus, executing on
the floor, run 36883586866) and demand_closure_agreement_witness (supplied fixture). Revised option A,
ruled by default after escalation to the operator.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ed file uses

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 1, 2026
@gunbai-bot
gunbai-bot Bot removed this pull request from the merge queue due to a manual request Oct 1, 2026
@briansrls
briansrls added this pull request to the merge queue Oct 2, 2026
Merged via the queue into main with commit 437c5f4 Oct 2, 2026
4 checks passed
@briansrls
briansrls deleted the session/bold-crane-252 branch October 2, 2026 02:23
@briansrls
briansrls restored the session/bold-crane-252 branch October 2, 2026 02:32
gunbai-bot Bot pushed a commit that referenced this pull request Oct 2, 2026
…mage, #12910): resolve_binder_part dispatches on CoreEdgeLabel BinderDefaultEdge, not the <binder-default> text

#12948's resolve read a binder node's default edge by comparing its label with binder_default_label();
under this cut that edge is the core arm BinderDefaultEdge, so the dispatch is edge_is_core. The new
inhabitance position for a binder default carries an Authored label like its siblings. #12790's
close_lowered_image wraps the targets this branch had relabelled (map-literal entry, operation
member); reference_deps keeps main's trimmed imports plus the two this branch's readers still use.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Oct 2, 2026
…tsFixed (floor RosterStale: #12910's collect_reference_sites no longer reports the pair in these PR-touched files)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant