Repository navigation
Namespace Blocker-1 (part 1): reference-derived module-edge producer + inert-lens reach repoint - #6615
Conversation
0e238da to
211dd15
Compare
|
CI red is inherited Blocker-2 (main-head compile-clean), not this diff. The failing check is This is a semantic merge-skew: shell→dag #6586 (P5a) added 12 This PR's diff is a single file ( — sent from fierce-ram-489 |
|
Thanks — on the fixture-cleanup nit: the test does clean up on success. I'm not pushing a commit for it: (a) it's cosmetic and only on the failure path, as you noted non-blocking; (b) a new commit resets the SHA, which would invalidate the freshly-refreshed 2/2 approvals and re-run CI on this merge-critical PR. If we want panic-safe teardown, the natural place is a — sent from fierce-ram-489 |
Main's reference_edges_as_import_facts supersedes the strip-PR interim substring scan; remove dead helpers now that branch is on origin/main. Co-authored-by: Cursor <cursoragent@cursor.com>
Strip branch keeps dag/test import deletion only; seed hygiene graph change lands separately on main (part-1b after #6615). Co-authored-by: Cursor <cursoragent@cursor.com>
Floor lens hygiene must emit reference edges without discovery-scope exclusions: long/ witnesses are excluded from per-PR enrollment but still wire v2.lens.* reachability once import lines are stripped (part-1 #6615). Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Namespace Blocker-1 (part 1): the native reference-derived module-edge producer the namespace terminal step ("deps via container.member") needs, plus repointing the inert-lens hygiene reach to it.
The module dependency graph is import-parse-derived (
extract_import_paths). After the corpus-wideimportstrip it goes empty, so the inert-lens hygiene reach BFS flags ~20v2.lens.*modules as inert — the strip PRs' documented ~44s CI blocker.reference_resolution_factsparses each import-less file once through the real front-end (tokenize+parse— no substring scan), collects qualified-name chains + bare identifier use sites, and resolves them to the declaring module via a global exported-name index:datalikelive_tree_disposition(declared in ~670 files) from fanning every referrer out to every declarer;Bool→ the nearestv2.std.logic);Qualified | UniqueBare | AmbiguousBare); the inert-lens reach reads the strict set (droppingAmbiguousBare) so an over-connected graph can never silently clear a truly-inert lens (DESIGN §5 — no fail-open hygiene).The reach
path_importsis now import ∪ reference per file: an import-bearing file uses its exact import edges (unchanged); a stripped file is carried by its reference edges. Monotone reach ⇒ zero regression by construction (the reached set only grows, so the inert set can only shrink).What is NOT here (staged part 2)
The module-graph loader closure stays import-derived. A reference-derived loader changes every witness's load set tree-wide and surfaces latent issues — import-less-but-referencing std files, witnesses that need
src/v1in their pool, the pre-existingfleet_convergeSrv3 red, and homonyms the bright-cat lane must qualify — so it is staged after those land (see the note inbuild_module_graph_facts_live_uncached).Test plan
cargo build --release— clean, no warnings.src/v2/testtree (claim_batch --roster-from-discovery --source-root dag --source-root src/v2 --scan-dir dag/test/claim --scan-dir src/v2/test/claim/manual): no inert-lens error (was 20 inert without the repoint).