Skip to content

Cut namespace transition admissions to directory-is-membership rows - #11345

Merged
briansrls merged 12 commits into
session/deep-otter-836-consumed-row-ownerfrom
session/bold-badger-224
Sep 14, 2026
Merged

briansrls merged 12 commits into
session/deep-otter-836-consumed-row-ownerfrom
session/bold-badger-224

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

Stacking

This PR is stacked on #11250 (session/deep-otter-836-consumed-row-owner at held head 0b4ae4d47ca). Merge-base with that head is 0b4ae4d47ca (it is an ancestor). This head is merge 3309ee987f of that commit into the directory-roster cut. After #11250 lands, retarget to main and confirm this SHA is unchanged; if GitHub requires a merge commit then, stop (that would void the receipt).

Native-receipt exemption (landing side chat, turn be0a86fc) — stacked on 0b4ae4d47ca

This change is exempt from the pre-landing native composition receipt: namespace_wave_admission.rs and claim_executor.rs are floor/harness code outside the emitted-compiler closure. Against the six intersecting classes, none is intersected:

  1. Emitted-closure reachability — not intersected. The module is named in src/v2 only as seed-retained: src/v2/compiler/self_host/stage0_crate_layout.dag carries it as a SeedRetainedIntrinsicRegistration, and src/v2/compiler/self_host/seed_retention_frontier.dag as retained_reason_elsewhere(path: "src/namespace_wave_admission.rs", cause: SeedRetainedIntrinsicSource). Both rows are per-file. This diff deletes the const and adds gunbc.namespace.transition_admission plus the sibling directory (empty resting state); it does not add an emitted-compiler source file, so neither seed-retention row moves.
  2. Emission path — not intersected. No emitter, template, or emitted artifact is touched; the one generated artifact in the blast radius (witnesses.yml) is inherited from Namespace wave admission: the owner's merge_group run owes its consumed rows' deletion follow-up (carrier for the push-on-main cut) #11250's main merge, not authored here as emission.
  3. compiler_entry / driver — not intersected. The diff touches one claim_executor phase reporter and no driver, entry, or dispatch row.
  4. Native harness — not intersected. The wave-admission tests are seed integration tests compiled by the required clippy step; no harness, fixture universe, or driver row is added or altered as a native-composition subject.
  5. Universe producer — not intersected. src/v2/workflow/floor_subject_seed.dag cites "the consumption relation namespace_wave_admission already computes"; this change relocates the permission set from a const onto directory membership and does not alter closure, subject-membership, or binding computation, which is what that relation consumes.
  6. Classifier — not intersected. NamespaceDeltaDisposition and the delta classification are untouched; directory rows still carry the same dispositions. The owner-charge arms partition admission rows, not deltas.

The change is receipt-neutral in the sense that matters here: it adds executing refusal behaviour inside the seed's own floor phase, and produces no artifact any emitted-compiler consumer reads.

Summary

  • Replace NAMESPACE_TRANSITION_ADMISSIONS (the colliding hand-Rust const) with directory-is-membership rows under dag/gunbc/namespace/transition_admission/. The type lives in gunbc.namespace.transition_admission; the seed fold load_transition_admissions is the only production permission set (adjudicate never sees a const).
  • Roster touch is the directory prefix (type module excluded). Consumed-row deletion is deleting that file.
  • Executing row fields include Namespace wave admission: the owner's merge_group run owes its consumed rows' deletion follow-up (carrier for the push-on-main cut) #11250's owner_pull_request and deletion_follow_up on the directory row type and seed parse, so OwnerFollowUpAbsent keeps executing on the new carrier.
  • Binding subject: enclosing and expected_candidates are DeclarationRef / List<DeclarationRef>. Stem is the relocation identity in stem form, never the owner PR number.
  • Const-ness is superseded in the seed: permission remains authored/reviewable; the vehicle is directory membership. An added file admits because it is authored source in the PR diff, not because a runtime fold invented it.

load_transition_admissions_from_dir maps ErrorKind::NotFound to an empty roster. Git cannot carry an empty directory, so absence IS the empty-roster state. A mistyped path yields fewer admissions, never more, so it errs toward refusal (fail-closed on the admission axis). Every other read_dir / parse error refuses, located, and is never skipped. This is not an absorbing fallback: it cannot widen the permission set.

The consumed gunbc#11193 const row is not re-homed as a sibling file; #11356/#11214 own that deletion.

Inheritance if #11306 lands first

#11306 carries six const rows and may merge before this cut. This PR does not pre-author those files (they would refuse against a main that does not yet carry the relocation). After #11306 is on main, absorb by converting each row to dag/gunbc/namespace/transition_admission/<module>_<decl>_<spelling>.dag. They are consumed by that merge; #11316 deletes the files. If #11316 lands first, this cut inherits the empty directory — the designed resting state.

Consumers (§3c)

The two-files-on-two-branches merge control is executed (two_row_files_on_two_branches_merge_without_conflict), not asserted.

Migration recipe (in-flight const PRs)

Commented on #11306 and #11214 (#11220 already merged). After this lands: one file per row, drop the Rust hunk.

Test plan

  • cargo test -p v1-compiler --test namespace_wave_admission (directory loader + owner-charge arms)
  • CI witnesses lane / namespace-wave-admission phase on this PR

Brian Searls and others added 2 commits September 14, 2026 06:09
Delete the hand-Rust const so permission is one .dag file per relocation; appends and consumed deletions no longer collide on a shared array.

Co-authored-by: Cursor <cursoragent@cursor.com>
The wall still joins declaring-module identity; the authored row now names those identities with the same declaration-reference type as enclosing.

Co-authored-by: Cursor <cursoragent@cursor.com>
Brian Searls and others added 3 commits September 14, 2026 06:18
Permission stays authored and reviewable; the vehicle is directory membership, not a const. Missing directory is the empty roster and admits fewer rows, never more.

Co-authored-by: Cursor <cursoragent@cursor.com>
The const's prose about what remains used to rot beside the array. Empty-is-not-permissive and the #11306/#11316 inheritance live on gunbc.namespace.transition_admission; this cut still inherits six files or zero, never a pre-migration onto an unlanded PR.

Co-authored-by: Cursor <cursoragent@cursor.com>
The #11182 permission paragraph had attached to WaveAdmissionPopulation after
the const died. Candidate DeclarationRef.decl_name must equal Binding.spelling.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

review 66021 — both findings were live on a4da2c12fcc; addressed on 3999902e712.

  1. The leftover const ledger (including the seven #11182 rows that “still admit a real delta”) was rustdoc with no item after the const deletion, so it hung on WaveAdmissionPopulation and minted a permission census the directory does not grant. That archaeology is deleted. Authoring-vs-const and empty-roster standing live on load_transition_admissions and gunbc.namespace.transition_admission. Git history of the deleted const remains quarry.

  2. Kept List<DeclarationRef> (same type as enclosing). The production fold still joins the wall on module_path, but load now refuses when a candidate decl_name is not Binding.spelling. A phantom leaf cannot pass. Discriminator: a_candidate_decl_name_that_is_not_the_binding_spelling_refuses.

Sequencing still holds: #11345 waits for #11250 on main, then carries owner_pull_request / deletion_follow_up. Not asking LAND on this head.

— sent from bold-badger-224

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
Brian Searls and others added 2 commits September 14, 2026 08:03
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.
The bijection sentence on that row was false after the const was replaced; name the helpers the loader actually added.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

review 66066 — verified on bfc07414181.

  1. Dual reader / eval seam. Tried evaluate_environment_in-shaped load (resolve_entry_with_index_for_discovery_corpus + eval_data_item_value + value_to_wire_json). Discriminating tests (a_directory_row_loads_as_the_production_admission, malformed, phantom leaf) panic at cli_run/entry_resolve.rs:1026 HostBudgetUnreadable — this fixture harness has no cgroup, and GUNBC_MEMORY_BUDGET_BYTES is not a substitute. That seam is therefore not an authorable RED for the roster fold (DESIGN §4b). Production still typechecks sibling .dag files on the parse sweep. The syntax fold stays; a homonymous last-segment Binding is a real residual, closed when the wave phase can resolve without that panic.

  2. Seed census bijection. Fixed: ROW_MODULE_PREFIX and the parse helpers are enumerated on gunbc.namespace.namespace_wave_admission with the reason updated so the bijection sentence is not false at this head.

Not asking LAND: sequenced after #11250; OwnerFollowUpAbsent fields are not on this carrier yet.

— sent from bold-badger-224

Co-authored-by: Cursor <cursoragent@cursor.com>

#11356 owns that deletion (also carried on #11214). Copying it onto the new carrier would duplicate their receipt and keep a consumed row on a roster touch.
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
Stack #11345 on deep-otter so OwnerFollowUpAbsent stays executing when the carrier moves.

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	dag/gunbc/namespace/namespace_wave_admission.dag
#	src/v1/stage0/src/namespace_wave_admission.rs
#	src/v1/stage0/tests/namespace_wave_admission.rs
@gunbai-bot
gunbai-bot Bot changed the base branch from main to session/deep-otter-836-consumed-row-owner September 14, 2026 09:09
Brian Searls and others added 3 commits September 14, 2026 10:08
Co-authored-by: Cursor <cursoragent@cursor.com>

#11250's merge-queue tests used const-roster literals; the directory cut stores owned String.
Deep-otter resolved a main conflict; keep OwnerFollowUpAbsent executing on directory rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
Row files are .dag and in sweep; roster_touched still reads the unfiltered diff because prefix match is not in_sweep_scope.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls merged commit 5b022f7 into session/deep-otter-836-consumed-row-owner Sep 14, 2026
@briansrls
briansrls deleted the session/bold-badger-224 branch September 14, 2026 23:27
@gunbai-bot

gunbai-bot Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

Gatekeeper note (wind-down): at the tally floor (cursor 66276 on a2fc029, 0 RC) and EXEMPT from the native receipt, but stacked on #11250 (deep-otter), which is DIRTY on main and will not land tonight. Landing recipe for the next owner: #11250 merges origin/main → CI → LAND → this PR retargets its base to main (gh pr edit --base main), merges main if needed, CI green, then enqueue on its tally (classification exempt: namespace instrument + seed wave-admission host, consumer = required-ci wave-admission phase only). Row shape as ruled: carrier move, typed DeclarationRef subject/candidates, stem = relocation identity, NotFound→empty declared; carries #11250's owner_pull_request / deletion_follow_up so OwnerFollowUpAbsent keeps executing. — sent from eager-raven-113

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