Skip to content

feat(web): refresh pull request details - #7148

Open
maria-rcks wants to merge 1 commit into
ui-refresh/usagefrom
ui-refresh/pull-requests
Open

feat(web): refresh pull request details#7148
maria-rcks wants to merge 1 commit into
ui-refresh/usagefrom
ui-refresh/pull-requests

Conversation

@maria-rcks

@maria-rcks maria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Refreshes Pull Request list and detail geometry, filters, sticky metadata, branch actions, stacked-base state, and loading skeletons.
  • Keeps expanded detail spacious while using a compact header only after scroll.
  • Makes repository, PR, branch-copy, checkout, conflict, reviewer, label, and timeline controls consistent at narrow and wide widths.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Pull Requests before Pull Requests after
## Why

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

  • Pull Request filter and detail logic tests
  • Pull Request link tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests, this PR
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): group live tool activity #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large UI refactor in PullRequestDetailPanel affects 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 chromeVariant and 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 new changeRequestRepositoryUrl (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

  • Adds isStackedPullRequestBase in pullRequestDetail.logic.ts to detect stacked PRs by comparing the base branch against the repo's default ref (local or remote); shows a LayersIcon in the detail panel when stacked.
  • Makes the repository name in the detail panel clickable, opening the repo URL in the system shell via the new changeRequestRepositoryUrl helper in openPullRequestLink.ts.
  • Prioritizes conflict resolution as the primary action in PullRequestDetailPanel; removes the separate merge-conflict banner and surfaces a dedicated "Resolve conflicts" button instead.
  • Replaces tab navigation buttons with a segmented ToggleGroup control; chrome collapse no longer depends on a chromeVariant prop.
  • Tooltips for disabled terminal and right panel toggles in PanelLayoutControls now remain visible; the right panel shows "Select a pull request first" when no PR is selected.
  • Adds a PullRequestRefreshControl component to the PR list column with placement varying by condensed/expanded header state.
  • Behavioral Change: chromeVariant="collapse" prop is removed from PullRequestDetailPanel; chrome condensing is now always scroll-driven.

Macroscope summarized e942ef8.

@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a6a5b0f2-61c1-4fc5-9469-94df61ae8131

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcks maria-rcks mentioned this pull request Aug 16, 2026
Comment thread apps/web/src/routes/_chat.pull-requests.tsx
Comment thread apps/web/src/components/pullRequest/pullRequestDetail.logic.ts Outdated
@github-actions

github-actions Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 12.6 KiB 15.1 KiB
Codex Thread snapshot wire 6.3 KiB 7.3 KiB
Codex Live turn WebSocket wire 6.3 KiB 7.8 KiB
Codex Live turn WebSocket decoded 51.8 KiB 66.4 KiB
Codex Live turn messages 16 21
Claude Total thread wire 12.6 KiB 15.1 KiB
Claude Thread snapshot wire 6.3 KiB 7.3 KiB
Claude Live turn WebSocket wire 6.3 KiB 7.8 KiB
Claude Live turn WebSocket decoded 52.7 KiB 66.4 KiB
Claude Live turn messages 16 21

Baseline: unavailable · PR result: e942ef8 · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment thread apps/web/src/components/pullRequest/pullRequestDetail.logic.ts
Comment thread apps/web/src/lib/openPullRequestLink.ts
@macroscopeapp

macroscopeapp Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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.

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
Comment thread apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 8c3da41 to 89fac2a Compare August 16, 2026 01:24

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 89fac2a to b45d74e Compare August 16, 2026 01:32
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from b45d74e to 1dd5875 Compare August 16, 2026 01:36
Comment thread apps/web/src/lib/openPullRequestLink.ts
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 1dd5875 to 0437edb Compare August 16, 2026 01:49
Comment thread apps/web/src/components/HeaderFilterMenu.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 0437edb to 5cc755c Compare August 16, 2026 01:51

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the reworked pull request detail header. Details inline.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 2dd5525 to ac24445 Compare August 16, 2026 23:06

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
<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

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from ac24445 to 986c2d5 Compare August 17, 2026 16:14
Comment thread apps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 986c2d5 to 46c5c1b Compare August 17, 2026 19:18

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the newly added rightPanelUnavailableLabel can never be shown, because its tooltip trigger is the disabled Toggle itself.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/chat/PanelLayoutControls.tsx
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 46c5c1b to 7d39c80 Compare August 17, 2026 19:35
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch 2 times, most recently from 121cdaf to c288ea6 Compare August 17, 2026 20:02
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from c288ea6 to 929b283 Compare August 17, 2026 20:14

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from 929b283 to 696a2e1 Compare August 17, 2026 20:30

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread apps/web/src/components/chat/PanelLayoutControls.tsx
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch 3 times, most recently from a758665 to fb06af7 Compare August 17, 2026 20:49

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Outdated
@maria-rcks
maria-rcks force-pushed the ui-refresh/pull-requests branch from fb06af7 to e942ef8 Compare August 17, 2026 21:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant