feat(web): pull request surfaces — filters & search qualifiers, all-server listing, update branch, smarter diffs, panel follow-ups - #6039
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Needs human review This PR adds multiple new features including PR list filters, review status display, import-based diff ordering, update-branch functionality, and multi-environment listing support. The scope and new logic introduced warrant human review. You can customize Macroscope's approvability policy. Learn more. |
… summary An approval review is a verdict rather than a finding, so its comment no longer offers the fix-in-a-thread hand-off.
GitHub omits hunks for files it will not inline, so the viewer's hunk-sum counts read -0 +0. The host's own additions/deletions now ride the diff slice, and the code tab draws every file's counts itself.
Dismissing prior approval to re-evaluate 4095917
Dismissing prior approval to re-evaluate c4e4edc
Dismissing prior approval to re-evaluate 9b66581
Attribution is the avatar alone with the name on hover, the dot separators go, review states read as words (Changes requested), and a dismissed review no longer offers the fix hand-off.
Dismissing prior approval to re-evaluate 1c4c08f
…ting contract and GitHub reads
…tory name Providers that ignore the list filters get their rows narrowed by the service, and azure-devops resolves its selector to the repository name az actually accepts instead of the org/project/_git/repo path that read as unavailable.
Also generalizes search qualifiers: an unrecognized key:value token filters as the label it names, so each repository's own label scheme works without a hardcoded list.
… request page (adapted from pingdotgg#6108)
…vers (adapted from pingdotgg#6108)
GitHub's compare read answers how far behind the base a branch is, and gh pr update-branch carries the update through the existing action pipeline with merge or rebase, gated by the host's capability and the viewer's own updateMethods.
The comparison's GraphQL variables now travel as gh flags, the standalone permissions read fetches the comparison for open pull requests, and the review filter no longer judges rows from hosts that never summarise their reviews.
…ly a mergeable verdict
Follow-ups to the pull request surfaces, from Discord/X feedback.
List: filters, search qualifiers, review status
label:x,label:"needs design",-label:x,author:login,draft:true|false,review:…,status:…— and any unrecognizedkey:valuetoken (size:XXL,vouch:trusted) filters as that label, so each repository's own label scheme just works; quoting keeps a token literal text. Typed qualifiers win over the menu; leftover words stay ordinary search text.PullRequestListEntry.reviewDecision; listings stay ordered by recently updated.List: every connected server
The page previously listed one environment. It now unions all connected servers that support pull requests: per-environment atoms fanned out through one merge atom, rows tagged with their server, viewer identity / truncation / cursors / project scope all environment-scoped, failures degrading to partial results. A Server filter scopes to one connection; the sidebar link shows when any server qualifies; PR links in chat resolve across servers; right-panel tabs are server-scoped so the same PR from two servers is two tabs (parts adapted from #6108 — thanks @StiensWout). Azure DevOps repositories no longer read as unavailable: the selector hands
azthe repository name instead of theorg/project/_git/repopath.Detail: base-branch freshness + Update branch
GitHub parity for the out-of-date banner: up to date / "out-of-date with the base branch — changes can be cleanly merged" (with behind-by count, only on a real
mergeableverdict) / conflicting. Update branch split button: merge commit by default, "Update with rebase" when the host and viewer allow it (gh pr update-branch [--rebase]through the existing action pipeline; detection via the compare API'sbehindBywith fork-qualified head refs, sincemergeStateStatusonly reports BEHIND under strict checks). Capability- and permission-gated end to end; other providers untouched.Code tab: diffs in reading order instead of alphabetical
orderDiffFilesorders each slice source → tests → generated (lockfiles, snapshots,dist/, minified). Source files follow an import graph parsed from the patch's own lines — dependencies before dependents, deterministic, directory-clustered ties. Tests sit after the implementation they name.Right panel + summary follow-ups
ReviewDismissedEvent, paginated), approved/dismissed reviews don't offer "Fix in a thread".PullRequestDiffResult.omittedFileStats.Verification
tsgo --noEmitclean in contracts, client-runtime, server, web.pullRequest/,routes/,rightPanelStore,openPullRequestLink,sidebar) and 244 contracts tests pass.reviewDecisionvia gh/GraphQL, base comparison (behindBy 1091 on fix(keybindings): let xterm handle Ctrl+Arrow natively, use CSI for Alt+Arrow #2243, 0 on feat(web): pull request surfaces — filters & search qualifiers, all-server listing, update branch, smarter diffs, panel follow-ups #6039), and the malformed-variables regression proven against the real CLI.