Skip to content

fix(web): persist diff view mode - #5731

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
leorivastech:fix/persist-diff-view-mode
Aug 8, 2026
Merged

fix(web): persist diff view mode#5731
maria-rcks merged 1 commit into
pingdotgg:mainfrom
leorivastech:fix/persist-diff-view-mode

Conversation

@leorivastech

@leorivastech leorivastech commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Move the Diff panel's stacked / split render mode from component-local state into the persisted useDiffPanelStore.
  • Include the render mode in the store's existing persisted-state projection.
  • Add a regression test covering storage and rehydration.

Why

Closing the right panel unmounts DiffPanel, so its local state always returned to stacked when the panel was opened again. Keeping the preference in the already-persisted Diff panel store preserves it across panel close/reopen and app reloads.

Closes #5497.

UI Changes

Before: selecting the side-by-side view and closing the right panel reset the Diff to unified view.

After: the selected side-by-side view remains active after closing and reopening the right panel and Diff surface.

Split diff view remains selected after reopening

Testing

  • vp test apps/web/src/diffPanelStore.test.ts --run
  • tsgo --noEmit -p apps/web/tsconfig.json
  • vp lint apps/web/src/components/DiffPanel.tsx apps/web/src/diffPanelStore.ts apps/web/src/diffPanelStore.test.ts
  • vp fmt --check apps/web/src/components/DiffPanel.tsx apps/web/src/diffPanelStore.ts apps/web/src/diffPanelStore.test.ts
  • Integrated browser verification using an isolated T3 state directory and the real branch diff

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after evidence for the UI behavior change
  • I included a video for the interaction change

Note

Low Risk
UI-only preference wiring with existing persisted store; no auth, data, or diff-fetch behavior changes.

Overview
Fixes the Diff panel resetting to stacked (unified) view whenever the right panel closes, by moving the stacked / split preference out of DiffPanel local state and into the existing persisted useDiffPanelStore.

diffRenderMode is stored with the same localStorage persistence as other diff-panel state (partialize), so the choice survives panel unmount/remount and reloads. A store test covers partialization, storage, and rehydration.

Reviewed by Cursor Bugbot for commit 4baa37f. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Persist diff view mode across sessions in DiffPanel

Moves diffRenderMode from component-local state in DiffPanel.tsx into the Zustand store diffPanelStore.ts, where it is included in the persisted partition. The selected mode ("stacked" or "split") now survives page reloads.

Macroscope summarized 4baa37f.

@coderabbitai

coderabbitai Bot commented Aug 8, 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: fecbf50c-3b02-4fc6-b108-3aebb3031a43

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:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 8, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved 4baa37f

This is a simple UI preference persistence change that adds the diff render mode (stacked/split) to the existing zustand store's persistence. The change follows established patterns, includes test coverage, and has no runtime behavior impact beyond remembering user preference.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcks merged commit 89ee692 into pingdotgg:main Aug 8, 2026
17 checks passed
ada-bee pushed a commit to ada-bee/cocoa that referenced this pull request Aug 8, 2026
incognitojam added a commit to yngatech/t3code that referenced this pull request Aug 9, 2026
The desktop update tooltip flattens the release body into plain bullet
lines, so the structured nightly highlights (`## Nightly highlights`,
`### Added`, …) rendered their headings as list items and wasted 3 of
the tooltip's 8 item slots. This PR makes the generated changelog and
the tooltip work together, and leans harder into the LLM pipeline while
keeping attribution.

## Changes

- **Nightly highlights are a flat list** of plain items with compact PR
references that survive the tooltip's markup stripping (`#61` for fork
PRs, `t3code#123` for upstream, short SHAs for direct commits). Removals
are phrased as "Remove …" via prompt guidance instead of a section
label.
- **Attribution is structural:** summary items are now `{ text,
evidenceIds }` objects. The model only returns evidence IDs; URLs are
rendered deterministically and IDs are validated against the collected
evidence, so references can't be fabricated. The rolling fork-features
issue gets the same per-item references.
- **Extraction sees diffs:** each commit contributes a truncated patch
(4 KB cap, lockfiles excluded) so descriptions are grounded in what
actually changed rather than paraphrasing PR titles. Over the 160k-char
prompt budget, the largest diffs are dropped first — titles and PR
bodies never are.
- **`## What's Changed` stays** as the exhaustive record and now credits
contributors once per PR (`by @username`, fetched via `gh api` with
graceful fallback).
- **The tooltip parser stops at `## What's Changed`** when curated
highlights precede it, so raw commit lines no longer mix with highlight
lines. Bodies that open with the commit list (upstream-style, or a
nightly with no highlights) still show it.

## Pipeline example

Evidence in (abridged; one upstream commit from the delta below):

```jsonc
{
  "id": "pingdotgg#5756",
  "title": "fix(web): usage page loses the cost quality panel, gains a back button",
  "description": "<sanitized PR body>",
  "files": ["apps/web/src/components/usage/UsagePage.tsx", "…"],
  "diff": "--- a/apps/web/src/components/usage/UsagePage.tsx\n+import { useCanGoBack, useNavigate, useRouter } from \"@tanstack/react-router\";\n…"
}
```

Summary items out (actual output — note one PR correctly yielding both
an improvement and a removal):

```json
{ "text": "Return from Usage through history or to home", "evidenceIds": ["pingdotgg#5756"] }
{ "text": "Remove Cost quality panel from the Usage page", "evidenceIds": ["pingdotgg#5756"] }
```

Rendered in the release body:

```markdown
- Return from Usage through history or to home ([t3code#5756](pingdotgg#5756))
- Remove Cost quality panel from the Usage page ([t3code#5756](pingdotgg#5756))
```

## Regenerated release notes for `v0.0.33-nightly.20260809.121`

Rerunning the new generator against the existing release's refs produced
13 items (the published release had 5, plus 3 heading lines). What the
tooltip shows, via the actual parser:

```
• Identify sidebar threads with unsent drafts (#23)
• Show subagent activity counts in right-panel controls (t3code#5745)
• Return from Usage through history or to home (t3code#5756)
• Give agents access to pasted image files (t3code#5757)
• Manage projects from the dedicated Settings page (t3code#5768)
• Preserve selected diff view across panel closures and reloads (t3code#5731)
• Show pointer cursors for clickable controls and actions (t3code#5716)
• Resume Claude sessions without falsely completing skipped turns (t3code#5710)
```

<details>
<summary>Full regenerated nightly highlights</summary>

- Identify sidebar threads with unsent drafts
([#23](#23))
- Show subagent activity counts in right-panel controls
([t3code#5745](pingdotgg#5745))
- Return from Usage through history or to home
([t3code#5756](pingdotgg#5756))
- Give agents access to pasted image files
([t3code#5757](pingdotgg#5757))
- Manage projects from the dedicated Settings page
([t3code#5768](pingdotgg#5768))
- Preserve selected diff view across panel closures and reloads
([t3code#5731](pingdotgg#5731))
- Show pointer cursors for clickable controls and actions
([t3code#5716](pingdotgg#5716))
- Resume Claude sessions without falsely completing skipped turns
([t3code#5710](pingdotgg#5710))
- Stop the active Codex turn before queued follow-ups
([t3code#5762](pingdotgg#5762))
- Keep pinned thread ordering stable while saving changes
([t3code#5767](pingdotgg#5767))
- Show multi-device usage progress while totals load
([t3code#5772](pingdotgg#5772))
- Remove Cost quality panel from the Usage page
([t3code#5756](pingdotgg#5756))
- Remove the limited project settings modal
([t3code#5768](pingdotgg#5768))

</details>

<details>
<summary>Regenerated rolling fork-features summary (excerpt, for issue
#43)</summary>

## Added

- Identify yngatech builds through names, icons, palettes, and About
details ([#3](#3),
[#27](#27),
[#29](#29),
[#30](#30),
[#56](#56))
- Choose and preview sounds for completed agent turns
([#5](#5),
[#7](#7),
[#19](#19))
- Detect GitHub outages and show status in the sidebar
([#14](#14))
- Show unsent thread drafts with sidebar pencil indicators
([#23](#23))
- Start new threads with GitHub issues as context
([#31](#31))
- Open thread pull or merge requests from command palette
([#46](#46))
- Synchronize existing-thread text and composer settings across
connected devices ([#39](#39),
[#44](#44))

## Improved

- Inspect full commands, labeled streams, numeric exit codes, and
failures ([#11](#11),
[#4](#4),
[#36](#36))
- Close terminals directly from the grouped terminal list
([#22](#22))
- Show clearer snooze countdowns near hour and day boundaries
([#45](#45))
- Show setup script outcomes in the thread timeline
([#40](#40))
- Install yngatech alongside upstream T3 Code on Windows
([#49](#49))

</details>

## Rollout

The generator and workflow changes take effect on the next nightly. The
tooltip parser change ships inside the app, so currently installed
builds still show the mixed list until users update onto a build
containing it.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Diff view mode is not persisted

2 participants