Skip to content

Qualify the remaining extdeps bare-name reads by their declaring module - #11145

Merged
briansrls merged 1 commit into
mainfrom
session/witty-moth-510-b2
Sep 12, 2026
Merged

briansrls merged 1 commit into
mainfrom
session/witty-moth-510-b2

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Second qualification batch of the bare-name-ambiguity campaign. Census instrument: #11078. First batch: #11137.

57 of the 105 value-position reads, across 29 extdeps modules outside extdeps.tools.

The technique is proven, not proposed

#11137's floor executed it on 23 sites and reported:

  • verdict=FloorClean unexpected_failures=0, planned=3757 executed=3757 claims_failed=0
  • read_name_module_pairs 105 → 82, qualified_name_module_pairs 305 → 334
  • every one of the 23 [floor-bare-name-ambiguity-bound] rows naming the authority chosen — String → std.string_type, Unit → std.types, Filesystem → extdeps.filesystem.filesystem_io

That last line is the claim that matters. A row leaving the ambiguous census only proves the site stopped falling through; the bound row proves it now reaches the declaration its author named.

The two names, and the trap

String is declared by std.string_type, not std.types. Twenty-six of these files carried import std.types { String }, which binds nothing — std.types neither declares String nor imports it, so the read was travelling through the shared slot while the import line implied it had been settled. The census agrees: name=String claimants=std.string_type:other,v2.std.text:other, and std.types is not among them. The name is dropped from the std.types list and import std.string_type { String } added, so the citation names the declaration rather than a module that merely mentions it (§3).

Two files — extdeps.clock and extdeps.entropy — read String bare without importing it under any spelling, and simply gain the std.string_type line.

Unit is genuinely declared by std.types (type Unit), so it joins the existing list.

extdeps.github.pulls reads only String and takes only that half.

Why no admission rows are expected here

#11137 produced one namespace-wave-admission delta, and it came from converting a bare import extdeps.filesystem.filesystem_io into a named one — a bare module import drags the whole module into the candidate set for every name it declares, so narrowing it also narrowed an unrelated spelling's candidate set.

This batch converts no bare import. It only adds named imports and removes a name that never bound. In #11137 the ten analogous -> std.string_type membership additions were each classified ExplicitlyEvaluatedZeroDelta ... reached by a name this module authors, and removing String from a std.types list left that module's membership edge intact because the module is still imported for other names.

If a delta does appear, it gets an adjudicated row like #11137's, not a widened check.

Scope

No renames. Neither declaring side is touched. This is the mechanism 334 sites corpus-wide already resolve through, applied to the residue that never got it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01M5dKcSuYW3nvAjtVcDxqhT

Second batch of the bare-name-ambiguity campaign (census instrument:
#11078, first batch: #11137). 57 of the 105 value-position reads the
census names, across 29 extdeps modules outside `extdeps.tools`.

Same two names and the same two authorities as the first batch:

- `String` is declared by `std.string_type`. Twenty-six of these files
  carried `import std.types { String }`, which binds nothing: `std.types`
  neither declares `String` nor imports it, so the read was travelling
  through the shared slot while the import line implied it had been
  settled. The name is dropped from the `std.types` list and
  `import std.string_type { String }` added.
  Two files -- `extdeps.clock` and `extdeps.entropy` -- read `String`
  bare without importing it under any spelling at all, and simply gain
  the `std.string_type` line.
- `Unit` is declared by `std.types` (`type Unit`), so it joins the
  existing list, which is the form the #11078 proof site already shows
  binding to `resolves_to=std.types`.

`extdeps.github.pulls` reads only `String` and so takes only that half.

No renames, and neither declaring side is touched. Both this batch and
the first are the mechanism 305 sites corpus-wide already resolve
through, applied to the residue that never got it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M5dKcSuYW3nvAjtVcDxqhT
@briansrls
briansrls merged commit 25091ed into main Sep 12, 2026
4 checks passed
@briansrls
briansrls deleted the session/witty-moth-510-b2 branch September 12, 2026 06:35
gunbai-bot Bot pushed a commit that referenced this pull request Sep 12, 2026
…asured

THE CENSUS POPULATION IS NOT STATIC, and that is the finding here rather
than the two lines. Main's own floor at 0c93af0 -- with #11137, #11145
and #11146 merged -- reports `read_name_module_pairs=25`, and two of the
seventeen `Filesystem` sites in it are NEW: they arrived from another
lane in `extdeps.realization.materialization_store_local` and its wet
witness, after this batch's population was measured.

So sites are being ADDED while the campaign removes them. That matters
for the refusal this campaign is building toward: a wall cannot wait for
a permanent zero it will never see, because a wall is precisely the thing
that KEEPS the count at zero once reached. The landing window is narrow
and follows immediately after this batch.

Both are the same decision every other site in this batch took --
`Filesystem.Read` / `.Write` are operations of `service Filesystem` in
`extdeps.filesystem.filesystem_io`, and no rival claimant declares them.
`materialization_store_local` already imported that module with a braced
list and simply lacked `Filesystem`; its wet witness had the bare form.

QUALIFIED PREDICTIVELY THIS TIME, not reactively, because the mechanism
behind review 64402's finding and the six stranded names is now known
exactly: A BARE IMPORT RE-EXPORTS THE IMPORTED MODULE'S OWN BINDINGS.
`extdeps.clock` imports `v2.std.optional { Present }` and
`extdeps.filesystem.filesystem_io` imports `std.types { ... List ... }`,
which is why narrowing those stranded `Present` and `List` in files that
never mention either module.

That makes the risk computable before the edit rather than discoverable
after it. For the wet witness the set of names reachable ONLY through its
bare import is exactly `{Filesystem}`, so narrowing strands nothing;
`materialization_store_local` gains a name and can strand nothing by
construction. It compiles at 0 blocking errors.

A note on the pre-check, so it is not trusted further than it earns: it
OVER-APPROXIMATES. Run over this batch it flags fourteen files where the
floor found six, because it unions both narrowed modules' re-exports
regardless of which module a given file imports, and counts a name as at
risk even when another import already supplies it. It is a candidate list
worth inspecting before a push, not a verdict, and the floor's
`NewUnresolvedness` deltas remain the authority.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M5dKcSuYW3nvAjtVcDxqhT
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