Replaces the all-files renderer with Pierre's virtualized CodeView (one scroller, identical look, scales to huge diffs); deletes the legacy AllFilesDiffView/LazyFileDiff and their flag; single-file panels stay on FileDiff. @pierre/diffs pinned exact 1.2.8 (1.2.9's tree is broken on npm — see #880).
Also ships: diff staleness detection ('Diff out of date · Refresh' toolbar notice backed by shared per-VCS fingerprints + GET /api/diff/fresh on both Bun and Pi servers), a stale-content guard so files edited mid-review degrade to raw-patch view instead of breaking virtualization, the Ask AI wrong-file fix (pre-existing), and toolbar/header UI polish (global settings cog, aligned sem badges, no all-files split dragger).
Hardened through five review waves; tested with 1384 passing tests incl. real-git fingerprint and patch-consistency suites. Known minor gaps documented in the PR.
* feat(review): all-files diff view with lazy mounting
Renders all diffs in a single scrollable pane using individual FileDiff
components with sticky file headers, collapse toggles, and viewport-based
lazy mounting via IntersectionObserver.
For provenance purposes, this commit was AI assisted.
* feat(review): convert all-files view to dock panel + fixes
- Register AllFilesDiffView as a proper dock panel so it coexists
with single-file tabs, AI chat, PR panels
- Remove viewMode toggle in favor of dock panel lifecycle
- Fix annotation toolbar positioning (mouse tracking)
- Fix annotation PR/scope filtering for stacked PRs
- Fix stale patch on file switch (deferred toolbar open)
- Fix conventional comments boolean comparison
- Fix SuggestionModal props to match DiffViewer pattern
- Wire reviewBase for correct hunk expansion context
- Fix pre-existing CSS bug on .has-annotations background
- Add Shift+V/A keyboard shortcuts for viewed/stage toggle
- Add [/] keyboard shortcuts for file-to-file scrolling
- Add keyboard shortcuts to settings panel
- Restore scroll-based file tree highlight via dock panel state
For provenance purposes, this commit was AI assisted.
* feat(review): sidebar toggles, keyboard shortcuts, click-drag selection
- Move sidebar tab buttons (annotations/AI/agents) to header bar
- Generalize useSidebar hook for both plan and review editors
- Remove internal tab state from ReviewSidebar, receive from parent
- Add file tree toggle button at far-left of header
- Add click-and-drag line selection in diff content area
- Change keyboard shortcuts from Shift+V/A to bare v/a/c
v = toggle viewed (+ collapse in all-files mode)
a = toggle git add/stage
c = collapse/expand file (all-files mode)
- Widen DiffOptionsPopover to prevent word-alt line break
- Fix Shift+V/A targeting wrong file in all-files mode
- Default to all-files panel on initial load
- Hide dock headers when all-files panel is the only panel
For provenance purposes, this commit was AI assisted.
* feat(review): click-and-drag line selection in diff content area
Extract shared selection helpers to utils/diffSelection.ts and add
mouseup handlers to both DiffViewer and AllFilesDiffView so users can
click and drag across code lines to open the annotation toolbar —
not just the gutter.
For provenance purposes, this commit was AI assisted.
* fix(review): address AI review findings
- Gate all-files keyboard shortcuts on isActive to prevent double-toggle
when a single-file tab is focused
- Fix getDiffSelection to iterate all diffs-container elements so
click-drag selection works on files beyond the first
- Clear needsInitialDiffPanel after opening all-files panel to prevent
forced reactivation on diff switches
- Clear activeFilePath and collapsedFiles when files change to prevent
stale state across PR/diff switches
- Add file.patch to LazyFileDiff fetch deps so file contents refetch
when the diff context changes
- Add toggleCollapse to keyboard effect dependency array
For provenance purposes, this commit was AI assisted.
* feat(review): add z to undo collapse with scroll-back
Press z to reopen the last collapsed file and scroll back to it.
Maintains a history stack so repeated z walks back through collapses.
Skips already-expanded entries. History clears on diff/PR switch.
For provenance purposes, this commit was AI assisted.
* fix(review): review findings + sidebar toggles + folder icon
- Fix stale context memo: add isAllFilesActive + handleAddAnnotationForFile
to useMemo deps
- Fix v handler: clear activeFilePath after collapse, only collapse when
marking viewed ON (not when toggling OFF)
- Fix click-drag copy regression: only trigger annotation toolbar for
multi-line selections, preserve single-line/word selection for Cmd+C
- Fix LazyFileDiff: clear stale file contents before refetch
- Clean up App.tsx v/a handler: early return when isAllFilesActive
- Add Cmd+B (file tree) and Cmd+. (sidebar) keyboard shortcuts
- Add toggle menu items with kbd badges to Options dropdown
- Replace file tree icon with simple folder
- Add z (undo collapse) to keyboard shortcuts panel
For provenance purposes, this commit was AI assisted.
* chore: remove dead code from iterations
- Remove unused FileTreeIcon import and component file
- Remove unused AnnotationsIcon component from ReviewHeaderMenu
- Remove unused onClose prop and close button from FileTree
For provenance purposes, this commit was AI assisted.
* fix(review): gate v/a on diff panel, keep annotation selection in all-files
- Track isDiffPanelActive so v/a shortcuts only fire when viewing a
single-file diff, not PR Comments/Summary/Agent panels
- Annotation selection stays in all-files mode instead of switching to
a single-file tab — lets the scroll-to-annotation effect handle it
For provenance purposes, this commit was AI assisted.
* feat(review): add hide whitespace setting for diffs
Adds a "Hide Whitespace" toggle that suppresses whitespace-only changes
in diffs, matching GitHub's ?w=1 behavior. Uses parseDiffFromFile with
ignoreWhitespace when full file contents are available. Includes demo
data with a whitespace-heavy file (settings.ts) and a vite dev server
plugin to serve file contents in demo mode.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(review): add quick-settings popover on file header
Adds a gear icon to the file header that opens a compact Radix popover
with all diff display options (style, overflow, indicators, inline diff,
line numbers, background, hide whitespace). Provides quick access to
settings without opening the full settings dialog. Exports option
constants from Settings.tsx for reuse.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>