Skip to content

feat(app): browse full commit history in a History tab - #4141

Closed
CN-liuzhiyang wants to merge 2 commits into
getpaseo:mainfrom
CN-liuzhiyang:feat/commit-history-panel
Closed

feat(app): browse full commit history in a History tab#4141
CN-liuzhiyang wants to merge 2 commits into
getpaseo:mainfrom
CN-liuzhiyang:feat/commit-history-panel

Conversation

@CN-liuzhiyang

Copy link
Copy Markdown

Linked issue

Closes #

Type of change

  • New feature
  • Enhancement

Reasoning

The Changes panel only listed commits ahead of base, so a clean checkout showed nothing and there was no way to browse history that was already pushed or merged. This adds a History tab to browse the full commit log for a checkout.

Goals

  • Add a commit_log panel reachable from the Commits section header, the Changes overflow menu, and the New Tab launcher.
  • Show shortSha, subject, ref badges, and relative time per row (author on wide panes); selecting a commit opens the existing commit_diff tab.
  • Support a scope toggle between current branch and all branches (including remote-tracking).
  • Back it with a new gated RPC, checkout.commits.list_history, with stable cursor-based pagination that tolerates force-pushes (reports cursorExpired instead of splicing a shifted page).
  • (Incidental) Fix a Windows desktop-dev workflow gap: packages/desktop/scripts/dev.ps1 didn't rebuild @getpaseo/protocol/@getpaseo/client on change like npm run dev does; added fingerprint-based rebuild-on-change, documented a Windows Hyper-V/WSL reserved-port gotcha, and added a desktop-win paseo.json service entry.

Non-goals

  • No file-list/diff-stat rendering in history rows (intentionally skips --raw --numstat for performance).

QA

  • npm run typecheck and npm run format:check pass locally via pre-commit hooks on both commits.
  • I have not personally re-verified the History tab UI in this session — the feature commit was authored and tested in a prior session. Flagging this so reviewers weight the QA bar accordingly.

Checklist

  • One focused change (bundles a small incidental Windows dev-tooling fix alongside the feature; see Reasoning)
  • npm run typecheck passes
  • npm run lint passes (not independently re-run this session)
  • npm run format passes
  • QA evidence (see QA note above)
  • Tests added or updated where it made sense

The Changes panel only listed commits ahead of base, so a clean checkout
showed nothing at all and there was no way to read history that was already
pushed or merged.

Adds a `commit_log` panel, reachable from the Commits section header, the
Changes overflow menu, and the New Tab launcher. Rows show shortSha, subject,
ref badges, and relative time, with the author on wide panes. Selecting a
commit opens the existing commit_diff tab. A scope toggle switches between the
current branch and all branches, including remote-tracking ones.

Backed by a new gated RPC, checkout.commits.list_history. It skips
--raw --numstat: the history rows render no file lists, and a tree diff per
commit is what forced CHECKOUT_BASE_COMMIT_LIMIT down to 10. The cursor pins
the starting commit OIDs at page one and replays them with --skip, because
--all re-expands to whatever refs exist at call time and would shift rows
between pages. Pinned tips are validated as hex before reaching argv, and a
tip lost to a force-push reports cursorExpired so the list restarts rather
than splicing in a shifted page.

Adds useFetchInfiniteQuery to @/data/query rather than putting another file on
the raw-query burn-down list. The history query is deliberately left out of the
checkout_status_update invalidation path, which fires on every working-tree
change and would reset paging to the first page.

The commit_diff tab this lands you in could not collapse a file. collapseState
was gated to the working mode at the type level, and the file header rendered
non-interactive, so the panel that history now sends people to several times a
session behaved worse than the Changes panel beside it. Both modes carry
collapseState now, headers toggle in either, and the commit_diff toolbar gets
collapse-all and wrap-lines alongside the split toggle -- so it also renders on
compact, where only the split toggle drops out. Collapse lives in tab state and
survives a tab switch.

FileHeader only wraps itself in a ContextMenu when it was handed file actions.
A commit diff has none, and the trigger preventDefaults right click before
discovering the menu is empty, which would have swallowed the browser menu to
show nothing.
…top dev on Windows

Desktop dev didn't watch-build protocol/client like `npm run dev` does, so
stale dist output for those packages went unnoticed. Fingerprint their
sources against the last desktop dev build and rebuild only when they
changed. Also documents the Windows Hyper-V/WSL reserved-port gotcha and
adds a `desktop-win` paseo.json service entry.
@boudra

boudra commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

I prefer this as a plugin workspace panel. That API is on main for the upcoming 0.8 release: workspace panels. Closing the core PR in favor of the plugin approach.

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