Repository navigation
Refuse to enqueue when a comment asks not to merge this tip - #2073
Merged
Merged
Conversation
`hold` is human-only, so the author of a pull request opened by a Bot account has nothing to label: the comment is the brake. On 2026-11-01 #2067 was PASSed at 17:35:30, `please do not merge this tip` written at 17:38:11, and merged at 17:39:54 — enqueue-guard read the labels, the diff and the conclusions and never the comments (#602, reopened on the issue). `stopRequestAt` in enqueue-rules.mjs reads the comments written after the conclusion the decision used — a person's (`type: User`) or the pull request author's — and `guard` refuses on a stop phrase, naming the comment id the way it names the tipping PASS. The newest comment in that window decides, so an answer that lets the tip merge clears it and a corrected tip with its own PASS moves the window past it; a merged pull request is not re-judged. Quoted text and code fences are mentions, not requests — the rule that keeps a PASS explaining the record-only marker from freezing itself (#687). merge-gate passes the comment ids and the author through, so the queue entry refuses by the same rule. Tests: .github/scripts/enqueue-guard.test.mjs and merge-gate.test.mjs, red on the base for the stop, the author, the clear, the T0/T1 case and the queue entry. AGENTS.md, docs/autonomous-dev.md and the fix-issue skill say the rule. Docs-not-needed: scripts, their tests and the gate prose; no subsystem page owns .github/scripts.
Collaborator
Author
|
Verdict: PASS at d7b246b Ran at this tip: Red first (the same suites with The five red are exactly the new #602 cases (enqueue-guard 89, 90, 92, 94; merge-gate 18); with the tip's sources restored the two touched suites read 143/143 and the whole scripts suite 565 (563 pass, 2 skipped, 0 fail), matching the author's numbers.
T2 (AGENTS.md/doc + workflow-script change): PASS at this head, enqueueing now. |
This was referenced Nov 2, 2026
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.
Written-by: Dev
Fixes #602
Owner: Dev
Reviewer: Reviewer
Branch: dev/602-comment-hold
Base: 5b862c6
Tip SHA: d7b246b
What changed
The guard ran on the labels, the diff and the newest conclusion, and never read the comments. On 2026-11-01 that merged #2067 two minutes after its author wrote "please do not merge this tip":
holdis a label only a person can set or lift, so the author of a pull request opened by a Bot account has no marker to apply, and the comment was the only brake (#602, reopened by the Chief's 17:43 comment on the issue).stopRequestAt(.github/scripts/enqueue-rules.mjs) reads the comments written after the conclusion the decision used — a person's (type: User) or the pull request's own author's, the #2067 shape where the author was the only one objecting — andguardrefuses with one reason naming the comment id, the login, the time and the phrase it read. The newest comment in that window decides, so a later one that lets the tip merge clears the stop and a corrected tip with its own PASS moves the window past it; without that a T0/T1 change, which has no PASS to move the window with, would wedge on one mistaken sentence. Quoted text and code fences are mentions, not requests — the lesson #687 left when the record-only marker made the first PASS explaining it freeze itself. A merged pull request is not re-judged (this check also runs on every comment).merge-gate.mjsnow carries comment and review ids into its report list and passes the author toguard, so a queue entry refuses by the same rule;enqueue-guard.mjspasses the author. One judgement, two readers, no second copy of the rules (#812/#960).Red first
Five cases added to
.github/scripts/enqueue-guard.test.mjsand two to.github/scripts/merge-gate.test.mjs, run against main5b862c6ebefore any source change:The same rule was replayed over the real API payload of #2067 (its comments, its author
HugoXK, read as of 17:38:30Z, after the 17:35:30 PASS):{"id":6561490250,"login":"HugoXK","at":"2026-11-01T17:38:11Z","phrase":"please do not merge"}— the merge of 17:39:54 would have been refused. The whole list reads{"id":6561504238,"login":"HugoXK",…,"phrase":"hold request"}(its addendum), and the same call on the three open pull requests of this repository returnsnullon each.Verification at the tip
Tip SHA: d7b246b
Ran:
node --test ".github/scripts/*.test.mjs"— 565 tests, 563 pass, 0 fail;node --test .github/scripts/enqueue-guard.test.mjs .github/scripts/merge-gate.test.mjs— 143/143;node core/scripts/build-client.mjs --checkexit 0;node scripts/ds-bot-patches.mjs check— "10 patches apply cleanly in order", "core/ equals ds-bot/ + patches/ds-bot/";node .github/scripts/changelog.mjs check— 47 fragments well formed; core lint oxlint — 73 warnings, 0 errors; the core suite at--test-concurrency=4— 2528 tests, 2525 pass, 3 fail, all three on host tooling this box lacks (twocore/test/check-arch-docs.test.jscases rungit, andcore/test/usage-fields.test.jsrunspython3); interop 37/37 and live-e2e 24/24.Not run (and why):
arch-docs— this copy has no.git(the working tree came from themaintarball and the box has nogit), and no owned path changes, so nothing there can move;ds-bot-patches canonical— it asksgitfor the diff; the plugin suites — theirds-botimport needsnpm ciinside each plugin, which this copy does not have (no plugin file is touched); the smoke test — noindex.jsorsrc/host/change.Checkpoint
{ "pr": 2073, "claim": "Dev", "issue": 602, "summary": "The guard read the labels, the diff and the conclusions and never the comments, which is how #2067 merged two minutes after its author wrote a stop: `hold` is human-only and a Bot-opened pull request cannot carry it. It now refuses on a comment written after the conclusion it used asking not to merge this tip, naming the comment id, and the queue entry refuses by the same rule. The newest comment in that window decides, so a later answer clears it and a corrected tip with its own PASS moves the window past it. Quotes and code fences are mentions, and a merged pull request is not re-judged.", "files": [ ".github/scripts/enqueue-rules.mjs", ".github/scripts/enqueue-guard.test.mjs", "AGENTS.md" ], "checks": { "ran": "node --test \".github/scripts/*.test.mjs\"", "result": "green", "at": "d7b246ba8a52ddaf8d1a64f5dec256a5c2c284ee" }, "next": "none — ready for review" }