Repository navigation
feat(desktop,service,features): reviewer and label pickers in the Pull request tab's header - #3309
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
luke-agent
Bot
changed the base branch from
main
to
feat/pr-header-labels-stack
October 17, 2026 02:03
luke-agent
Bot
force-pushed
the
feat/pr-header-labels-stack
branch
from
October 17, 2026 02:06
4650e32 to
f97c089
Compare
luke-agent Bot
added a commit
that referenced
this pull request
Oct 17, 2026
…nd hold the pickers until the read after a change lands Devin's review of #3309: only a listing the App may not read (403) stands empty; any other failure fails the read, so the picker reads it again. And the pickers stay disabled while the pull request is read again after a change, so nothing is chosen from what it held before. Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 17, 2026 02:12
951cd61 to
a8f65b3
Compare
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 16:29
535173a to
f5979b0
Compare
14 tasks done
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 16:48
325b386 to
2156a70
Compare
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 18, 2026
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 17:02
2156a70 to
612a1d3
Compare
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 17:15
612a1d3 to
3454c35
Compare
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 17:33
3454c35 to
3d9d415
Compare
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 18, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 18, 2026
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 17:53
3d9d415 to
d91d443
Compare
…l request tab's header
The header gains a reviewer picker beside its reviewers and a label picker
at its labels' end, each a menu of what the agent's repository offers, its
teams and collaborators or its labels, read once on the App's token as a
picker first opens (`GET /api/agents/{id}/review-options`). Choosing one
asks a review of a user or a team, or asks it no longer, or puts a label on
or takes it off: four new actions on the member write path, each a REST
write on the member's own GitHub token, since GraphQL offers no mutation to
take a requested reviewer off. The pull request's read now carries the
teams it asks a review of, which the picker checks. A listing GitHub did
not answer fails the read so the picker retries it, and the pickers hold
until the read after a change lands.
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
…hared --luke-* roles #3524 removed the desktop's legacy token aliases, so the labels', stack's, and pickers' rules read --space-*, --hairline, --text-*, and --raised to nothing on main. Each now reads the role its alias pointed at. Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
luke-agent
Bot
force-pushed
the
feat/pr-header-reviewer-label-pickers
branch
from
October 18, 2026 18:09
d91d443 to
4466df2
Compare
This branch was successfully deployed
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.
Summary
This is F2 of the "Reviewers, labels and stack navigation" stack. F1 (#3268) has merged, so this now targets
main, squashed to one commit on it. It adds pickers to add and remove requested reviewers (users and teams the repository allows) and labels (the repository's labels). Every write goes through W1's member write path (#3272): it is made as the member who pressed it, on their own GitHub sign-in, and never on the Luke GitHub App.GET /api/agents/{id}/review-options: the repository's labels, its collaborators (named against the workspace's members) and its teams.pull-request-write-wire.ts's action union gainsrequest-review,remove-review-request(a{ kind: user | team, name }reviewer),add-labelandremove-label(a label name).coding-agents-app.ts'sactionWritedispatches them throughmemberPullRequestWrite.setReviewRequested,setLabelledingithub/pull-request-writes.ts). GraphQL has no mutation that removes a requested reviewer;requestReviewswithunion: falsereplaces the whole set, which races with other changes. So all four writes use REST, with GitHub's refusals told apart exactly asgithubWrite's are (401 → sign in again; other statuses → GitHub's own words).github-app.tsgainsgithubSendRequestnext togithubPost, for the POST and DELETE.requestedTeams(fromrequested_teamsin the same REST read, so no extra request), which the reviewer picker uses to check teams.pull-request-writes.tsx).Screenshots
From a throwaway harness, redrawn after moving the header's CSS onto the shared
--luke-*roles (#3524 removed the old aliases; this also fixes the F1 label and stack rules already onmain): the tab with a fakewindow.lukeand the builtstyles.css. One team and one user are requested, and the repository offers 2 teams, 4 people and 5 labels.GitHub requests
/labels,/collaborators,/teams), one page each up to 100 entries. None after that for the life of the tab.requested_teamscoming from the same response.Wire
codingAgentReviewOptionsAnswerSchema, plus its view schema.codingAgentOverviewPullRequestAnswerSchema: gains an optionalrequestedTeams.pullRequestActionRequestSchema: gains four branches.codingAgentPullRequestActionParamsSchema, which embeds the action schema.codingAgents.reviewOptions, threaded through compose, operator, IPC andCodingAgentsControl.readReviewOptions.apps/web/server/routes/agents/review-options.ts, withapi-rewrites.jsonandvercel.jsonregenerated bypnpm --filter @luke/web functions:rewrites.Evidence
pnpm check:affectedruns out of memory in this sandbox, so I ran the per-package fallback:tscfor@luke/desktop,@luke/service,@luke/features,@luke/hostand@luke/gateway: pass../scripts/oxlint.sh: 0 errors.pnpm knip: pass.pnpm discarded-effect: pass../scripts/repository-checks.sh: pass, including the rewrites--checkand the api-callers scan.coding-agents-app.test.ts: the new and W1 suites, 10 tests, pass.agent-pull-request-tab.test.ts: 29 pass.packages/host/src, IPC acts and Vercel functions: 179 pass.node scripts/build.mjsinapps/desktop: within the bundle budget.New tests:
Invariants
./scripts/check.shgreen. (CI)astype assertion.Notes
pull-request-write-wire.tsandactionWritekeep both this PR's four actions and main's review-submit and thread reply/resolve actions. The reviewer and label writes go by REST on owner, repo and number; the rest go through the node id.Made with Luke
Summary by cubic
Adds reviewer and label pickers to the Pull request tab's header. The reviewer picker offers the repository's teams and collaborators (the author left out) on open and draft PRs; the label picker offers the repository's labels and also works on merged and closed PRs. The header's labels, stack, and pickers now draw with the shared
--luke-*design roles, since the legacy token aliases were removed in#3524.GET /api/agents/{id}/review-options, fetches the repository's labels, collaborators, and teams once, when a picker first opens, on the App's installation token, paged up to 300 entries each. A listing the App may not read (403) comes back empty with a logged warning; any other failure fails the read, and the picker reads it again.request-review,remove-review-request,add-label, andremove-label— go out as REST calls on the member's own GitHub token, since GraphQL has no mutation that removes a requested reviewer. A 401 asks for a fresh sign-in; other refusals show GitHub's own words on the existing write line.Written for commit 4466df2. Summary will update on new commits.