Skip to content

Name the bare-read authority in three extdeps modules, and admit the one leaf it narrows - #11347

Merged
gunbai-bot[bot] merged 1 commit into
mainfrom
corpus/bare-name-disambiguation
Sep 14, 2026
Merged

gunbai-bot[bot] merged 1 commit into
mainfrom
corpus/bare-name-disambiguation

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Extracted from #11193 on sunny-carp-329's ruling: "the import fix + its admission row land as their own PR, and I delete the row immediately after. Do not couple main-blocking debt to a PR that is blocked." #11193 was blocked at the time of that ruling; the reason it must not carry main-blocking debt is unchanged by what has since unblocked it.

⚠️ LANDING DEBT — owner: sunny-carp-329

NAMESPACE_TRANSITION_ADMISSIONS admits exactly the deltas it rosters, and a rostered row with no corresponding live delta refuses. The row this PR adds is consumed the moment this lands: main's push refuses until the row is deleted.

sunny-carp-329 is the payer for that deletion. It is step 3 of their four-step sequence and is not a task for whoever next touches namespace_wave_admission.rs.

What this changes

Three modules read a name bare that resolves to more than one declaration, and the AmbiguousBareNameRead wall refuses them. The repair the wall prescribes is to name the authority in the import.

module bare read import added / narrowed
extdeps.realization.artifact_store_fs Filesystem import extdeps.filesystem.filesystem_io { Filesystem } (was brace-less)
extdeps.bmc.ipmi String import std.string_type { String }
extdeps.cron String import std.string_type { String }

The Filesystem choice is derived from the usage, not guessed: filesystem_io is the only module in the closure that admits it.

Why there is a namespace delta at all

A brace-less import binds nothing for the refused name and widens every leaf in the module's candidate sets. Naming Filesystem therefore also removed filesystem_io's own extdeps_external_authority_anchor from that leaf's candidates — one TargetChanged delta on extdeps.realization.artifact_store_fs. It is a consequence of the prescribed repair, not a second change riding along.

The row's comment carries the reasoning for why this does not change which declaration any spelling denotes: the spelling occurs exactly once in that module — its own data declaration — and nothing in the closure reads it. Neither importer imports the anchor; the only other corpus references to that leaf are a decl_name string in std.citation and a different module's anchor. So the base two-candidate set sat at a declaration site with no reference: there was no denotation to move, only a candidate count a brace-less import had inflated.

What this PR deliberately does not claim: which candidate the base resolution picked. The two declarations differ materially (this module's anchor cites the repository's own dag/extdeps/realization tree; filesystem_io's cites the POSIX write specification), so had anything referenced the leaf, that question would need the resolver run rather than reasoned about. Nothing references it, so it does not arise.

Evidence

  • cargo check -p v1-compiler --lib — clean (exit 0, Finished dev profile), private CARGO_TARGET_DIR
  • cargo fmt --all --check — clean (pre-commit hook)
  • corpus compile-clean gate: 0 blocking errors, 784 advisory (policy gunbc.compile_clean_diagnostic_policy)

🤖 Generated with Claude Code

https://claude.ai/code/session_018oRuEWKyaADAAkinhP6acP

…one leaf it narrows

Three modules read a name bare that resolves to more than one declaration, and the
`AmbiguousBareNameRead` wall refuses them. The repair the wall prescribes is to name the
authority in the import:

- `extdeps.realization.artifact_store_fs` read `Filesystem` bare over a BRACE-LESS
  `import extdeps.filesystem.filesystem_io`. A brace-less import binds nothing for the
  refused name and widens every leaf in the module's candidate sets, so naming it is
  both the repair and the cause of the one namespace delta below.
- `extdeps.bmc.ipmi` and `extdeps.cron` read `String` bare; each gains
  `import std.string_type { String }`.

The `Filesystem` choice is DERIVED from the usage rather than guessed: the module's own
declarations are what name it, and `filesystem_io` is the only module in the closure that
admits that usage. This records an existing resolution; it does not assert the module
executes.

THE LANDING DEBT, stated plainly. The `namespace-wave-admission` wall admits exactly the
deltas rostered in `NAMESPACE_TRANSITION_ADMISSIONS`, and a rostered row that no longer
corresponds to a live delta refuses. Once this lands, the row here is consumed: main's
push refuses until it is deleted. That deletion is a follow-up owned by sunny-carp-329,
who is the payer for it -- it is not a task for whoever next touches this file.

The row's own comment carries the reasoning for why the anchor motion does not change
which declaration any spelling denotes: the leaf is a declaration site with no reference
anywhere in the closure, so there was no denotation to move -- only a candidate count a
brace-less import had inflated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018oRuEWKyaADAAkinhP6acP
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 14, 2026
Merged via the queue into main with commit a745dac Sep 14, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the corpus/bare-name-disambiguation branch September 14, 2026 07:49
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
…teen

Only namespace_wave_admission.rs conflicted, as it has every time. gunbc#11347 named
the bare-read authority in three extdeps modules -- the same class of fix this branch
made for extdeps.cloudflare.account_api_tokens -- and admitted the one leaf that
narrows. Its row and this branch's fifteen are both OPEN, so both survive: 17 entries
= 1 struct + 1 (#11193) + 15.

main's const arrived rustfmt-collapsed onto the declaration line (`= &[TransitionAdmission {`)
because it held a single row, so the splice normalises it back to list form before
appending; cargo fmt then owns the indentation. Verified: cargo check exit 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015R9M9cY4iaqsqeaSDpT7g1
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
…of this branch's forty SCM rows

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01534A1UAkjSmypHMjNWw11e
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
#11347 landed an admission row for the gunbc#11193 artifact_store_fs anchor leaf
into the same const this branch appends to — the third append-vs-append collision
on this array in one day. Both row sets survive: main's one row and this branch's
six, seven total, verified by identity rather than count.

Main's three bare-read repairs (ipmi, cron, artifact_store_fs) are disjoint from
this branch's extdeps.python repair, so those do not interact.

The stale #11182 paragraph stays deleted. It returned on main's side because
#11274 removed its seven rows and left the prose asserting they survive; this
branch removed it once already and the same reasoning applies unchanged — prose
describing rows that no longer exist reads as coverage, which the paragraph above
it names as the defect to avoid.

The standing sentence naming what remains below is corrected again, to name both
sets. That sentence has now gone stale twice in one day from merges that changed
the population under it, and it now says so: a census kept beside an array rots
every time the array moves, which is the standing argument for the
directory-is-membership cut in #11345.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MSpQ3EJ1Nn8V16yEDqbG4F
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
Co-authored-by: Cursor <cursoragent@cursor.com>

#11347 added a const admission on main; keep the directory carrier and re-home that row as a sibling file so the cut still compiles against current main.
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
…as its owner

The floor red on 67a369e was a single blocker: '1 consumed admission due for
correction or deletion'. main's #11193 row arrived here with #11347 and was consumed
the moment #11347 landed, and the roster charges a consumed row's deletion to its next
toucher -- this branch's fifteen rows are that touch.

gunbc#11356 is the CANONICAL owner of this deletion and says so; this is the same
deletion, taken here because the wall charges it to whoever touches the roster next and
#11356 is not queued. Identical deletions merge cleanly when #11356 lands. Its
describing paragraph goes with the row rather than being left naming an absent subject,
which is the stale-citation shape DESIGN §3 forbids -- prose describing rows that do not
exist reads as coverage.

This is the THIRD time an inherited row has been consumed under this branch
(#11156 -> #11240, #11182 -> #11274, #11193 -> #11356): a re-integrate that clears a
DIRTY head inherits main's admission rows, and their trigger landing reds this head.
gunbc#11345 cuts the const roster to directory rows and ends the class.

cargo check exit 0; 16 entries = 1 struct + this branch's 15.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015R9M9cY4iaqsqeaSDpT7g1
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
…h by the wall

#11347 landed, so the artifact_store_fs anchor relocation is at base and its one
admission row reports CONSUMED — 0 unadjudicated, 0 stale, 1 consumed due for
deletion. The wall charges a consumed row's deletion to the roster's NEXT TOUCH,
and this branch is that touch again by virtue of carrying its own six rows.

APPLIED UNDER THE STANDING RULING RATHER THAN RE-ASKED. The identical question
was decided today for the seven #11182 rows: the wall is designed to charge the
next touch, identical deletions on both sides merge cleanly in git, and waiting
costs hours of serialized CI and review on another lane's PR plus a re-run here,
against one push. #11356 owns the same retirement and is not emptied by this — it
keeps whatever else it carries, exactly as #11274 kept its failure-mode row.

Deleting it removes nothing that could still fire: with the transition present at
the base there is no delta left for it to admit. Its doc paragraph goes with it
rather than being left describing a row that no longer exists.

Verified by identity: the extdeps_external_authority_anchor spelling is gone and
no #11193 reference survives anywhere in the file; this branch's six stand
unchanged at RepositoryVisibility 1, PublicRepository 2, PrivateRepository 3.

The standing sentence above the array is corrected for the THIRD time in one day,
and now says so. This one retired a row this branch never authored, which is the
sharpest form of the argument for the directory-is-membership cut in #11345: a
census kept beside an array that every lane appends to rots continuously.

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

0 participants