fresh-vs-hunk-review-gaps.md
hunk — factual comparison and gap listDate: 2026-06-07
Method: Both tools driven interactively in tmux against the same working-tree
changeset in this repo (3 files: a modified README.md, a modified path_utils.rs,
a new untracked workspace_guard.rs). Panes captured with tmux capture-pane -e.
Everything below was observed by using the tools, not by reading source.
audit_mode plugin, launched via command palette → Review Diff
(also Review PR Branch, Review Range). Fresh built from this repo (target/debug/fresh).hunk: modem-dev/hunk v0.14.1, hunk diff.| Fresh — Review Diff | hunk | |
|---|---|---|
| What it is | A mode inside the editor; opens a read-only *Review Diff* buffer/tab | A standalone TUI in a separate process, launched from the shell |
| Chrome | Editor menu bar, tab bar, and status line remain; a 2-line hint bar at top | Own full-screen TUI: top menu bar (File/View/Navigate/Theme/Agent/Help) + sidebar |
| Launch | Command palette (Ctrl+P → "Review Diff") | hunk diff / hunk show / hunk diff <ref> from a shell |
| Leaving | q returns to editor | q quits the process |
| Fresh | hunk | |
|---|---|---|
| Layout in the review session | Unified only (single column, old+new line-number gutters) | Split, Stack, or Auto, toggled live with 1/2/0 |
| Side-by-side | Exists, but as a separate per-file command ("Side-by-Side Diff"), OLD(HEAD)│NEW(Working); no comments, not part of the review session; errors on the review buffer ("No file open") | Built into the same view; 1 switches the whole multi-file review to side-by-side |
| Syntax highlighting in diff | No — lines colored only by add/remove (green/plain) | Yes — full per-token syntax highlighting on both sides |
| Intraline (word-level) highlight | Not observed | Yes — changed words highlighted within a line |
| Context folding | Tab fold hunk, z a fold all, z r unfold all | z toggles "N unchanged lines" folds; expandable |
| Color depth | 256-color (38;5;n), follows the editor theme | 24-bit truecolor (38;2;r;g;b) |
| Themes | Inherits the one active editor theme | 6 diff-specific themes (Graphite/Midnight/Paper/Ember/Catppuccin×2), switched live |
| Fresh | hunk | |
|---|---|---|
| Grouping | By git index state: STAGED / UNSTAGED / UNTRACKED sections | By file only (flat sidebar file list) |
| File list / sidebar | No separate sidebar; files are headers inline in the scroll | Dedicated left sidebar with per-file +/- counts and a *N comment badge |
| Hunk nav | n / p | [ / ] |
| File nav | (scroll / jump) | , / . |
| Comment nav | ] / [ | { / } |
| Help discovery | 2-line hint bar always visible at top | ? full keymap overlay; F10 menus |
| Fresh | hunk | |
|---|---|---|
| Add comment | c on a diff line → prompt "Comment on L20:" | c, or via the daemon CLI |
| Rendering | Inline single line » [20] text and a right-hand COMMENTS panel | Inline bordered multi-line box anchored to the line (summary + rationale) |
| Panel | Yes, fixed right column; long text truncated (…) | No panel; notes live inline; sidebar shows per-file counts |
| Persistence | Saved to disk under .review/ and restored on reopen | Lives in the live session |
| Export | e → Markdown (.review/session.md); also a JSON export command | Not a built-in export; the session model is queryable as JSON via the CLI |
| Fresh | hunk | |
|---|---|---|
| Stage / unstage hunk | s / u — mutates the git index (verified with git diff --cached; the file moved into a STAGED section live) | None — hunk is review-only |
| Discard hunk | d | None |
| File-level stage/unstage/discard | S / U / D | None |
| Partial selection | v (select lines) | None |
| Jump to source / edit | Enter jump, Alt+o open the real file to edit | Enter/Alt+o open file in $EDITOR; no in-app editing |
| Fresh | hunk | |
|---|---|---|
| Working tree | Review Diff | hunk diff |
| Commit range / branch | Review Range (A..B, A...B, <sha>), Review PR Branch (vs base) | hunk diff <ref> / hunk show <ref>; live reload to swap inputs |
| Staged-only | Implicit via the STAGED section | hunk diff --staged |
| Stash / patch / stdin | Not observed | hunk stash show, hunk patch - |
| jj / Sapling | Not observed | Auto-detected, native revsets |
| Pager / difftool | Not observed | hunk pager, hunk difftool |
| Fresh | hunk | |
|---|---|---|
| Programmatic control | None observed; the tool is keyboard-driven for a human (the plugin host could drive it, but there is no external review CLI) | Daemon + hunk session CLI: list/get/review --json/context/navigate/`comment add |
| Watch / auto-reload | Not observed (manual refresh command exists) | --watch auto-reloads on working-tree changes |
| Agent rationale sidecar | No | --agent-context <json> |
? keymap overlay; multi-line bordered inline notes with summary + rationale.Ordered by impact-to-effort. The goal is to make Fresh's review experience match hunk's reading quality while keeping Fresh's unique edge (staging + editor integration).
*Review Diff* buffer.1/2/0), carrying comments
and staging across both modes.+/- counts and a comment-count badge, and file-level jump. Scrolling a long flat
list is the current weak point vs hunk's sidebar.…. Allow
multi-line notes, show author/rationale, and let the panel scroll/expand. Consider
hunk-style anchored bordered notes as an option.? keymap overlay. The 2-line hint bar is good but incomplete; a full
overlay (like hunk's) aids discovery of S/U/D, v, z a, range mode, etc.--watch).
Today refresh is manual.--staged / stash show / patch -.session
CLI is what makes it agentic. Fresh's differentiator could be even stronger: expose
a plugin/IPC surface so an agent can open a review, post inline comments with
rationale, and navigate — then a human reviews and edits/stages in the same app.
This fuses hunk's agent-review model with Fresh's editing+staging, which neither tool
does today.hunk is a better reader (layouts, syntax color, sidebar, agent CLL); Fresh is a better actor (staging, editing, export). Close the reading gaps — syntax highlighting, in-session side-by-side, a file sidebar, and a readable comments panel — and Fresh's review tool becomes strictly more capable than hunk for a human reviewer, while a scriptable review API would let it win the agentic use case too.