Skip to content

[design-doctor capture-replay baseline] clone of sourcebot#2: [design-doctor test] sourcebot-1154: Commit diff viewer#24

Open
rohanneilkapoor wants to merge 14 commits into
bench/source-pr-base/design-doctor-feature-parity-expanded-20260610-152904Z/sourcebot-1154from
bench/design-doctor-capture-replay-20260617-140852/baseline/sourcebot-pr2
Open

[design-doctor capture-replay baseline] clone of sourcebot#2: [design-doctor test] sourcebot-1154: Commit diff viewer#24
rohanneilkapoor wants to merge 14 commits into
bench/source-pr-base/design-doctor-feature-parity-expanded-20260610-152904Z/sourcebot-1154from
bench/design-doctor-capture-replay-20260617-140852/baseline/sourcebot-pr2

Conversation

@rohanneilkapoor

@rohanneilkapoor rohanneilkapoor commented Jun 17, 2026

Copy link
Copy Markdown

Design Doctor capture-replay A/B clone for #2.

Variant: baseline (capture-replay disabled (CAPTURE_REPLAY_ENABLED=false)).

Reasoning-effort settings are held at branch defaults for both variants, so the only difference is the capture-replay flag.

This branch is pinned to the original PR head SHA so the code contents are equivalent.

Original PR body:

Softlight Overview

Current PR UI

Design Score: 1/5

Suggested fixes

  • Line up the commit's change-summary bar with the rest of the page so the left edge reads as one clean column.
  • Add a little space between the commit title and its expanded description so it reads clearly.
  • Line up the single-file diff header rows so they share one clean left edge.
  • Align the revision-preview banner with the file header above it so the left edge stays clean.

Redesign

The commit diff screens looked cramped and unfinished with mismatched left edges and a flush description; the pass lined everything up to one clean column and made each special state read as a calm, intentional block.

  • Every commit header, change-summary bar, and file row now shares one clean left edge with steadier spacing.
  • The expanded description and the 'previewing an older revision' banner now read as deliberate, contained blocks.

Fresh clean test PR for hosted Design Doctor rerun testing.

Benchmark note: Commit diff viewer with full and focused views.

Do not merge. This PR exists so Design Doctor can be run against a clean pull request with no prior review artifacts.

brendan-kellam and others added 14 commits April 28, 2026 10:32
Adds a `commit` pathType to the browse routes
(`/browse/<repo>@<branch>/-/commit/<sha>[/<file>]`) that renders a
placeholder CommitDiffPanel. Refactors browse path helpers into a
discriminated `BrowseProps` union so commitSha is required only for
pathType: 'commit'.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wires up @codemirror/merge (via react-codemirror-merge) inside
CommitDiffPanel with a static before/after demo. Adds a CodeDiff
component that owns its language extension + view ref so each pane
can reconfigure its language compartment independently.

Also gates the react-grab dev scripts behind DEBUG_ENABLE_REACT_GRAP
so they don't load on every dev page render.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the CodeMirror MergeView-based commit diff rendering with a DOM
based split-view that renders directly from git's hunks, inspired by
Chrome DevTools' DiffView. Per-file editor instances and the matching
getFileSource fetches are gone — a 50-file commit drops from ~100
network requests to 0, and per-row render cost from a full editor mount
to a synchronous Lezer highlight + grid emit.

- New `LightweightDiffViewer` builds a single 2-column subgrid with
  hunk headers spanning both sides; each cell uses `subgrid` so line
  numbers, markers, and content align across all rows.
- Pure helpers split out: `hunkParser` (body string → DiffLine[]),
  `splitPairing` (DiffLine[] → SplitRow[]).
- `presentableDiff` from @codemirror/merge supplies character-level
  intra-line diff highlighting on paired modifications.
- Lezer highlight code lifted from `lightweightCodeHighlighter` into
  `lib/codeHighlight` so both files share the helper.
- Drop `react-codemirror-merge` and `commitDiffEditor`. Long lines wrap
  via `whitespace-pre-wrap break-words` + `minmax(0, 1fr)` on the grid.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- File path header now sticks to the top of the scroll viewport while
  scrolling through that file's diff, using the negative-yOffset trick
  to compensate for the virtualizer's translateY positioning. Same
  pattern as searchResultsPanel/fileMatchContainer.
- Lightweight diff viewer's grid uses `minmax(<min>, max-content)` for
  line-number and marker columns so they don't collapse to zero width
  when one side of the diff is entirely blank (fully-added or
  fully-deleted files), keeping the right pane aligned across files.
- Drop the column gap between left and right panes and instead draw a
  `border-r` separator on the left cells for a cleaner divider.
- Hunk header gets an optional className so the first hunk renders with
  just `border-b` (the file header above already provides the top
  border), while subsequent hunks render with `border-y` between them.
- Drop the per-row footer padding in the virtualizer; rows now sit
  flush against each other.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- New `DiffStat` component renders GitHub-style additions/deletions
  counts with a 5-square indicator scaled log-ish to total change size.
  Added on the right of each file row header and on the right of the
  "N files changed" subheader for the commit total. Hidden when there
  are no line-level changes (pure renames).
- Each file row gets a `CopyIconButton` next to the path (copies
  newPath, falling back to oldPath) and a `CommitActionLink` that
  opens the file at the commit. Deleted files link to the old path
  at the parent commit so the user lands on the file's last existing
  state rather than a 404.
- `repoName`, `commitSha`, and `parentSha` are plumbed from the panel
  through `FileDiffList` to `FileDiffRow` to support the new link.
- `computeChangeCounts` is memoized per file in the row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nchoring

History panel rows in both the bottom panel and the commits page are now
clickable — they navigate to the matching commit diff via router.push,
with closest('button, a') short-circuit so inner action buttons keep
their own behavior. Bottom-panel history rows also highlight via
bg-accent when their commit is the one currently being viewed.

Commit diff header now uses AuthorsAvatarGroup + getCommitAuthors +
formatAuthorsText, matching latestCommitInfo and historyRow — co-authors
parsed from the commit body show up correctly.

When the URL trailing path matches one of the commit's files, that file
is moved to the top of the FileDiffList rather than scrolled to. Avoids
estimateSize-based scroll inaccuracy and works regardless of which side
of a rename the URL points to.

Lightweight diff viewer short-circuits with "Diff too large to display"
for files containing lines over 1000 chars, matching the cutoff in
lightweightCodeHighlighter.

PathHeader's breadcrumb measurement reserved 175px for "copy button and
padding"; the actual reservation needed is ~40px. Reduced so breadcrumbs
no longer collapse prematurely on wide layouts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Lift `truncateSha` (was a private helper in getDiffToolComponent) to
  `lib/utils` so PathHeader can reuse it. The branch/ref display now
  renders a 40-char SHA as `abc1234`, preserving any `^` / `~N` suffix.
- Hide the `·` separator and the path's CopyIconButton when there's no
  path (repo root). Previously a dangling `·` and copy button rendered
  with nothing between them.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a `path` query/tool parameter to restrict diff output to changes
touching a single file via git's `-- <pathspec>` separator. Refactors
the route handler to use the shared `getDiffRequestSchema`.

Fixes SOU-1154 (sourcebot-dev#1154)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Move single-file commit diffs from `/-/commit/<sha>/<path>` to
  `/-/blob/<path>?ref=<sha>&diff=true`, keeping the user's browsing
  revision in the URL. `/-/commit/<sha>` still renders the full
  multi-file diff.
- New `FocusedCommitDiffPanel` with status row (file status badge +
  authors + relative commit date + "View full commit" + DiffStat +
  exit-X) and path-filtered `getDiff` so only the single file's diff
  is fetched.
- New preview banner in `CodePreviewPanel` when `?ref=` is set, with a
  close button that strips the param.
- Make `PathHeader`'s revision clickable, linking to that ref's full
  commit view.
- New `HoverPrefetchLink` defers Next.js prefetching until hover; used
  in history rows to avoid firing many prefetches on render.
- Hide the bottom panel on `/-/commit/` views.
- Extract `getFileStatus` / `StatusBadge` to a shared `fileStatus.tsx`.
- Workaround Radix Tooltip + RSC re-render bug (drop `asChild` from
  `<TooltipTrigger>`, add `key={commitSha}`) so X / Browse-files
  buttons survive client navigation between commits.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
parents={commitResponse.parents}
/>
</div>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

This comment was marked as outdated.

{file ? (
<>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">
<div className="flex flex-row items-center gap-2">

This comment was marked as outdated.

</div>
{file ? (
<>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

This comment was marked as outdated.

)}
</div>
{hasBody && isBodyExpanded && (
<CommitBody body={body} className="rounded max-h-[40vh] overflow-y-auto" />

This comment was marked as outdated.

@softlight

softlight Bot commented Jun 18, 2026

Copy link
Copy Markdown

Redesign

Full commit diff: one clean left edge makes the panel easy to scan

Full commit diff

Before · After

  • The commit details, 'N files changed' bar, and file rows used to start on three different left edges; they now share one edge so the panel reads as a single column.
  • The commit header gets steadier spacing, so the title, author, and commit hash form a clear top-to-bottom hierarchy.

Expanded description: clear space and a calm block make it readable

Expanded description

Before · After

  • The description used to butt right up against the commit title; it now has clear breathing room below it.
  • The body sits in a calm, bordered block instead of faint floating text, so it reads as an intentional section.

Single-file diff: aligned header rows that never crowd the controls

Single-file diff

Before · After

  • The file path row and the 'Modified by…' row used to start on different left edges; they now share one clean edge.
  • Long author or date text now gives way gracefully, so the change count and close button are never crowded.

Preview banner: a calm, aligned strip that clearly signals an older revision

Preview banner

Before · After

  • The banner now lines up with the file path and code below it instead of sitting on its own indent.
  • It reads as a deliberate state: a soft strip with a small history icon, muted text, and the revision SHA as the one accent link.
Prompt to build with AI
This is a comment left during a design review.

Goal:
Apply the Designer's pass shown in the before/after references below. Preserve product behavior, routes, data meaning, and the local design system while matching the stronger composition, hierarchy, spacing, alignment, and visual balance.

Before/current PR screenshots:
- Full commit diff viewer current PR: https://drive.orianna.ai/11c202e60c81b76f3393ddc60e069b2d.png
- Full commit diff viewer base reference: https://drive.orianna.ai/29687d27850fc41138a9735bf446f6a7.png
- Full commit diff — expanded commit description current PR: https://drive.orianna.ai/9954b5f755239e1a9cdc748e6eeae9ee.png
- Full commit diff — expanded commit description base reference: https://drive.orianna.ai/022550d6447b172cd174e4525afae685.png
- Focused single-file commit diff current PR: https://drive.orianna.ai/b6b0d067a0e7244576b3919b8b4fec94.png
- Focused single-file commit diff base reference: https://drive.orianna.ai/2012f259b675f968e1fc054454ed6ba5.png
- Blob preview-at-revision banner current PR: https://drive.orianna.ai/835b83b4ed655943f35589300af5e5e9.png
- Blob preview-at-revision banner base reference: https://drive.orianna.ai/2012f259b675f968e1fc054454ed6ba5.png
- Commit history list with clickable rows current PR: https://drive.orianna.ai/30d622b896db360c6d0f670b3fafea09.png
- Commit history list with clickable rows base reference: https://drive.orianna.ai/ec184379a7acb9e6430781e53f9afb0a.png

After/Designer's pass screenshots:
- Full commit diff viewer prototype: https://drive.orianna.ai/b665cf39f2e9ece8b50442c44646c753.png
- Full commit diff — expanded commit description prototype: https://drive.orianna.ai/32393f7be4445b32d5e4d361cc30a0e5.png
- Focused single-file commit diff prototype: https://drive.orianna.ai/e5b22940fa4e5be55b02ae5eb97758b5.png
- Blob preview-at-revision banner prototype: https://drive.orianna.ai/3a6024448fda6dc7d6b8a8df393204dc.png

Context:
Across the new commit diff viewer, headers, summary bars, and file rows sat on slightly different left edges, the expanded commit description was crammed flush under the title, and the 'previewing an older revision' banner was raw text that didn't line up with the file. The pass pulls every band onto one shared left edge, gives the description room to breathe inside a contained block, protects the single-file header so long author/date text never crowds the change count or close button, and turns the preview banner into a calm, labeled strip. The result reads like one carefully aligned column instead of stacked, mismatched pieces.

What the Designer's pass changed:
- Full commit diff: the commit details, the 'N files changed' bar, and each file row used to start on three slightly different left edges, which made the whole panel feel jittery. They now share one clean left edge with a calmer header rhythm, so the eye tracks straight down the page.
- Expanded commit description: the description used to sit flush against the title and blend into the page. It now has clear space below the title and sits in a calm, bordered block, so it's easy to tell where the message ends and the description begins.
- Focused single-file diff: the file path row and the 'Modified by…' row didn't line up, and a long author or date could push against the change count and close button. The two rows now share one edge, and the metadata gives way gracefully so the change count and close control always stay put.
- Preview-at-revision banner: 'Previewing file at revision…' used to be plain text that didn't line up with the file below it. It now lines up with the file path, sits on a soft strip with a small history icon, and keeps the revision link as the one clear accent, so it clearly reads as 'you're viewing an older revision'.

Use the before screenshots to understand the current surface and the after screenshots as the target direction. Make the smallest coherent set of source changes that gets the existing app to that visual result, then render and inspect the UI before stopping.
Developer output

Real app context

Target Base before PR PR before polish
Full commit diff viewer Base before PR PR before polish
Full commit diff — expanded commit description Base before PR PR before polish
Focused single-file commit diff Base before PR PR before polish
Blob preview-at-revision banner Base before PR PR before polish
Commit history list with clickable rows Base before PR PR before polish

Prototype details

One clean column for the commit diff viewer

Matched before/after

Full commit diff viewer

One clean column for the commit diff viewer - Full commit diff viewer

Full commit diff — expanded commit description

One clean column for the commit diff viewer - Full commit diff — expanded commit description

Focused single-file commit diff

One clean column for the commit diff viewer - Focused single-file commit diff

Blob preview-at-revision banner

One clean column for the commit diff viewer - Blob preview-at-revision banner

Before/after match gaps

  • PR-before surfaces with no matching Redesign after screenshot: browse.commits.history_list

PR-before surfaces with no matching Redesign after:

Surface PR/head screenshot
Commit history list with clickable rows
Each commit row is now a clickable link surface (hover background, pointer cursor) and the st...
PR before Redesign
Prototype screenshot
Full commit diff viewer
Full commit diff viewer
Full commit diff — expanded commit description
Full commit diff — expanded commit description
Focused single-file commit diff
Focused single-file commit diff
Blob preview-at-revision banner
Blob preview-at-revision banner

Changed files

  • packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fullCommitDiffPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fileDiffRow.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/commitMessage.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/focusedCommitDiffPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/codePreviewPanel.tsx
Prototype diff excerpt
diff --git a/packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/codePreviewPanel.tsx b/packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/codePreviewPanel.tsx
index bad7e67c..853ebe1c 100644
--- a/packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/codePreviewPanel.tsx
+++ b/packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/codePreviewPanel.tsx
@@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button";
 import { Separator } from "@/components/ui/separator";
 import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
 import { cn, getCodeHostInfoForRepo, isServiceError, truncateSha } from "@/lib/utils";
-import { X } from "lucide-react";
+import { History, X } from "lucide-react";
 import Image from "next/image";
 import Link from "next/link";
 import { getBrowsePath } from "../../../hooks/utils";
@@ -85,22 +85,25 @@ export const CodePreviewPanel = async ({ path, repoName, revisionName, previewRe
             </div>
             <Separator />
             {previewRef && (
-                <div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">
-                    <span className="text-sm">
-                        Previewing file at revision{" "}
-                        <Link
-                            href={getBrowsePath({
-                                repoName,
-                                revisionName,
-                                path: '',
-                                pathType: 'commit',
-                                commitSha: previewRef,
-                            })}
-                            className="font-mono text-link hover:underline"
-                        >
-                            {truncateSha(previewRef)}
-                        </Link>
-                    </span>
+                <div className="flex flex-row items-center justify-between gap-2 px-2 py-2 border-b shrink-0 bg-muted/40">
+                    <div className="flex flex-row items-center gap-1.5 min-w-0 text-sm text-muted-foreground">
+                        <History className="h-3.5 w-3.5 flex-shrink-0" />
+                        <span className="truncate">
+                            Previewing file at revision{" "}
+                            <Link
+                                href={getBrowsePath({
+                                    repoName,
+                                    revisionName,
+                                    path: '',
+                                    pathType: 'commit',
+                                    commitSha: previewRef,
+                                })}
+                                className="font-mono text-link hover:underline"
+                            >
+                                {truncateSha(previewRef)}
+                            </Link>
+                        </span>
+                    </div>
                     <Tooltip key={previewRef}>
                         <TooltipTrigger>
                             <Button
diff --git a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/commitMessage.tsx b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/commitMessage.tsx
index 7d9a27d4..9473f4e3 100644
--- a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/commitMessage.tsx
+++ b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/commitMessage.tsx
@@ -13,7 +13,7 @@ export const CommitMessage = ({ subject, body }: CommitMessageProps) => {
     const hasBody = body.trim().length > 0;
 
     return (
-        <>
+        <div className="flex flex-col gap-3">
             <div className="flex flex-row items-center gap-2">
                 <h1 className="text-lg font-semibold">{subject}</h1>
                 {hasBody && (
@@ -24,8 +24,8 @@ export const CommitMessage = ({ subject, body }: CommitMessageProps) => {
                 )}
             </div>
             {hasBody && isBodyExpanded && (
-                <CommitBody body={body} className="rounded max-h-[40vh] overflow-y-auto" />
+                <CommitBody body={body} className="rounded-md border bg-muted/50 max-h-[40vh] overflow-y-auto" />
             )}
-        </>
+        </div>
     );
 };
diff --git a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fileDiffRow.tsx b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fileDiffRow.tsx
index d7c5c50e..5e84797a 100644
--- a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fileDiffRow.tsx
+++ b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fileDiffRow.tsx
@@ -58,7 +58,7 @@ export const FileDiffRow = ({ file, yOffset, repoName, commitSha, parentSha }: F
     return (
         <div className="flex flex-col">
             <div
-                className="flex flex-row items-center gap-2 py-2 px-3 border-b bg-muted sticky z-10"
+                className="flex flex-row items-center gap-2 py-2 px-4 border-b bg-muted sticky z-10"
                 style={{ top: `-${yOffset}px` }}
             >
                 <StatusBadge status={status} />
diff --git a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/focusedCommitDiffPanel.tsx b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/focusedCommitDiffPanel.tsx
index 308ab9f6..fb544364 100644
--- a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/focusedCommitDiffPanel.tsx
+++ b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/focusedCommitDiffPanel.tsx
@@ -101,7 +101,7 @@ export const FocusedCommitDiffPanel = async ({
 
     return (
         <div className="flex flex-col h-full">
-            <div className="flex flex-row py-1 px-2 items-center border-b shrink-0">
+            <div className="flex flex-row py-1 px-4 items-center border-b shrink-0">
                 <PathHeader
                     path={path}
                     pathType="blob"
@@ -116,27 +116,27 @@ export const FocusedCommitDiffPanel = async ({
             </div>
             {file ? (
                 <>
-                    <div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">
-                        <div className="flex flex-row items-center gap-2">
+                    <div className="flex flex-row items-center justify-between gap-3 px-4 py-2 border-b shrink-0">
+                        <div className="flex flex-row items-center gap-2 min-w-0 overflow-hidden">
                             <StatusBadge status={getFileStatus(file)} />
-                            <h2 className="text-sm font-medium">
+                            <h2 className="text-sm font-medium flex-shrink-0">
                                 {FILE_STATUS_LABELS[getFileStatus(file)]}
                             </h2>
-                            <span className="text-sm text-muted-foreground">by</span>
+                            <span className="text-sm text-muted-foreground flex-shrink-0">by</span>
                             <AuthorsAvatarGroup authors={authors} />
                             <span
-                                className="text-sm font-medium"
+                                className="text-sm font-medium truncate min-w-0"
                                 title={authors.map((a) => a.name).join(", ")}
                             >
                                 {formatAuthorsText(authors)}
                             </span>
                             <span
-                                className="text-sm text-muted-foreground"
+                                className="text-sm text-muted-foreground flex-shrink-0"
                                 title={absoluteDate}
                             >
                                 {relativeDate}
                             </span>
-                            <span className="text-muted-foreground">·</span>
+                            <span className="text-muted-foreground flex-shrink-0">·</span>
                             <Link
                                 href={getBrowsePath({
                                     repoName,
@@ -145,12 +145,12 @@ export const FocusedCommitDiffPanel = async ({
                                     pathType: 'commit',
                                     commitSha,
                                 })}
-                                className="text-sm text-link hover:underline"
+                                className="text-sm text-link hover:underline flex-shrink-0"
                             >
                                 View full commit
                             </Link>
                         </div>
-                        <div className="flex flex-row items-center gap-2">
+                        <div className="flex flex-row items-center gap-2 flex-shrink-0">
                             <DiffStat {...computeChangeCounts(file)} />
                             <Tooltip key={commitSha}>
                                 <TooltipTrigger>
diff --git a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fullCommitDiffPanel.tsx b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fullCommitDiffPanel.tsx
index 1379f69d..56fbfaad 100644
--- a/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fullCommitDiffPanel.tsx
+++ b/packages/web/src/app/(app)/browse/[...path]/components/commitDiffPanel/fullCommitDiffPanel.tsx
@@ -70,8 +70,8 @@ export const FullCommitDiffPanel = async ({ repoName, commitSha }: FullCommitDif
 
     return (
         <div className="flex flex-col h-full">
-            <div className="flex flex-col gap-2 p-3 border-b shrink-0">
-                <div className="flex flex-row items-start gap-2">
+            <div className="flex flex-col gap-2.5 px-4 py-3 border-b shrink-0">
+                <div className="flex flex-row items-start gap-3">
                     <div className="flex-1 min-w-0">
                         <CommitMessage subject={subject} body={commitResponse.body} />
                     </div>

Remaining issues

  • Commit history list was already clean and is intentionally preserved (not in the redesigned set).
  • Cross-panel horizontal padding differs slightly (banner px-2 to match its shared path header vs px-4 elsewhere); never visible within a single surface.
  • Focused diff shows whitespace below short diffs, inherent to the fixed-height panel and unchanged from the base/PR behavior.

Cost

Claude Code reported cost: $61.8944

Claude Code session costs and timings
Session Cost Duration API time API turns Tool calls
classifier
2708571c-d5ba-49a4-8be6-ccbd60c05052
$0.4328 5.7s 5.7s 0 1
StructuredOutput
plan
5ff39a22-19f7-436a-ae49-41928c5853dc
$0.7137 1m 30s 1m 30s 0 5
Bash, StructuredOutput
capture: all before screenshots (3 targets)
e4e6865d-8b60-4467-9ac9-f1eecbd02b08
$3.6015 10m 48s 7m 11s 0 65
Bash, Edit, Grep, Read, ToolSearch, ...
capture: all before screenshots (2 targets)
5bdaf59a-b290-41e7-8a15-50af99e8d41a
$2.0792 4m 25s 4m 05s 0 42
Bash, Edit, Read, ToolSearch, Write, ...
capture: all base screenshots (5 targets)
e9dc49d3-de25-4e91-9788-29e7eccc505f
$5.8701 16m 04s 11m 45s 0 81
Bash, Grep, Read, ToolSearch, Write, ...
capture: all base screenshots (5 targets)
eba906a5-c1db-4d3d-8282-c1c977b295a3
$4.6572 5m 48s 5m 40s 0 29
Bash, Edit, Read, ToolSearch, mcp__playwright__browser_click, ...
coverage
2fabf59b-2823-4e21-adbb-e4cc5c3b0e23
$0.9102 1m 29s 1m 29s 0 3
Bash, StructuredOutput
validate
048c558a-5e2c-4065-9e76-191e3757bd99
$0.9032 42.4s 42.4s 0 1
StructuredOutput
visual QA audit
a73ded3e-67ba-44f7-946f-fbfb11e06012
$1.3021 3m 12s 3m 12s 0 4
Read, StructuredOutput
spacing audit
f4395084-03c7-4a99-b184-c2a78bd17b05
$1.8380 4m 34s 4m 33s 0 8
Grep, Read, StructuredOutput
design system audit
745a8321-fd1a-453e-ac5e-f684fcce11d0
$3.0309 7m 50s 7m 50s 0 21
Bash, Grep, Read, StructuredOutput
polish change grouping
53883710-7b7b-464e-be66-ed478d9d274f
$0.3087 26.6s 26.5s 0 2
StructuredOutput
apply polish
0c1f971c-211c-46f5-bd14-8db1c49a1c13
$1.3233 2m 07s 1m 58s 0 28
Bash, Edit, Read, Skill, ToolSearch, ...
capture: Focused single-file commit diff (after)
2cf845c8-973e-4087-b95b-439c0483e632
$1.0936 1m 48s 1m 45s 0 16
Bash, Read, ToolSearch, Write, mcp__playwright__browser_evaluate, ...
evidence cropper
d3e5f8b1-f085-4bfe-9233-4f6c378a79eb
$0.4689 42.7s 40.8s 0 10
Bash, Read, StructuredOutput
apply polish
1ed74676-8196-402d-bf22-d02be6dd6704
$1.2274 2m 21s 2m 07s 0 30
Bash, Edit, Read, Skill, ToolSearch, ...
capture: Blob preview-at-revision banner (after)
ccb4b2be-4956-4016-bae4-ad0abc6187b1
$1.2019 2m 03s 1m 60s 0 19
Bash, Read, ToolSearch, Write, mcp__playwright__browser_evaluate, ...
evidence cropper
6a0f135d-a128-4bc3-bb24-507e56d8cce4
$0.4922 47.2s 45.6s 0 11
Bash, Read, StructuredOutput
apply polish
a78d9cb1-6cbf-4974-a03a-200f22aedf31
$1.2831 2m 24s 1m 49s 0 30
Bash, Edit, Grep, Read, Skill, ...
capture: Full commit diff viewer (after)
661b4925-bb5e-4624-a130-61bf55d2ade0
$1.4924 3m 11s 2m 37s 0 22
Bash, Read, ToolSearch, Write, mcp__playwright__browser_evaluate, ...
evidence cropper
79e62e1b-47e3-4dfd-8133-9617a0fc252f
$0.6091 1m 21s 1m 18s 0 15
Bash, Read, StructuredOutput
capture: Full commit diff — expanded commit description (before)
dd7e31e4-6c4c-4da7-beeb-cff693221a4a
$1.6032 3m 06s 2m 49s 0 32
Bash, Edit, Read, ToolSearch, Write, ...
apply polish
96a03eaf-30f8-4912-9954-c09d2c92916c
$1.3329 2m 07s 1m 48s 0 30
Bash, Edit, Read, Skill, ToolSearch, ...
capture: Full commit diff — expanded commit description (after)
35867e4e-cf79-4c6b-9997-69ee617f90f0
$1.2704 2m 15s 2m 11s 0 18
Bash, Read, ToolSearch, Write, mcp__playwright__browser_click, ...
evidence cropper
31e0a91f-2191-4328-8e9a-67f1c7da20d9
$0.4398 57.9s 56.5s 0 12
Bash, Read, StructuredOutput
designer explore
b174c8c8-d6d3-48e0-80b8-87c32eb63716
$22.4084 32m 52s 32m 01s 0 175
Bash, Edit, Read, Skill, TaskCreate, ...

<CommitMessage subject={subject} body={commitResponse.body} />
</div>
<Tooltip key={commitSha}>
<TooltipTrigger>

This comment was marked as outdated.

parents={commitResponse.parents}
/>
</div>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

This comment was marked as outdated.

</div>
{file ? (
<>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

This comment was marked as outdated.

className="text-sm font-medium"
title={authors.map((a) => a.name).join(", ")}
>
{formatAuthorsText(authors)}

This comment was marked as outdated.

)}
</div>
{hasBody && isBodyExpanded && (
<CommitBody body={body} className="rounded max-h-[40vh] overflow-y-auto" />

This comment was marked as outdated.

parents={commitResponse.parents}
/>
</div>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

@softlight softlight Bot Jun 18, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Before/after suggested changes

Change summary doesn't line up with the rest of the commit page

On the commit diff, the 'N files changed' bar sits slightly further in than the commit details above it and the file rows below it, so the page's left edge looks ragged. Aligning it to the same column makes everything read as one clean, scannable line of sight.

Prompt to fix with AI
This is a comment left during a design review.

Comment:
**Change summary doesn't line up with the rest of the commit page**
On the commit diff, the 'N files changed' bar sits slightly further in than the commit details above it and the file rows below it, so the page's left edge looks ragged. Aligning it to the same column makes everything read as one clean, scannable line of sight.

Issue:
The '<n> files changed' summary bar uses px-4 (16px) horizontal padding, while the commit header above it uses p-3 (12px) and every file diff row below it uses px-3 (12px). The bar's content starts 4px to the right of everything else on the page, so the left edge steps in and out instead of forming one clean column.

Suggested fix:
Change the summary bar's horizontal padding from px-4 to px-3 so it shares the 12px left edge used by the commit header (p-3) and the file rows (px-3). Keep py-2.

Screenshots:
- Before: https://drive.orianna.ai/a4525a54f41b31584a8bcdbf094c720f.png
- After: https://drive.orianna.ai/aa3924d6bec0dc33fa9a506bb2d997eb.png
Use these screenshot URLs as visual evidence if your environment can open remote images.

How can I resolve this? Keep the fix scoped to the PR-touched UI and preserve existing design-system patterns.
Developer output
  • Crop source: goal crop locator
  • Before crop: x1=280, y1=45, x2=640, y2=245
  • After crop: x1=280, y1=45, x2=640, y2=245

Gridded crops

Before

Before gridded detail

After

After gridded detail

Full gridded screenshots

Before

Before full gridded screenshot

After

After full gridded screenshot

)}
</div>
{hasBody && isBodyExpanded && (
<CommitBody body={body} className="rounded max-h-[40vh] overflow-y-auto" />

@softlight softlight Bot Jun 18, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Before/after suggested changes

Commit description sits too tight under its title

When you expand a commit's description, it butts right up against the title with no space between them, so the two run together as one dense block. A little breathing room lets the description read clearly as its own section.

Prompt to fix with AI
This is a comment left during a design review.

Comment:
**Commit description sits too tight under its title**
When you expand a commit's description, it butts right up against the title with no space between them, so the two run together as one dense block. A little breathing room lets the description read clearly as its own section.

Issue:
When the body is expanded, the CommitBody block renders as a direct sibling of the title row inside a plain (non-gap) container, so there is no vertical space between the commit subject and the description. The two sit flush, making the description feel crammed against the title rather than reading as its own block.

Suggested fix:
Add mt-2 to the expanded CommitBody in commitMessage.tsx so the description is separated from the title by the same 8px step used elsewhere in the header (gap-2).

Screenshots:
- Before: https://drive.orianna.ai/6207815f09ae80ad66b95a64a3246205.png
- After: https://drive.orianna.ai/58c757a3f9b3ed14ff012ac98fa7c104.png
Use these screenshot URLs as visual evidence if your environment can open remote images.

How can I resolve this? Keep the fix scoped to the PR-touched UI and preserve existing design-system patterns.
Developer output
  • Crop source: goal crop locator
  • Before crop: x1=300, y1=55, x2=880, y2=145
  • After crop: x1=300, y1=55, x2=880, y2=145

Gridded crops

Before

Before gridded detail

After

After gridded detail

Full gridded screenshots

Before

Before full gridded screenshot

After

After full gridded screenshot

</div>
{file ? (
<>
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

@softlight softlight Bot Jun 18, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Before/after suggested changes

Single-file diff header rows don't share a left edge

In the focused single-file diff, the file path row and the file-details row beneath it start at slightly different left positions, giving the header a stepped, unfinished look. Aligning them to one edge makes the header feel tidy and intentional.

Prompt to fix with AI
This is a comment left during a design review.

Comment:
**Single-file diff header rows don't share a left edge**
In the focused single-file diff, the file path row and the file-details row beneath it start at slightly different left positions, giving the header a stepped, unfinished look. Aligning them to one edge makes the header feel tidy and intentional.

Issue:
The focused diff has two stacked header rows: the PathHeader row uses py-1 px-2 (8px), while the file-details row below it (status badge, author, date, View full commit) uses px-4 (16px). The details row's content starts 8px to the right of the path row above it, so the two header rows do not share a left edge and the header looks stepped.

Suggested fix:
Change the file-details header row's horizontal padding from px-4 to px-2 so it aligns with the PathHeader row directly above it (py-1 px-2). Keep py-2 for its vertical breathing room.

Screenshots:
- Before: https://drive.orianna.ai/1a74c3eef6a6b109b36943be5f852540.png
- After: https://drive.orianna.ai/1cd9d8b1066e941bdd3332d79bc56929.png
Use these screenshot URLs as visual evidence if your environment can open remote images.

How can I resolve this? Keep the fix scoped to the PR-touched UI and preserve existing design-system patterns.
Developer output
  • Crop source: goal crop locator
  • Before crop: x1=290, y1=44, x2=900, y2=132
  • After crop: x1=290, y1=44, x2=900, y2=132

Gridded crops

Before

Before gridded detail

After

After gridded detail

Full gridded screenshots

Before

Before full gridded screenshot

After

After full gridded screenshot

</div>
<Separator />
{previewRef && (
<div className="flex flex-row items-center justify-between gap-2 px-4 py-2 border-b shrink-0">

@softlight softlight Bot Jun 18, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Before/after suggested changes

'Previewing an older version' banner is indented from the file header

The banner shown when you preview a file at an older revision starts further in than the file path header directly above it, so its left edge looks misaligned with the rest of the view. Matching the edge lets the banner read as a calm, deliberate part of the page.

Prompt to fix with AI
This is a comment left during a design review.

Comment:
**'Previewing an older version' banner is indented from the file header**
The banner shown when you preview a file at an older revision starts further in than the file path header directly above it, so its left edge looks misaligned with the rest of the view. Matching the edge lets the banner read as a calm, deliberate part of the page.

Issue:
The 'Previewing file at revision' banner uses px-4 (16px) horizontal padding, while the PathHeader row directly above it uses py-1 px-2 (8px). The banner text starts 8px to the right of the file path header, so the banner's left edge is misaligned with the header it belongs under.

Suggested fix:
Change the preview banner's horizontal padding from px-4 to px-2 so its left edge matches the PathHeader row above it (py-1 px-2). Keep py-2.

Screenshots:
- Before: https://drive.orianna.ai/d7127273a17983df230b78c1b1dc18fa.png
- After: https://drive.orianna.ai/2c757e11f9176f52289e991cb15ac7dc.png
Use these screenshot URLs as visual evidence if your environment can open remote images.

How can I resolve this? Keep the fix scoped to the PR-touched UI and preserve existing design-system patterns.
Developer output
  • Crop source: goal crop locator
  • Before crop: x1=285, y1=44, x2=815, y2=150
  • After crop: x1=285, y1=44, x2=815, y2=150

Gridded crops

Before

Before gridded detail

After

After gridded detail

Full gridded screenshots

Before

Before full gridded screenshot

After

After full gridded screenshot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants