Releases: alankyshum/semantic-diff
v0.9.0
What's Changed
AI-Powered Review Pane
- New: Group review — Navigate to a semantic group in the sidebar to see an AI-generated review with four sections: WHY (intent), WHAT (impact table), HOW (flow diagram), and VERDICT (high-severity issues with bug numbers like RV-1, RV-2)
- Parallel pre-computation — Reviews for all groups are spawned automatically when grouping completes, so results are ready by the time you navigate
- Two-tier caching — Reviews are cached in-memory (LRU, max 20) and on disk (
.git/semantic-diff-cache/reviews/), surviving across sessions - Review SKILL discovery — Detects custom review SKILLs from
.claude/skills/(codebase) or~/.claude/skills/(global) and injects them into the Verdict prompt - Review source banner — Shows which SKILL powered the review, or a tip to create one
- Keyboard controls —
Rto force-refresh,Escto dismiss,j/k/g/G/Ctrl-d/Ctrl-uto scroll
Markdown & Diagram Improvements
- Table row separators — Dashed lines (┄) between data rows for better readability
- Mermaid image sizing — Small diagrams no longer stretch to fill wide terminals; images are capped at their natural width
Bug Fixes
- Fix deadlock risk — stdout and stderr are now read concurrently when invoking Claude CLI
- Fix stale review cache — Group content hash now includes hunk indices, not just file paths
- Fix error caching — Reviews with failed sections are not persisted to disk (retryable on next run)
Install / Upgrade
cargo install semantic-diff
# or
brew install alankyshum/tap/semantic-diffFull Changelog: v0.8.0...v0.9.0
v0.8.0
What's New
Runtime Settings Menu
- Press
,to open Settings overlay - Press
dto toggle between dark and light theme at runtime - Press
Escto close
Theme-Aware Markdown Preview
- 13 new color fields for markdown elements (headings, inline code, code blocks, lists, links, blockquotes, etc.)
- Light theme uses high-contrast colors — fixes invisible inline code and H4 headings on light terminals
Theme Detection & Override
--theme=light|dark|autoCLI flagSEMANTIC_DIFF_THEMEenv varCOLORFGBGfallback detection- Config file:
"theme": "light"in~/.config/semantic-diff.json
UI
- Help and Settings overlays auto-size to fit content width
Install / Update
# Homebrew (after CI completes)
brew upgrade semantic-diff
# Cargo
cargo install semantic-diffv0.7.2
What's Changed
- Table text wrapping — Markdown preview tables now auto-fit to the terminal pane width. Column widths are proportionally distributed and cell text wraps on word boundaries instead of extending beyond the visible area.
- Fix — Corrected character width calculation for Unicode box-drawing characters in scroll height estimation (
.chars().count()instead of byte.len()).
Install / Upgrade
cargo install semantic-diff
# or
brew install alankyshum/tap/semantic-diffFull Changelog: v0.7.1...v0.7.2
v0.7.1
What's Changed
- Fix — Markdown preview text now auto-wraps (word flow) instead of truncating at the pane edge
- Fix — Scroll height calculation accounts for wrapped lines in preview mode
- Fix — Stale mermaid diagram images no longer persist when switching files (fixed Kitty delete command and explicit cell overwrite for iTerm2)
Install / Upgrade
cargo install semantic-diff
# or
brew install alankyshum/tap/semantic-diffFull Changelog: v0.7.0...v0.7.1
v0.7.0
What's Changed
- Markdown preview — Press
pto toggle rendered preview for.mdfiles: headings, tables (box-drawing), code blocks, lists, links, blockquotes, task lists - Mermaid diagram rendering — Renders mermaid code blocks as inline images in iTerm2/Kitty/Ghostty via native terminal protocols; falls back to styled source code in multiplexers (tmux/screen) or when mmdc is not installed
- Smart terminal detection — Auto-detects image protocol support (iTerm2 OSC 1337, Kitty graphics) and multiplexer sessions (TMUX, STY env vars) at runtime
- Content-hash caching — Mermaid PNGs cached in
.git/semantic-diff-cache/mermaid/with blake3 hashing; unchanged diagrams render instantly - Responsive images — Diagrams scale to diff pane width with aspect-ratio-correct height; stale images cleared on file switch
- Global
pkey — Preview toggle works from both sidebar and diff pane focus - Removed cmux hook setup — cmux now uses socket-based control; removed
.claude/hooks.example/and Claude Code integration section from README
Install / Upgrade
cargo install semantic-diff
# or
brew install alankyshum/tap/semantic-diffFull Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
Untracked file support
- New (untracked) files are discovered via
git ls-files --others --exclude-standardand displayed alongside tracked changes - Shown with
[untracked]badge in the diff view and[U]in the sidebar - Binary detection (null bytes in first 8KB), 1MB size cap, and path traversal validation
Smart path abbreviation
- Long file paths in the sidebar are automatically abbreviated to fit the available width
- Example:
src/app/components/sales-assistant/routes.ts→s/a/c/s-a/routes.ts - Filenames are always kept intact; only parent directories are shortened left-to-right
Structural sampling for LLM grouping
- Untracked files use head/mid/tail sampling (4 lines from each region) instead of just the first 4 lines
- Gives the LLM a representative view of the file's purpose for better semantic grouping
Faster default models
- Default LLM model changed from
sonnettohaiku(Claude) /gemini-flash(Copilot) - The classification task (grouping files by intent) works well with fast models
- Users can upgrade to
sonnetoropusvia~/.config/semantic-diff.json
Install / Upgrade
```bash
cargo install semantic-diff
or
brew install alankyshum/tap/semantic-diff
```
Full Changelog: v0.5.1...v0.6.0
v0.5.1
Bug Fixes
-
Fix diff pane showing wrong hunks when selecting files in sidebar — Previously, selecting a file showed all hunks from the entire group (or the wrong group when a file appeared in multiple groups). Now the diff pane shows only the specific hunks assigned to that file within its group.
-
Sidebar navigation now syncs diff view immediately — Moving up/down (j/k) in the sidebar updates the diff pane in real-time, instead of requiring Enter to apply the filter.
Technical Details
TreeNodeId::Filenow includes a group index to disambiguate the same file across multiple groupshunk_filter_for_filebuilds a per-file filter scoped to the selected group- Removed toggle behavior from group selection (was incorrect for navigation-based sync)
v0.5.0
What's Changed
Drop-in git diff Replacement
- Use
semantic-diffas a direct replacement forgit diffwith the same CLI arguments (--staged,--cached, revision ranges, path filters) - Configure as
git config diff.externalfor seamless integration into your existing workflow
Incremental Grouping
- Files are grouped progressively as LLM responses stream in, so you see organized results immediately instead of waiting for all files to be analyzed
Fixes
- Clean up clippy lint warnings for uninlined format args and
ptr_arg
Install / Upgrade
cargo install semantic-diff
# or
brew install alankyshum/tap/semantic-diffFull Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
Adaptive Dark/Light Theme
- Auto-detects terminal background color via OSC 11 protocol — works in iTerm2, Ghostty, kitty, WezTerm, Alacritty, xterm, VS Code terminal
- Falls back to
COLORFGBGenvironment variable for terminals that don't support OSC 11 - Full light theme palette with pastel diff colors, dark text, and blue accents for readability on white/light backgrounds
- Override with
"theme": "dark"or"light"in~/.config/semantic-diff.json(default:"auto") - Skips background detection in CI, piped stdin, and
TERM=dumbenvironments for zero startup overhead
Docs & Community
- Added "Why" section to README with real developer quotes from Hacker News
- Comparison table against 8 competing diff/review tools
- Marketing campaign with targeted community response templates
Fixes
- Moved hook script to
hooks.example/to prevent self-triggering when developing inside the semantic-diff repo
Install / Upgrade
cargo install semantic-diff
# or
brew install alankyshum/tap/semantic-diffFull Changelog: v0.3.0...v0.4.0
v0.3.0
What's Changed
Security Hardening
- Secure PID file management with atomic writes and ownership validation
- Path traversal protection in diff parser and config/cache paths
- Bounded LLM response reading with validated deserialization and UTF-8 safe truncation
- Prompts piped via stdin to prevent process table exposure
- Log file moved to secure directory with restricted permissions
Testing
- Integration tests for diff rendering, SIGUSR1 signal handling, stress tests, and LLM integration
Full Changelog: v0.2.3...v0.3.0