Skip to content

feat(service,features,desktop): a merge box on the Pull request tab, merging as the member who presses - #3294

Merged
luke-agent[bot] merged 7 commits into
mainfrom
feat/pull-request-merge-box
Oct 18, 2026
Merged

luke-agent[bot] merged 7 commits into
mainfrom
feat/pull-request-merge-box

Conversation

@dastratakos

@dastratakos dastratakos commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

A2 of the "Act on the PR" stack, stacked on #3272 (W1: writes as the member). It adds a stage-cli-style merge box to the Pull request tab's fixed header.

What the box offers

The header's merge line ends in the one thing that may be done from where an open pull request stands:

  • Merge, by the method chosen among those the repository allows (merge commit, squash, rebase). A split chevron picks the method. The choice is kept per repository across launches, in this window's own storage as the sidebar's folds are. The merge asks first, since it can't be undone from here, and names the head commit the header read, so GitHub refuses it against a newer push.
  • Enable auto-merge, by the chosen method, while checks are still running and the repository allows auto-merge.
  • Merge when ready, on a base merged through a merge queue. This turns auto-merge on with no method, so GitHub adds the pull request to the queue once it is ready, as gh pr merge --auto does.
  • Disable auto-merge once auto-merge is on, and Remove from queue once the pull request is queued, with its place in the queue shown.
  • Nothing for a conflict or a draft. A blocked merge says what it waits on: changes requested, a required review missing, required checks running or failing.

Each press goes through W1's seam (memberPullRequestWrite), so it is made on GitHub as the member who presses, using GraphQL mergePullRequest, enablePullRequestAutoMerge, disablePullRequestAutoMerge or dequeuePullRequest. GitHub's refusals (branch protection, a moved head, a method a ruleset forbids) show in GitHub's own words on W1's line.

The read

The header's read (/overview/pull-request) now carries an optional merging, read in one GraphQL query on the App's installation token beside the REST read. It holds:

  • the allowed merge methods and whether auto-merge is allowed;
  • whether a merge queue merges the base, and the pull request's place in it;
  • whether auto-merge is on, and by which method;
  • the head commit, the review decision, and the head's check rollup.

If GitHub won't answer that query, merging is left out and the header stands without the box. The methods are the repository's settings only. A ruleset that narrows them is left to GitHub to refuse, in its own words.

Goldens

Recorded with LUKE_UPDATE_FIXTURES=1:

  • pull-request-write-wire-pullRequestActionRequestSchema and coding-agent-view-codingAgentPullRequestActionParamsSchema gain the merge, enable-auto-merge, disable-auto-merge and dequeue actions.
  • pull-request-write-wire-mergeMethodSchema is new.
  • coding-agent-wire- and coding-agent-view-codingAgentOverviewPullRequestAnswer… gain the optional merging.

Tests

  • Service:
    • each merge action is sent as the member, with the right mutation and variables (method uppercased, head named, no method on a queue's Merge when ready);
    • a head that is missing or not a commit is refused before GitHub;
    • the header read carries merging read on the App's token, and stands without it when the query fails.
  • Renderer:
    • the method picker, with the choice kept across a redraw;
    • Merge asks first, then sends the head it read;
    • Enable or Disable auto-merge, Merge when ready and Remove from queue each send their action;
    • the blocked wording, and nothing offered for a conflict.
  • PRIVACY.md says what the merge read reads, and lists Merge and Enable auto-merge among the button presses made as you.

Checks

The full pnpm check:affected runs out of memory in the sandbox. I ran the parts separately instead, and all passed: per-package tsc, oxlint, biome, knip, and the affected vitest files.

Screenshots follow in a comment.

Made with Luke


Devin Review


Summary by cubic

Adds a merge box to the Pull request tab's fixed header so members can merge a pull request or set up auto-merge from where it stands, with each action made on GitHub as the member who presses, through the existing write seam.

  • Offers Merge, Enable auto-merge, Merge when ready on a merge-queued base, Disable auto-merge, and Remove from queue; drafts and conflicts get no box, and a blocked merge says what it waits on.
  • Merge asks first in a dialog whose act keeps the accent as GitHub draws Merge, and merges the head it was asked about, even if a later read names a newer one; the chosen method persists per repository.
  • The overview read carries optional merging data from one GraphQL query on the App's token and stands without the box when GitHub won't answer it; GitHub's refusals, like branch protection or a forbidden method, come through in GitHub's own words.

Written for commit 277c448. Summary will update on new commits.

View guided diff Turn on auto-fix

@vercel

vercel Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
luke-web Ready Ready Preview Oct 18, 2026 4:51pm UTC

Request Review

@luke-agent
luke-agent Bot changed the base branch from main to feat/pull-request-member-writes October 17, 2026 01:41
@luke-agent

luke-agent Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

Screenshots, drawn by a throwaway harness that mounts the tab with a fake window.luke:

Ready to merge, with the method picker open:
merge

The merge asks first:
confirm

Checks running, so auto-merge is offered:
auto

Auto-merge on:
auto-on

A merge-queue base offers Merge when ready:
queue

Queued:
queued

luke-agent Bot pushed a commit that referenced this pull request Oct 17, 2026
devin-ai-integration[bot]

This comment was marked as resolved.

Base automatically changed from feat/pull-request-member-writes to main October 17, 2026 01:45
dastratakos and others added 2 commits October 17, 2026 01:47
…merging as the member who presses

The header's merge line now ends in the one thing that may be done from
where an open pull request stands: Merge by a method the repository allows
(asked first, the method chosen kept per repository), Enable auto-merge while
checks run where the repository allows it, Merge when ready on a base merged
through a merge queue, or Disable auto-merge and Remove from queue once one
was asked for. Each is made on GitHub as the member through the W1 seam, a
merge and auto-merge against the head the header read. The header's read
carries how the pull request may be merged, read in one GraphQL query on the
App's token beside it, and a blocked merge says what it waits on.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
…stion's act is red

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
…ub draws Merge

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 17, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 17, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot enabled auto-merge October 18, 2026 16:05
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 18, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 18, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot enabled auto-merge October 18, 2026 16:25
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 18, 2026
@luke-agent
luke-agent Bot removed this pull request from the merge queue due to a manual request Oct 18, 2026
…acy aliases gone

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent

luke-agent Bot commented Oct 18, 2026

Copy link
Copy Markdown
Contributor

The merge box rebuilt on main after the move to --luke-* roles (388a152). Its CSS now uses no legacy aliases. Drawn by a throwaway harness:

Ready, with the method picker:
merge

Checks running:
auto

Auto-merge on:
auto-on

Merge-queue base:
queue

Queued:
queued

luke-agent Bot pushed a commit that referenced this pull request Oct 18, 2026
@luke-agent
luke-agent Bot enabled auto-merge October 18, 2026 16:38
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 18, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 18, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot enabled auto-merge October 18, 2026 16:48
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 18, 2026
Merged via the queue into main with commit aaa8d8e Oct 18, 2026
12 checks passed
@luke-agent
luke-agent Bot deleted the feat/pull-request-merge-box branch October 18, 2026 17:04
luke-agent Bot added a commit that referenced this pull request Oct 18, 2026
…ction-writes

Brings in main's merge box (#3294). The reaction write joins its one dispatch (writeOf); REACTION moves down into pull-request-write-wire.ts, since coding-agent-wire.ts now imports that module and the old direction closed a cycle; and the overview's explicit private, no-store goes, since every hosted answer now sends it (#3355).

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Preview — 277c4489 Deployed Oct 18, 2026 by vercel[bot]
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.

1 participant