Repository navigation
feat(git): review branch changes in a Changes view with read-only diff tabs - #9
Merged
Merged
Conversation
…f tabs A third sidebar view lists every file the branch touched since it left its base branch (working tree included) or only the uncommitted ones, with +/− per file, a one-line summary and a commit count. Each file opens as a virtualized unified diff with collapsed context; ⌥F5 walks the hunks and moves on to the next file; reviewed rows dim until the file changes again. ⌘⇧G and ⌥F5 are now actually bound (they were advertised but never wired). Server: /api/git/changes (git diff --raw --numstat -z -M, untracked files with line counts, conflicts from ls-files --unmerged, base-branch detection, 1,000-file cap) and a validated `rev` on /api/git/base. Hardened after an adversarial review: -O/dev/null, --no-relative, --no-mailmap and mailmap/bigFileThreshold overrides against hostile configs, a 30 s kill timer on every git run, coalesced concurrent runs, streamed untracked counting. Design round and review table in DESIGN.md §15. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
+/−per file, a one-line summary with a proportional bar and the commit count. Surprises sort first (conflicts, deletions, new files); reviewed rows dim until the file changes again. The scope control appears only when a base branch exists and HEAD has commits on top of it./api/git/changes?scope=(git diff --raw --numstat -z -M, untracked files with streamed line counts, conflicts fromls-files --unmerged, base-branch detection via origin/HEAD → main/master/develop/trunk → upstream, 1,000-file cap) and a validated full-oidrevon/api/git/base.Design and review
DESIGN.md §15 records the three-panelist design round (interaction, visual, developer-experience) and the adversarial review that followed. Confirmed and fixed, each with a regression test:
.git/config(diff.orderFile,mailmap.file→/dev/zero) could hang git without bound:-O/dev/null,--no-mailmap, mailmap/bigFileThreshold overrides inHARDEN, 30 s kill timer on every git rundiff.relative=trueblanked the list in a subfolder view:--no-relativegit diff <commit>never emits unmerged entries)git rm --cachedduplicates; submodules; orphan branch; EOL-only changesTest plan
bun test: 1165 pass (new:servergit.changes,http.changes,client.changes,client.diffview)dispose()lifecycle🤖 Generated with Claude Code