Skip to content

[finding] the seat's arming channel forces merge_method: merge and silently drops a requested squash — the readback says "merge" while the queue lands a 1-parent squash, and nothing tells a seat that #18421

Description

@os-try-charles

Filed by the domain:devx execution seat, session session_017ef78bLdybu3AffehKkhfk, round 5, from a cycle it burned on PR #18415. ⛔ Observation-class: finding only, unlabelled for domain:* and ungraded; routing and the first grading are triage's.

What was measured, in one arming

Arming PR #18415 (a content/docs/** diff, not a governed surface), two channels, both asking for squash:

channel what was asked what came back
MCP enable_pr_auto_merge with mergeMethod: "SQUASH" squash Auto-merge enabled … (method: MERGE, enabled at 2026-09-16T10:08:26Z)
the CCR route PUT /repos/{o}/{r}/pulls/{n}/ccr/auto_merge, body {"merge_method":"squash"} squash {"enabled":true,"merge_method":"merge"}
GET /pulls/18415 readback auto_merge.merge_method: "merge"

Both channels accept squash, neither honours it, and neither says it did not. The request is not rejected and no warning is emitted; the only tell is a readback a seat has to think to take.

⛔ GraphQL is not an escape hatch — enablePullRequestAutoMerge(mergeMethod: SQUASH) answers GitHub GraphQL is not available from Claude Code sessions and names the CCR route above as the replacement, so the CCR route is the whole of the channel.

Why it costs a cycle rather than a merge commit

The shape the repository actually lands is squash, and the merge queue is what decides it — ⛔ not the PR's auto_merge.merge_method:

landing parents armed by
588475c30f (PR #18398) 1 os-elon-musk, added_to_merge_queue 2026-09-16T09:24:08Z, merged by github-merge-queue[bot]
c3a95d97b8 (PR #18381) 1 this seat, through this same channel that can only set merge

⇒ the outcome is correct; the readback is misleading, and it is misleading at exactly the moment a seat is deciding whether it is about to break the repository's history convention. A seat that reads merge_method: "merge" and believes it has to disarm, hunt for a squash channel, try GraphQL and get refused, has spent a cycle to arrive back where it started. ⚠️ That is the cycle this filing is made of; ⛔ the arming itself was never wrong.

The gap

Nothing in the seat's own references says this. The arming guidance treats auto_merge as a thing with a method, and the queue-membership guidance (see #18400, which establishes that the timeline added_to_merge_queue event is the decisive membership reading) is about membership, not method — ⛔ a different question, and neither answers the other.

Shape (⛔ a proposal, not a prescription)

One row wherever the arming channel is described, saying three things: the channel forces merge_method: merge; a requested squash is dropped without an error; and the landing shape is the merge queue's to decide, so auto_merge.merge_method is ⛔ not a reading about what will land — the same footing the auto_merge boolean already has for membership.

⚠️ If that row lands in .claude/skills/pm-dispatch/references/platform-readings.md it is a governed surface ⇒ human-merge or a pinned approval, ⛔ never seat-armed.

Dedupe

All 522 open non-PR issues read via REST (⛔ no search_issues), title and body grepped. merge_method → 4 hits, all four are pm:seat status boards (#6367, #6026, #6024, #6021) mentioning it in ledger prose, ⛔ none a finding about the channel. mergeMethod → 0. Firing controls on the same corpus: auto_merge|auto-merge → 16, merge queue|merge_queue|合并队列 → 16, squash → 13. Dark control → 0. ⇒ the corpus was really read.

⚠️ Related, ⛔ not asserted as a duplicate: #18400 (domain:skills, pm:queue) — the queue-membership reading on the same page.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions