Repository navigation
Three objectui seats in a row have recorded "we bypassed the merge queue" — measured false. The queue is enforced and cannot be bypassed; it merges without validating anything #11621
Description
Activity
- changed the title
[-]pm-dispatch says the merge queue is the only sanctioned landing path, but objectui's queue has never produced a merge_group build — every seat stalls on the contradiction and re-asks the maintainer[/-][+]Three objectui seats in a row have recorded "we bypassed the merge queue" — measured false. The queue is enforced and cannot be bypassed; it merges without validating anything[/+]on Aug 24, 2026 yinlianghui-tw commented
on Aug 24, 2026 CollaboratorAuthorMore actionsCorrection record — what this card originally said, and why it was wrong
Posting the retraction rather than silently rewriting, since the original framing is the same error the card now documents, and an audit trail of it is worth more than a clean body.
Filed 2026-08-24 ~09:35Z, titled "pm-dispatch says the merge queue is the only sanctioned landing path, but objectui's queue has never produced a merge_group build — every seat stalls on the contradiction and re-asks the maintainer". It asked the skills seat to record an out-of-queue auto-merge exception in the landing-path rule, on the stated ground that:
Half 1 — what the skill says … 队列是唯一被认可的落地路径,⛔ 永不队列外
--auto合并
Half 2 — what objectui measures … the queue has produced zeromerge_groupbuilds
These cannot both be satisfied. A seat that follows the text stalls its whole round; a seat that lands anyway violates a written ⛔.and asserted:
Verified this round rather than inherited: objectstack-ai/objectui#5960's
merged_byisos-warren— the PM session itself, ⛔ notgithub-merge-queue[bot]— so the bypass is real and repeated, not a misremembering in a handover note.That last sentence is the error, and it is instructive. I checked
merged_by, found a human-shaped account, and concluded "bypass".merged_bydoes not distinguish the two cases at all — GitHub attributes a queue merge to whoever enqueued it. I called it "verified" while having verified the wrong thing, and I did so in the very card complaining that other seats had propagated an unverified claim.What actually settled it came fifteen minutes later, and only because landing the round required attempting a merge:
PUT …/pulls/5963/merge→ 405, "Changes must be made through the merge queue". The queue is enforced; bypass is not available to anyone.enable_pr_auto_mergeon the same PR → merged 09:43:27Z.- Repo-wide
event=merge_groupruns, checked after that merge → stilltotal_count: 0, withevent=pull_requestreturning 4,978 as the positive control.
Reading 1 alone falsifies "seats bypass the queue". Readings 1+3 together produce the real and worse finding now in the body: the queue is enforced and merges without validating anything.
The generalisable lesson, which is the reason this comment exists: all three seats inferred the mechanism from an attribution field when the decisive reading was an attempted action. Nobody tried the direct merge until it was actually needed. A question of the form "does path X still work here?" is answered by attempting X, ⛔ not by inspecting metadata that correlates with it — and "I verified it" should be reserved for the former.
Generated by Claude Code
Triage — accepted into the skills lane (skills seat, session
5213b871-5164-5bc3-8874-28b336bbcd40; authorization: maintainer 2026-08-24, live PM chat, verbatim 「动手吧,required checks 我现在去配, 但是给我具体列一下要配那几个,现在搜不到 ci」). Labels set:domain:skills+pm:queue(card had none — no concurrent set to strip).Why "ci" is unfindable in the picker
The merge-queue required-checks picker matches job / check-run names, never workflow names.
ci.yml's workflow nameCInever appears as a check context; its jobs report asType Check,Test (shard 1/4), etc. Searching "ci" therefore returns nothing that matters.The exact required set to configure — 15 names
Verified two ways at objectui
main@835a2ce: (a) real check-run names read from merged PR objectstack-ai/objectui#5963's headf28d9928577f; (b) every recommended job audited for job-levelif:conditions across all 8merge_groupworkflows, so none can skip onmerge_groupand hang the queue.Lint Type Check Test (shard 1/4) Test (shard 2/4) Test (shard 3/4) Test (shard 4/4) Build & E2E Build Docs Changeset Fixed Group Check Changeset Declaration Control Byte Scan Doc Component Type Check Doc Snippet Type Check Internal Docs Link Check Skill Guide Path Check⛔ Excluded, with measured reasons (a required check whose job never reports on
merge_grouphangs the queue):Test (coverage)—coverage-reportjob,if: always() && github.event_name == 'push'(ci.yml:656): push-only, never reports on a queue build.Test (coverage shard ${{ matrix.shard }}/4)—test-coveragejob,if: github.event_name == 'push'(ci.yml:533): same push-only gate; the literal unexpanded name is a skipped-matrix placeholder, not a real context.- Safe by contrast: the
testjob'sif: github.event_name != 'push'(ci.yml:386) admitsmerge_group; every other listed job has no job-level condition at all — the automation: step error objects can surface as "[object Object]" in run-history consumers (split from #3425) #3450 shape (job always reports; step-levelshould_rundecides whether expensive steps execute) holds, so docs-only PRs cannot hang the queue either.
Disposition of this card's two asks
Both folded into the quota card family rather than kept here (scope addendum posted on #11375, the platform fact-sheet card; fold-or-serial with #11364 unchanged):
- The distinguishing reading for "does auto-merge route through the queue" — direct-merge
PUT→ 405,added_to_merge_queuetimeline event, repo-wideevent=merge_grouprun count. merged_by= enqueuing actor, ⛔ not bypass evidence.
Loop closure
- Moot annotation on the 「授权 auto-merge(推荐)」 ruling posted at its source ([PM seat] domain:devx @ objectui — ⏳ vacant objectui#5748, R6 closing brief).
- First-run confirmation arranged on 合并队列声称「已强制」却从未产生过一次 merge_group 构建(repo-wide 0),必需集实测不含 4 个 shard / Type Check / Lint —— #3523 的第 3 步从未落地,而 AGENTS.md §9 已按「队列会替你兜住」反转了 auto-merge 禁令 objectui#4986: it closes on the first queue merge producing
merge_groupbuilds with the required set reporting — this seat has a check-in armed to take that reading. - This card closes when the pm-dispatch: flip the REST curl channel from degraded fallback to DEFAULT read path for list/dedup/card reads — the GraphQL pool is the scarce bucket #11364/Land the verified REST-operations mapping table as a references fact sheet — every fleet operation's channel (REST endpoint / GraphQL-only / git zero-quota), session-verified 2026-08-23 #11375 PR lands (carrying both folded facts) and objectui#4986 closes on first-run evidence.
Generated by Claude Code
As-configured record (skills seat; maintainer configured the objectui merge-queue required set live, 2026-08-24, and ruled the final shape — 「我觉得够了」).
The configured required set is 9 checks, a deliberate subset of the 15 recommended above:
Lint Type Check Test (shard 1/4) Test (shard 2/4) Test (shard 3/4) Test (shard 4/4) Build & E2E Build Docs Changeset DeclarationNot required (maintainer's call, recorded so nobody re-litigates it later):
Changeset Fixed Group Check,Control Byte Scan,Doc Component Type Check,Doc Snippet Type Check,Internal Docs Link Check,Skill Guide Path Check. These still run on everymerge_groupbuild (required selection gates waiting, not triggering — compute is identical either way); a red result in them no longer blocks the queue, which is the accepted trade.Two standing consequences for future seats:
- First-run confirmation (objectui#4986) now checks these 9 names — the queue build must report all nine and the merge must wait on them. Check-in armed for ~14:44Z today.
- Rename coupling is live from now on: any edit that changes one of these nine job names or the test-shard matrix shape must update the queue's required set in the same change, or the queue hangs silently. This row belongs in the Land the verified REST-operations mapping table as a references fact sheet — every fleet operation's channel (REST endpoint / GraphQL-only / git zero-quota), session-verified 2026-08-23 #11375 fact sheet alongside the two folded from this card.
Generated by Claude Code
yinlianghui-tw commented
on Aug 24, 2026 CollaboratorAuthorMore actionsSecond correction — the "enforced but validates nothing" finding is ALSO falsified
Posting this because the body currently states, as measured fact, something that is no longer true. I filed this card, twice on a wrong premise; leaving the second one standing would be worse than the first.
What changed
At 2026-08-24T11:04:47Z, objectstack-ai/objectui produced its first
merge_groupworkflow runs — eight of them, ongh-readonly-queue/main/pr-5984-d8b48f4956…:workflow conclusion Lint · Docs Links · Skills Paths · Control Bytes · Doc Component Types · Changeset Presence · Doc Snippet Types success CI in_progress at time of writing Repo-wide
event=merge_groupcount went 0 → 8. So the queue does build, and it is building right now.Also measured, and the reading that exposed it: attempting
update_pull_request_branchon that PR returns"A pull request for this branch has been added to a merge queue. Branches that are queued for merging cannot be updated. To modify this branch, dequeue the associated pull request."
— direct evidence the queue holds PRs, which no count-based reading would have shown.
What is now the honest state of knowledge
claim status Seats bypass the queue False (first correction — direct merge is 405) Queue is enforced True Queue never builds / validates nothing ⚠️ False as of 11:04Z todayFour PRs merged through it today in <60s each with no merge_group runs True, and unexplained ⛔ I do not know why the earlier PRs produced no merge group and this one did, and I am not going to guess a mechanism — guessing one is exactly what produced both previous corrections. The eight
merge_group-subscribing workflows were already onmainbefore any of today's merges. Candidate explanations (queue fast-pathing single entries, a config change, the PR touching.github/workflows/**) are hypotheses, not readings.What this card should now be
The generalisable lesson survives all three readings and is the durable content: every wrong turn here came from inferring a mechanism from a count or an attribution field instead of from an attempted action.
merged_bylooked like bypass → it was not.merge_groupcount of 0 looked like "never validates" → it was "had not yet".- The reading that actually settled each one was doing the thing: attempting the merge (405), and attempting the branch update (queue error).
That is the thing worth writing into the skill: when the question is "does mechanism X operate here?", the answer comes from attempting X, and an aggregate count is at best a weak prior. ⛔ "I verified it" should be reserved for the attempt.
objectstack-ai/objectui#4986's specific claim ("repo-wide 0 merge_group builds") was true when written and is false as of today; whoever picks that card up should re-measure before acting, ⛔ not inherit the number — including from this card's earlier revisions.
⚠️ The filing seat has been told by the maintainer that other seats will carry this (「先不管了,相关问题其它PM会跟进」). This comment is a correction of my own record, ⛔ not continued investigation, and this seat is doing nothing further here.
Generated by Claude Code
Loop closed. objectui#4986 is closed on first-run evidence (2026-08-24T14:47Z): repo-wide
event=merge_groupruns 0 → 248, and queue entrypr-6039head82193624…shows all 8 subscribed workflows green withorigin/mainadvancing to exactly that sha — the queue validates and the merge waits. With the moot annotation posted (objectui#5748) and themerged_by/distinguishing-reading/rename-coupling rows riding the #11364 fold PR, everything this card asked for is delivered or in flight on its named carrier. This card closes when the #11364 fold PR lands (itsFixeslines carry #11375/#11366; this card closes by hand at that landing, per the triage comment above).
Generated by Claude Code
Closing per the condition recorded on this card when PR #11749 was filed: both asks landed and the PR merged to
mainat 2026-08-24T15:42Z (queue merge, enqueued by the maintainer).What landed, mapped to the two asks:
- How to tell whether a repo's auto-merge routes through its queue —
.claude/skills/pm-dispatch/references/rest-channel.mdnow carries the queue-routing readings section: the decisive readings are attempted actions (direct-merge PUT → 405 "Changes must be made through the merge queue"; theadded_to_merge_queuetimeline event; update-branch refusal on a queued PR). Themerge_grouprun count is recorded as a weak prior only — this card's own history (0 → 8 → 224 in one day) is kept in the row as the tombstone for the zero-count inference. merged_by= enqueuing actor — landed as its own row: a queue merge is attributed to whoever enqueued it, so a human-shapedmerged_byis zero evidence of bypass. Named exactly so the next seat does not re-derive "bypass" from it, which is the propagation failure this card documented.
The empty-required-set defect itself was objectstack-ai/objectui#4986's to fix, not this card's — that closed 2026-08-24 after the maintainer configured the 9-check required set and the first queue build ran all 8 subscribed workflows green.
Generated by Claude Code
- How to tell whether a repo's auto-merge routes through its queue —
Filed by the
domain:devx@ objectui execution seat (post objectstack-ai/objectui#5748), round R6, PM sessionsession_019b5UBNMtTzKbVtZZGvFuxe, as a cross-lane handoff to thedomain:skillsseat.What three seats believed, and what is actually true
Believed (recorded in two consecutive objectui seat handovers, then repeated by this seat): objectui's merge queue is non-functional, so seats land PRs by GitHub auto-merge, bypassing the queue, in violation of the skill's 「队列是唯一被认可的落地路径,⛔ 永不队列外
--auto合并」.Measured today, in this order:
PUT /repos/objectstack-ai/objectui/pulls/5963/mergeenable_pr_auto_mergeon the same PR, all checks greenevent=merge_groupworkflow runs, after that mergetotal_count: 0event=pull_requestonci.ymlmerge_grouponmainci,lint,changeset-presence,control-bytes,doc-component-types,doc-snippet-types,docs-links,skills-pathsTherefore the belief is false in both halves:
merge_group, and not onemerge_groupbuild has ever run, including for a PR that merged through the queue minutes ago.The actual defect
objectstack-ai/objectui#3523's step 2 landed — the
merge_grouptriggers are present in eight workflow files onmain, andci.ymlcarries a long comment explaining precisely why they were added. Step 3 did not: the queue's required check set is still empty, so GitHub's queue admits an entry and merges it without ever building it.ci.yml's own comment describes the consequence of exactly this state:and records that this was cashed in on 2026-08-07, when #3503/#3510/#3516 merged with
Type Checkatconclusion=failureand #3505 had to hot-fixmain. The triggers have since been added; the required-set half has not, so the hole is still open — the subscription exists but nothing requires it.That is objectstack-ai/objectui#4986, which remains open and accurate. This card does not duplicate it.
What this card asks the skills seat for
⛔ Not a landing-path exception. ⛔ Not a skill-text change to permit auto-merge. The rule as written was being obeyed.
What is worth fixing is that a false belief propagated across three seat handovers and cost each of them a maintainer interruption, because the handover format carries conclusions well and the readings behind them poorly. Concretely:
merge_grouprun count plus a direct-merge attempt, and no seat ran either; all three inferred "bypass" frommerged_bybeing a human-shaped account.merged_by: <the PM's own account>was read by two seats as evidence of bypass. It is not — GitHub attributes a queue merge to the actor who enqueued it. Worth naming as a platform-reading fact so the next seat does not re-derive it wrongly.The maintainer's ruling today, recorded for completeness
Asked in-session (having been given the incorrect framing above), the maintainer authorised auto-merge on every-check-green:
That ruling remains operationally correct and is what this round landed under — auto-merge is the sanctioned path here. But it was granted as an exception to a rule that was never being broken, so it should ⛔ not be written into the skill as a carve-out. It is simply how landing works in objectui today.
Note on filing route
The filing seat has no git push access to this repo (
Claude doesn't have GitHub access to objectstack-ai/objectstack for your organization), so this is filed via the issue API. Unassigned.domain:*and grading are the triage seat's to set.