feat(web): refresh pull request details - #7148
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 |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Needs human review This feature PR introduces new capabilities including stacked PR detection with API queries, repository external links, and layout reorganization with behavioral changes to action priority. The scope of new functionality warrants human review. You can customize Macroscope's approvability policy. Learn more. |
There was a problem hiding this comment.
Reviewed the pull-request chrome rework against the shared primitive/Tailwind ownership rules. The primitive migrations look sound (SegmentedTab* for the tabs, Button behind MenuTrigger render in the filters menu with --control-icon-color carrying the pressed tone, WorkspacePageHeader/WorkspacePageContainer keeping drag-region, WCO inset and the collapsed-sidebar titlebar inset, ps-[8.5px] matching the existing leading-icon button call sites). Two layout regressions introduced by changed lines are noted inline.
Posted via Macroscope — UI Consistency
8c3da41 to
89fac2a
Compare
There was a problem hiding this comment.
One new finding on the conflict primary action. The two findings from the previous run (tab-nav padding vs. scroll compensation, and MetaRow losing its vertical padding) are still open on the current head and are not repeated here.
Posted via Macroscope — UI Consistency
89fac2a to
b45d74e
Compare
b45d74e to
1dd5875
Compare
1dd5875 to
0437edb
Compare
0437edb to
5cc755c
Compare
There was a problem hiding this comment.
One finding on the reworked pull request detail header. Details inline.
Posted via Macroscope — UI Consistency
2dd5525 to
ac24445
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ac24445. Configure here.
There was a problem hiding this comment.
Two consistency findings in the changed UI code: the actions-row Menu restructure now nests the Check out menu inside another Menu root, and the new inline disabledReason in HeaderFilterMenu renders an unbounded host-error sentence where the sibling filter menu keeps it in a capped tooltip. Details inline.
Posted via Macroscope — UI Consistency
| {option.label} | ||
| </span> | ||
| {option.disabledReason !== undefined ? ( | ||
| <span className="ms-auto text-xs text-muted-foreground"> |
There was a problem hiding this comment.
disabledReason is fed the host's full failure sentence (e.g. "GitHub CLI (gh) is required to browse change requests on this host. Install it from https://cli.github.com/ and reload."), and this span has no width cap, so one unreadable host stretches the popup far past its min-w-40. The pill/menu row for the same option data keeps that string inside a max-w-80 tooltip (PullRequestListFilters.tsx:179-184), so the two treatments of one string also diverge. Capping the width lets the reason wrap inside the item instead of widening the menu.
| <span className="ms-auto text-xs text-muted-foreground"> | |
| <span className="ms-auto max-w-56 text-xs text-muted-foreground"> |
Posted via Macroscope — UI Consistency
ac24445 to
986c2d5
Compare
986c2d5 to
46c5c1b
Compare
There was a problem hiding this comment.
One finding: the newly added rightPanelUnavailableLabel can never be shown, because its tooltip trigger is the disabled Toggle itself.
Posted via Macroscope — UI Consistency
46c5c1b to
7d39c80
Compare
121cdaf to
c288ea6
Compare
c288ea6 to
929b283
Compare
There was a problem hiding this comment.
UI consistency review of the pull-request surface refresh. Two small consistency findings on changed lines in PullRequestDetailPanel.tsx; the shared-primitive migrations elsewhere (segmented ToggleGroup for the tabs, Button for the filters trigger and refresh control, WorkspacePageHeader/WorkspacePageContainer, the span-wrapped tooltip trigger in PanelLayoutControls) all line up with the existing contracts.
Posted via Macroscope — UI Consistency
929b283 to
696a2e1
Compare
There was a problem hiding this comment.
One consistency finding: the disabled-toggle tooltip fix landed on the right-panel control only, so the two sibling controls in PanelLayoutControls now compose their tooltips differently and only one of them can actually show its "unavailable" explanation. Everything else in this PR lines up with the shared system as far as I can tell — the filters trigger now inherits Button's icon geometry and routes its active tone through --control-icon-color, the tab strip uses the segmented ToggleGroup (track treatment owned by the primitive), the header migration matches the electron={isElectron} / reserveNativeControls pattern used by Settings, Usage and ChatView, and the detail ghost mirrors the chrome/summary geometry it stands in for (min-h-8 rows matching MetaRow).
Posted via Macroscope — UI Consistency
a758665 to
fb06af7
Compare
There was a problem hiding this comment.
One finding: the chrome fold's grid-row transition was dropped, so re-expanding the metadata snaps the content area down instead of easing. Everything else in this pass looks consistent with the shared primitives — the tooltip triggers now wrap both disabled panel toggles, the filters trigger and refresh controls go through Button, the tab strip uses the segmented ToggleGroup contract (track geometry owned by the primitive), and MetaRow/PullRequestDetailGhost share one row rhythm.
Posted via Macroscope — UI Consistency
fb06af7 to
e942ef8
Compare

What changed
Screenshots
Direct parent on the left; this PR on the right. Same viewport and copied application state.
This is a large visual review on its own. Separating it keeps workspace primitives below and terminal, composer, and tool-call behavior out of the diff.
Validation
Stack order
Built with GPT-5.6-sol in the Codex harness.
Note
Medium Risk
Large UI refactor in
PullRequestDetailPanelaffects merge/conflict/checkout flows and scroll chrome; logic is covered by tests but regression risk is in interaction and layout edge cases.Overview
Pull request detail and list get a layout pass: the detail panel drops
chromeVariantand always scroll-condenses metadata into a shorter top bar; loading uses a full-panel ghost that matches the new chrome. Tabs become a segmented ToggleGroup; Resolve conflicts is promoted to the primary header action (banner and overflow duplicate removed). Stacked PRs show a layers icon when the base branch isn’t the repo default (isStackedPullRequestBase+listRefs). The repository label opens the repo root via newchangeRequestRepositoryUrl(GitHub/GitLab/Bitbucket paths, casing preserved).The Pull Requests page adopts
WorkspacePageHeader/WorkspacePageContainer, a dedicated refresh control, and right-panel toggle only when a PR is selected (“Select a pull request first”). Panel layout tooltips stay usable on disabled toggles (wrapper + test); list filter trigger uses outline Button.Smaller tweaks: summary meta rows use a fixed label column; filter compact menus handle unavailable hosts more safely.
Reviewed by Cursor Bugbot for commit e942ef8. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Refresh pull request detail panel with stacked PR detection, conflict resolution, and repo link
isStackedPullRequestBasein pullRequestDetail.logic.ts to detect stacked PRs by comparing the base branch against the repo's default ref (local or remote); shows aLayersIconin the detail panel when stacked.changeRequestRepositoryUrlhelper in openPullRequestLink.ts.PullRequestDetailPanel; removes the separate merge-conflict banner and surfaces a dedicated "Resolve conflicts" button instead.ToggleGroupcontrol; chrome collapse no longer depends on achromeVariantprop.PanelLayoutControlsnow remain visible; the right panel shows "Select a pull request first" when no PR is selected.PullRequestRefreshControlcomponent to the PR list column with placement varying by condensed/expanded header state.chromeVariant="collapse"prop is removed fromPullRequestDetailPanel; chrome condensing is now always scroll-driven.Macroscope summarized e942ef8.