Desktop Material

Native pull request review workspace

Behavior

Open a pull request's context menu and choose Manage Pull Request… to load a single account-bound workspace. A fixed header names the current pull request, shows an Open, Closed, or Merged badge, and states who wants to merge the exact head into which base. A persistent right rail shows files changed, reviewers, and assignees, with direct keyboard-accessible actions for Files and Conversation. Five keyboard-accessible tabs organize the workflow:

The summary reports item counts. If GitHub advertises more than six 50-item pages for a collection, the workspace marks that collection as capped and directs the user to GitHub for the remainder.

Provider requests

The workspace reads these GitHub REST collections independently with per_page=50, a maximum of six pages, and a one-megabyte JSON limit per response:

Review submission uses POST /pulls/{number}/reviews with the inspected commit_id and at most 25 combined inline comments and replies. Replies are then sent to POST /pulls/{number}/comments/{comment_id}/replies. Close and reopen use the documented state field on PATCH /pulls/{number}. Ready for review and convert to draft remain browser actions because the bounded REST contract does not expose GitHub's GraphQL-only mutations.

Configuration

No feature flag is required. The selected account must be a signed-in GitHub account whose endpoint exactly matches the pull request's base repository. The repository must not be archived for mutation. Checks appear when the existing commit-status service has results for the head SHA.

Failure modes

Security considerations

Every read and mutation is routed through the exact base repository and matching account endpoint. Workspace data is revalidated before and after the parallel collection reads. Mutations require the most recently inspected head SHA, and the store checks inline paths and reply identifiers against that head's loaded workspace before transport. Suggested replacements use a Markdown fence longer than every run of backticks in the replacement, so replacement text cannot end the suggestion block early or append a second review payload. The completed body then passes the same length, null-character, path, line, queue, account, and head-SHA checks as an ordinary inline comment. Provider response bodies are not echoed into error copy. Patches are display-only and never written to the worktree.

Verification

Focused tests cover parser bounds and path rejection, strict pagination, pre/post head checks, account-scoped store caching, stale inline/reply rejection, review payload anchoring, close/reopen state, accessible dialog tabs, pending queue confirmation, checks fallback, responsive patch scrolling, and the deterministic guided-proof fixture routes. Layout tests also pin the fixed desktop header/two-column rail, its narrow single-column fallback, accessible summary and state names, focus-moving navigation actions, and injection-safe suggestion transport.