Repository navigation
Name the bare-read authority in three extdeps modules, and admit the one leaf it narrows - #11347
Merged
Merged
Conversation
…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 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
NAMESPACE_TRANSITION_ADMISSIONSadmits 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
AmbiguousBareNameReadwall refuses them. The repair the wall prescribes is to name the authority in the import.extdeps.realization.artifact_store_fsFilesystemimport extdeps.filesystem.filesystem_io { Filesystem }(was brace-less)extdeps.bmc.ipmiStringimport std.string_type { String }extdeps.cronStringimport std.string_type { String }The
Filesystemchoice is derived from the usage, not guessed:filesystem_iois 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
Filesystemtherefore also removedfilesystem_io's ownextdeps_external_authority_anchorfrom that leaf's candidates — oneTargetChangeddelta onextdeps.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
datadeclaration — and nothing in the closure reads it. Neither importer imports the anchor; the only other corpus references to that leaf are adecl_namestring instd.citationand 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/realizationtree;filesystem_io's cites the POSIXwritespecification), 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), privateCARGO_TARGET_DIRcargo fmt --all --check— clean (pre-commit hook)gunbc.compile_clean_diagnostic_policy)🤖 Generated with Claude Code
https://claude.ai/code/session_018oRuEWKyaADAAkinhP6acP