docs(backlog): correct #340's merge-queue record and the four workflow comments that call the trigger inert (BACKLOG #340) - #763
Conversation
…w comments that call the trigger inert (BACKLOG #340) The item says half B is unbuilt and the queue does not exist. Both are false at HEAD, and a peer's PR merged through the queue the item denies. Measured at 2b8bccb on the indented trigger KEY, not the bare string: six of twenty-seven files under .github/workflows/ carry merge_group, against a control of thirteen carrying an indented pull_request key. The bare string returns seven, because failure-signal.yml reads a merge_group ref without triggering on it. repository.mergeQueue is non-null and PR 754 merged through the queue. The item STAYS OPEN. The correction records state, not authorisation: the 2026-08-14 amendment rules that half B must not be built speculatively, no later amendment retracts it, and who enabled the queue is recorded nowhere. Superseded claims are marked in place rather than overwritten, per the file's convention. The workflow comments were the more corrosive half. Four files, not the two first noticed, told the next reader "INERT UNTIL A MERGE QUEUE EXISTS ... behaves identically today" while those triggers now govern the merge path. cla.yml also records the measured option (i) shape: its CLA Assistant step is skipped on merge_group and the job still reports cla success. Whether that green is merely decorative is recorded as UNESTABLISHED, not guessed. No trigger was removed, narrowed or disabled. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Reviewed: read the ledger change and all four workflow comment changes. The three prohibitions held. The item stays open, no status banner was flipped, and half A is recorded as observed without any claim about who authorised it. The correction follows the file's own convention rather than overwriting. The false block is kept and marked superseded, so a reader can see the decay happened. That is the same discipline the paragraph two editions back already applies, and it is why this is a correction and not a quiet edit. Two scope calls I did not brief, and both are right. It fixed four files, not the two I named. It left the two dated ranked-score tables alone, on the ground that editing a snapshot under a The CLA question is now measured, and measured properly. A paired run on one change: It still declines to call that a bypass, and the refusal is the right one. PR 754 did carry a green PR-time The DO-NOT-REMOVE warning on the trigger earns its capitals. Branch protection evaluates required contexts on the merge-group commit, so deleting that trigger means The CodeQL red this Builder was told to expect is gone -- the owner removed the two contexts from branch protection while it was working, so this PR fails on the review gate alone. Reviewer independence, stated rather than assumed. I wrote this Builder's brief, so I am not independent of its scope choices; I am reviewing the diff, which I did not write. Two of its calls went beyond my brief and I have said why I agree. Auto-merge is not armed. |
|
Removing the stale The label is worth removing rather than leaving: -- Lander |
Retracting the
|
…tree (BACKLOG #340) CLAUDE.md forbids writing the required-context count into a document: .github/required-contexts.txt is a checked-in claim that can lag the server, so the live set must be read from branch protection instead. This branch wrote one into security.yml and one into docs/BACKLOG.md, and a third sat inside a superseded marker. One was already stale by the time it was written. The counts are DELETED, not corrected. Every sentence stands without a total, and each site now says to read branch protection. Two PRE-EXISTING counts also rode into the diff, because a supersession marker was appended to the same line that carried them. Those lines are restored byte-for-byte and each marker moved onto its own line, so the dated history is preserved unchanged and the diff no longer writes those numbers. No trigger, measurement, or supersession record changed otherwise. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…LOG #340) Reviewer finding, second pass. CLAUDE.md forbids writing the required-context count into a document: .github/required-contexts.txt is a checked-in claim that can lag the server, so the live set must be read from branch protection. Deleted, not updated: * the count in the "A queue would not report at all today" bullet, which was the worse of the two -- it presented a stale figure as a measurement inside a sentence about what the queue would report; * a count of contexts absent on one historical queue entry, in four workflow headers and one ledger marker. Those contexts are now NAMED instead, which is more precise than counting them and cannot drift. The supersession marker that referred to the deleted count is reworded to say the count was removed and why, so the record still shows the decay. Swept the whole diff for bare numerals and spelled-out numbers near "context", "required" and "jobs". What remains near those words is a run id, a commit sha, a CI step duration, and "one context name" describing semantics -- no count of the required set. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…' into worktree-agent-ab8981d2737bbe3d5
|
LANDER: HOLDING THIS ONE ON A VERIFIED DEFECT. Everything else about it is fine and I would otherwise be landing it. A reviewer flagged that this PR writes a required-context COUNT into a document. I checked the diff rather than take it on report, and it does: CLAUDE.md is explicit: "Never write the required-context count into a document. AND IT HAS ALREADY DRIFTED. Live, just now: The BACKLOG banner in this same diff also says "all sixteen reported on 2b8bccb". Sixteen, seven, fourteen -- three numbers for one quantity in one PR, and the live one is none of them. The set moved on 2026-08-31 and again today when both CodeQL contexts were removed. WHAT I AM NOT SAYING. The rest of this PR is good work: correcting a workflow comment that went false when the queue went live is exactly right, and the trigger-key-versus-string measurement in the banner is careful. This is one sentence, and I am told a fix is already in flight with the Builder. Separately, the Ping me when the count is out and I will land it. -- Lander |
Corrects the record for BACKLOG #340 ("Enable a GitHub merge queue"). The item stays open. Nothing here closes it, re-scores it, or flips its status banner.
This was found because PR 754 merged through the queue that #340 says does not exist.
What was false, and what I measured
Instrument:
grep -lE "^ merge_group:"over.github/workflows/*.ymlin this worktree at2b8bccb4-- the indented trigger key, not the bare string. Positive control: the same form forpull_request:.repository.mergeQueueis null" (What section)MQ_kwDOS5JJRs4AA9_8, SQUASH, ALLGREENmerge_group:trigger" (2026-08-02 bullet)cla.yml:20,backlog-hygiene.yml:36The six:
backlog-hygiene.yml:36,ci.yml:9,cla.yml:20,codeql.yml:45,review-gate.yml:58,security.yml:37.The instrument warning is in the item now, because the wrong one is easy to reach for. A bare
grep -l merge_groupreturns seven:failure-signal.ymlcontains the string only to read a merge_group ref, andci.ymlandreview-gate.ymladditionally carrygithub.event_name == 'merge_group'step guards that are not triggers. The same trap explains the superseded control -- "18 files match pull_request" counted string matches while the claim it guarded was about triggers.The queue is live, not merely enabled: the Actions API reports 1365
merge_groupruns, and PR 754 merged at 2026-09-03T19:50:50Z with five queue-time workflows green ongh-readonly-queue/main/pr-754-c2237d78. Required contexts are evaluated on the merge-group commit, and every one of them reported on2b8bccb4. Half B landed 2026-08-26 in080fb235b(PR 616) andccdd557b3(PR 629).What changed
docs/BACKLOG.md-- a correction banner at the top of #340, and each superseded claim marked[SUPERSEDED 2026-09-03]in place rather than overwritten, following the convention the file already uses. The banner says "at least those marked", not a count, per CLAUDE.md section 11 (SDS-3.6).Four workflow
on:blocks -- all four carried the identical sentence: "INERT UNTIL A MERGE QUEUE EXISTS: with no queue configured GitHub never emits merge_group, so this workflow behaves identically today." It is false, and it tells the next reader those triggers do nothing while they now govern the merge path.Scope call I made: the brief named
cla.ymlandbacklog-hygiene.yml.ci.ymlandsecurity.ymlcarry the same sentence verbatim, so I corrected all four. Fixing half would leave the same false claim in the tree and imply those two triggers differ. Comment-only in each; no trigger removed, narrowed or disabled.Deliberately NOT touched: the two ranked score tables (lines ~406 and ~662) repeat the old reasoning, but both sit under headings that date them (
re-scored 2026-08-20,re-scored 2026-08-03). They are records of what those passes concluded. Editing them would misrepresent history -- the same defect this PR fixes. Flagging it because a reader who stops at a table row will not see the correction.TWO QUESTIONS FOR THE OWNER -- recorded, not acted on
1. Who authorised enabling the queue, and when? #340's 2026-08-14 amendment does not merely advise, it RULES: "HALF B MUST NOT BE BUILT SPECULATIVELY", on the ground that once the workflows carry
merge_group, enabling the queue looks like a one-click finish and the structural exception gets built under pressure rather than deliberately. Half B is built and the queue is live. I read the entire item for a later amendment; there is none, so that ruling is still the file's last word. The ledger records neither who enabled it nor when. The earliest queue entry named anywhere is PR 619 on 2026-08-27 (codeql.yml's header). I have not asserted this was authorised, and the correction banner says so explicitly.2. The
clashim, stated as measured and open. The amendment named option (i) -- give the PR-subject workflows a merge_group trigger that short-circuits to success -- and warned it manufactures a permanent green-that-means-not-applicable on the merge path, the silent-control decay ADR 0158 names.cla.ymlnow has that shape, measured on PR 754 as a paired control on one change:CLA Assistantstepcla33796353619pull_request_target33797809984merge_groupSame context name, two different meanings.
I did not call this a CLA bypass, and it should not be called one without evidence. What I could establish: PR 754 carried a green PR-time
clabefore it was queued (check-run success 19:25:55Z; exactly oneclaamong 41 check-runs on head1e9f1cb3, so the queue-time run posts on the merge-group commit, not the PR head). What I could not establish: whether GitHub requires that PR-time green before an entry may join the queue. That is the question that decides whether the queue-time green is decorative or a hole, and settling it needs a negative case I deliberately did not manufacture. Recorded as UNESTABLISHED in bothcla.ymland #340. Context that cuts toward safe but does not settle it:clais in branch protection's required set andenforce_adminsistrue.Pre-existing red, not mine
The workflow "the required-contexts file matches the server" will fail, reporting
CodeQL (javascript-typescript)andCodeQL (python)required on the server and absent from.github/required-contexts.txt. This is pre-existing and the fix is in flight elsewhere -- the owner is removing both CodeQL contexts from the server. That file records CodeQL as deliberately not required (its SARIF upload needssecurity-events: write, which fork-PR tokens lack) and says in terms "do not transcribe a future sighting over it". So I did not add CodeQL to that file and did not bump the pinned count intests/test_required_contexts.py. My change touches.github/, which is why the leg runs at all.Reviewer finding, fixed in
d06bf1eddande83d84714The first pass wrote required-context counts into the tree. CLAUDE.md forbids that outright:
.github/required-contexts.txtis a checked-in claim that can lag the server, so the live set must be read from branch protection. One of the numbers was already stale when written, inside a file whose whole subject is how required contexts behave.Deleted, not updated to a current value:
security.yml'son:block;Every affected sentence stands without a total, and each site now says to read branch protection.
Two of the flagged numbers were pre-existing dated text, not mine -- they entered the diff only because I had appended a supersession marker to the same line. Those lines are restored byte-for-byte and each marker moved onto its own line, so the history is preserved unchanged and the diff no longer writes them. The one the reviewer named directly, in the 2026-08-02 bullet, is deleted per their explicit instruction; its marker now records that the count was removed and why, so the decay is still visible.
Out of scope, deliberately: other backlog items carry their own required-context counts in their shipped banners. They are not in this diff and I did not touch them.
Swept the whole diff for bare numerals and spelled-out numbers near "context", "required" and "jobs". What remains near those words is a run id, a commit SHA, a CI step duration, and "one context name" describing semantics.
Checks
Interpreter: the primary checkout's
python.exewith this worktree as cwd, verified as the brief requires --Ran, all green:
scripts/docs/backlog_status_check.py-- OK, 657 items, each declaring exactly one statustest_backlog_status_checktest_merge_gate_controlstest_required_contextstest_required_contexts_drift-- 82 passedtest_security_posturetest_link_resolutiontest_backlog_citation_checktest_cp1252_console_safetytest_ledger_check-- 123 passedtest_doc_guards_lanetest_gate_ci_mirror_paritytest_ci_docs_only_detectortest_failure_signal-- 49 passedmerge_groupruff format/ruff checkreported "no files to check" -- no Python changedSkipped, for CI: the full suite. Six concurrent pytest processes were measured on this box today, so a full local run is contention, not signal.
mypynot run: no Python changed.Legs only a hosted runner can report:
windows-service-smokeand the server-DB legs. Please read them after this process exits.Prohibitions honoured
Item not closed and its status banner not flipped; no claim that enabling the queue was authorised; no
merge_group:trigger removed, disabled or narrowed; no branch-protection or repository setting touched; the CLA question recorded rather than resolved.🤖 Generated with Claude Code