Repository navigation
Merge queue: census what the push-on-main required run produces that the merge_group run does not, then propose the cut so runner claims stay flat (operator-signed roster change) - #11465
Conversation
…er at the owner's merge_group run A row a candidate uses is satisfied at the candidate, so its consumption on landing is known at the owner's own merge-queue run. That run now refuses a used row whose owner authored no deletion follow-up (OwnerFollowUpAbsent). A base-consumed row on a bystander's composition refuses as ConsumedRowOwnerChargeBypassed, naming the owing change and its follow-up. Pull-request runs are unchanged. Lane ruling C (fierce-lark-661). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
…6-consumed-row-owner # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
…ne refuses a bystander (ruling X, review 65313) The owner's merge_group charge establishes that a deletion follow-up NUMBER is authored, not that the deletion landed, so the owner arm and the bystander backstop were never exclusive: between the owner's landing and its follow-up's landing every composition saw the row consumed and was refused. A consumed row with an authored follow-up is now a typed ConsumedRowReceipt (row, owner, follow-up) printed on every run; only a consumed row with no follow-up refuses as ConsumedRowOwnerChargeBypassed. TransitionAdmission gains a typed owner_pull_request. The follow-up's forge state is the landing tally's to read. Report boxed in Adjudicated (clippy large_enum_variant). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MgTfNcF7rBmb8zZhNTk1X
…ect stated where it was overpromised Ruling A/B (fierce-lark-661, 2026-09-13) on #11250. A. The CONSUMED ROW RECEIPT line printed "owned and dispatched, not refused" for every owned receipt. That printer runs before wave_admission_refusal and reads neither the event nor roster_touched, so on a run the retained roster-touch or base == head rule refuses it said "not refused" over a refusal; and "dispatched" claimed a forge fact the binary never read. The typed receipt and its ids stay; the explanation is now observational -- the follow-up number is declared, its existence, state and deletion scope are not established by this run, and the verdict is wave_admission_refusal's. No policy is duplicated in the printer and X is not widened. B. Two annotations still promised the pre-X backstop. The RUNG paragraph said an invalid authored number that slips past the tally is caught by the bypass backstop; under X it is not -- any PullRequest(n) enters the owned population and the backstop reads only consumed_without_follow_up, so the backstop covers the ABSENCE of a number, not the invalidity or lifecycle of one, and reference verification is the tally's alone. The AdjudicationEvent intro still carried the inference review 65313 disproved, that a base-consumed row on a composition can only mean the charge was bypassed. Both are stated as they are. No algorithm change. Evidence at this head: the two retained-policy cases are executed -- an owned row yields its typed receipt AND the retained refusal, on roster_touched and on base == head. Discriminating red confirmed: with consumed_due widened to skip owned rows, that fixture is the only failure (61 passed, 1 failed); restored, 62 pass. These tests are compiled by the required clippy step and run by no CI step (declared drop rust_unit_tests_off_the_merge_path), so they were executed on a remote dispatch at this head. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PZnG5NN44g5nnn61LLHmtx
One conflict, in gunbc.namespace_wave_admission's seed-growth row: both sides appended a paragraph to `reason` after the shared gunbc#10856 bijection paragraph. Main's is the base-environment loader cohort (gunbc#10970, twenty declarations, CLASS C); this branch's is the merge-queue owner charge (DeletionFollowUp, AdjudicationEvent, adjudication_event_from_name) plus ruling X's ConsumedRowReceipt. Neither answers for the other's declarations, so both are kept, main's first and this branch's after it; the shared paragraph stays single and the field is otherwise unchanged. The two Rust files auto-merged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PZnG5NN44g5nnn61LLHmtx
…ge repair, review 65449) The merge with main was a SEMANTIC conflict git resolved textually: main split the production entry into run_wave_admission_between over an explicit repository and revision pair, and this branch added `event` to WaveAdmissionOutcome::Adjudicated. Both literals inside the new function took the field; the new function's signature never took the binding, so the gate's own module did not compile and every lane this PR touches was dark. Review 65449 diagnosed it exactly. The event travels with the subject, for the reason the seam already states about the subject itself: the consumption obligation differs by event, so the caller states which run this is rather than the seam inferring it. run_required_wave_admission forwards the event it already takes from GITHUB_EVENT_NAME. The two grammar-differs witnesses drive a scratch repository rather than a queue composition, so they pass AdjudicationEvent::PullRequest -- the policy whose obligations do not depend on the queue, which is what those witnesses were adjudicating before the event existed. cargo clippy --all-targets -D warnings is clean at this head. The namespace_wave_admission suite is 62/62. The three wave_admission_grammar_differs witnesses refuse on the remote runner with HostBudgetUnreadable -- no cgroup memory limit binds that process, so the resolver refuses rather than admitting against the machine's memory. That is main's own host-budget arm firing on the executor, not a verdict about this change; CI's runner exposes the limit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PZnG5NN44g5nnn61LLHmtx
…stated as a boundary (review 65476)
Review 65476 is right and I verified it: `git grep LandingTally` and
`landing_tally` are empty, and nothing outside this module consumes
`deletion_follow_up`. Four sites plus the .dag authority named "the
landing tally" as the residual's consumer, which reads as an executing
route and is not one -- the pre-enqueue landing procedure is out-of-band
human review. Under DESIGN section 3c that is a consumer that does not
resolve, and under section 5 a present-tense "is caught there" with no
executing route is specification-without-execution.
So the claim is withdrawn rather than softened. Every site now states
that NO executing route in this repository reads the follow-up's forge
state: the wall establishes that a NUMBER is authored and nothing more,
a fabricated number is caught by nothing here, and forge validity is
OUTSIDE THE MODELED GUARANTEE (section 4b's adjacent column) rather than
a property this change checks. The trigger that brings it inside is
named and is not new: the typed repository/forge read this module's
CLASS B acquisition boundary already waits on -- when a fold can ask the
forge for a pull request's state, the receipt's three dispositions
become a wall.
The operator-facing OwnerFollowUpAbsent clause carried the same
overclaim in the imperative ("the open pull request that deletes it")
and now says what the wall actually checks: a number is authored, never
that it names an open or deleting pull request.
This is prose and one refusal string; no algorithm, type, or acceptance
changes. clippy --all-targets -D warnings clean and the
namespace_wave_admission suite is 62/62 at this head.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PZnG5NN44g5nnn61LLHmtx
Main lifted the base-side reconstruction out of run_wave_admission_between into reconstruct_base_index -> BaselineReconstruction, so the required floor's planning row can ask the same question over its own comparison window. This branch had added the adjudication event to the same function. Both hunks land: the resolution takes main's structure whole -- reconstruct_base_index, the BaselineReconstruction arms, and the NoSubject arm that carries the landing's roster debt -- and re-applies the event on top of it, as the parameter the caller states and the field both Adjudicated literals carry. The receipt Box stays on the NoSubject arm's literal too; the enum keeps it for clippy large_enum_variant. This is the same shape as the previous merge and it is why I compiled before pushing rather than after: git resolved the type and the constructors on different sides last time and the gate's own module did not build. Executed on the resolved tree: cargo clippy --all-targets -D warnings clean, namespace_wave_admission 62/62. Head held otherwise -- this is the DIRTY/BEHIND resolution fierce-lark-661 and bold-badger-224 were told would be the one unprompted push. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TH7g6jyWKWr6GUzBN6xZ5L
…11345) * Cut the namespace transition-admission roster to directory membership. 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> * Type expected_candidates as DeclarationRef, not a string list. 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> * Supersede the const-ness-as-safety claim in the roster carrier. 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> * Home the empty-roster standing record on the membership module. 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> * Drop the leftover const census and refuse a phantom candidate leaf. 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> * Enumerate the directory-row parse helpers on the seed census. 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> * Do not re-home the consumed gunbc#11193 admission as a directory row. 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. * Own the used_row fixture strings; Binding is no longer &'static. Co-authored-by: Cursor <cursoragent@cursor.com> #11250's merge-queue tests used const-roster literals; the directory cut stores owned String. * Stop claiming the admission roster is a .rs file. 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> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
…ve_admission.rs) main's #11214 added fifteen rows to the const NAMESPACE_TRANSITION_ADMISSIONS; this branch deletes that const in favour of authored .dag rows. The rows were not migrated: #11214 has landed, so they are consumed by their own landing (base and head both carry the relocation) and are retired here rather than re-authored. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Apo3eJwXeD9NxuinRp9zMN
…ule-item grain main now refuses a // annotation inside a declaration body (parse phase, 3 errors at transition_admission.dag:52-54). The note moves above AdmissionSubject, naming the field it describes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Apo3eJwXeD9NxuinRp9zMN
…ve_admission.rs) main's #11138 added 37 rows to the const NAMESPACE_TRANSITION_ADMISSIONS, which this branch deletes in favour of authored .dag rows. #11138 has landed, so the rows are consumed by their own landing and are retired here rather than re-authored as files. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Apo3eJwXeD9NxuinRp9zMN
…6-consumed-row-owner # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
…6-consumed-row-owner # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
…6-consumed-row-owner # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
…6-consumed-row-owner # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
…6-consumed-row-owner # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
|
Closing: this PR carries no work that is not already on What happened. #11250 squash-merged at 2026-09-16T12:49:46Z from this same branch ( Checked file by file rather than inferred. Of the six files this PR touches, five are byte-identical to The one difference is main having more, not this branch: Not flipping it to ready. The dashboard notice suggested The open finding from #11250 is unaffected by this close. Reviews 66663 and 66792 (the hand-written — sent from deep-otter-836 |
Auto-opened by session-dashboard for session
deep-otter-836.Pushing to
session/deep-otter-836-consumed-row-owneradvances this PR.Worker attestation
Before flipping this PR to ready for review, confirm each item:
npm test,cargo test) and the result.Closes #Ndirective.Summary
TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.
Test plan