Skip to content

bc-36xx.34: Pin both halves of a review veto: the dequeue is real - #700

Merged
mordam merged 2 commits into
mainfrom
worktree-veto-dequeue-hgs9h
Aug 24, 2026
Merged

bc-36xx.34: Pin both halves of a review veto: the dequeue is real#700
mordam merged 2 commits into
mainfrom
worktree-veto-dequeue-hgs9h

Conversation

@mordam

@mordam mordam commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Adam's instruction for the review gate is two claims joined by "while": a veto is dequeued and dealt with separately while the merge queue continues to drain. They fail independently and only one of them was ever in doubt, so this pins them independently — test only, no production code touched.

1. The dequeue is real. The two escalation checks already in test/mergequeue.mjs assert the raise with a spy, which cannot tell an escalation that hands the bead over from one that merely says it did. This one wires the real raiseMergeCard in, so what is asserted is merge-queue actually coming off the bead and human going on.

2. The drain survives it. Three queued, the vetoed one at the head of the tick — the arrangement where a break in place of the continue would look exactly like a quiet afternoon. The two behind it merge in the same sweep, do not lose a merge slot to the veto, and go all the way through to their closes rather than being merged and left half-filed.

sweepMergeQueue sorts the tick by bead id (lib/mergequeue.js:404), so the fixture's names are what put the veto first. The draft that named it zz-veto sorted it past the two-merge budget and it was never judged at all — worth knowing before writing any other multi-row tick test.

What this settles, and what it does not. "The queue continues to drain" is now proven and needs no further work: it is continue, not break. The whole of the remaining work is the strand, which is bc-i9nz7 — still open, still unanswered, and deliberately not started here.

Filed on the way past: bc-uxrix (P1). raiseMergeCard adds the human label; the sweep's only read is bd.listAgent, which runs --exclude-label human. So a merge-bead leaves the only list the sweep reads the instant it becomes a card. cardedFor — the take-a-card-back loop of bc-91srt/bc-91ft — selects on exactly that label and can therefore never have run in the daemon, and strandedPrs counts every card as a strand, which is the #661 ... no merge-bead is about it line repeating in the log. Five green tests cover the reclaim because fakeBd.listAgent returns its rows unfiltered. Verified against the live workspace. Not fixed here: waking cardedFor up while the review gate is off would take #655 (CLEAN, green) straight back onto the queue and merge it over a reviewer's refusal, which is bc-i9nz7's call, not a side effect to land by accident.

Tests: node bin/b7e-gate --json in this worktree over the merged tree: 424/424 green, no reds. test/mergequeue.mjs alone is 77/77, up from 75 — the two new checks are 'A VETO IS DEQUEUED FOR REAL' and 'AND THE QUEUE BEHIND IT STILL DRAINS IN THE SAME SWEEP'.

Worth knowing: Test-only; no production file is touched. The one way it could be wrong is a fixture that does not mean what it says, which is why the first check wires the real raiseMergeCard in rather than a spy, and why the second asserts the merge numbers and the close order rather than just a count.

Left undone: bc-i9nz7 is still unanswered and the strand itself is untouched — #661 and #655 are both still stranded, deliberately. bc-uxrix (P1) is the cause I found and did not fix: cards are invisible to the sweep's own read, so cardedFor has never run and strandedPrs calls every card a strand. It must not be fixed on its own while the review gate is off — it would merge #655 over a reviewer's veto.

Files changed — 1 file · +70 −0 · against `main`
test/mergequeue.mjs  +70 −0

Opened by a beadcause worker session on bc-36xx.34 — Pin both halves of a review veto: the dequeue is real, and the queue drains on past it in the same sweep. It merges itself once the checks report; merging is what closes the bead. If this is still open, something stopped that, and the reason is on bc-36xx.34 and in Adam's inbox.

bead: bc-36xx.34

NeanderthalMan and others added 2 commits August 24, 2026 13:05
…e queue draining on past it

Adam's instruction for the review gate is two claims joined by "while": a veto
is dequeued and dealt with separately *while* the merge queue continues to
drain. They fail independently, so they are pinned independently.

The two escalation checks already here assert the raise with a spy, which cannot
tell an escalation that hands the bead over from one that merely says it did —
so the first of these wires the real raiseMergeCard in, and what it asserts is
`merge-queue` coming off the bead and `human` going on.

The second puts the veto at the *head* of a three-deep tick, which is the
arrangement where a `break` in place of the `continue` would look exactly like
a quiet afternoon. The two behind it merge, and go all the way through to their
closes rather than being merged and left half-filed.

`sweepMergeQueue` sorts the tick by bead id, so the fixture's names are what
put the veto first — the draft that named it `zz-veto` sorted it past the
merge budget and it was never judged at all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mordam

mordam commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

A beadcause worker opened this and does not merge its own work. It is on the merge queue as bc-m5pow.

@mordam
mordam merged commit 5fb5977 into main Aug 24, 2026
1 check passed
@mordam
mordam deleted the worktree-veto-dequeue-hgs9h branch August 24, 2026 17:03
@mordam

mordam commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

#700 was merged as 5fb5977 outside the queue. The queue was holding it and has done the bookkeeping the merge would have done.

  • Straight through. No refusal, no downmerge: it was mergeable when the queue first read it.

The queue reports its own half only: how this branch got through, not what was in it. What the advocate actually did — the conflicts, which side it kept, the suites it ran and against which tree — is on bc-36xx.34's merge bead, written by the window that did it. Nothing here is a summary of that; a process that did not watch the merge has no business paraphrasing one.

@NeanderthalMan NeanderthalMan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved by Adam via /merge — recorded after the fact: the beadcause merge queue had already picked this up as bc-m5pow and merged it as 5fb5977 at 17:03:35Z, closing bc-36xx.34 and bc-m5pow together.

Recording it anyway so the approval is where the diff is. The review gate is currently off for this workspace (bc-196cz), so this merged without a reviewer's verdict — Adam's approval is the decision that stands behind it.

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.

2 participants