Skip to content

Releases: alankyshum/semantic-diff

v0.9.0

19 Mar 00:01

Choose a tag to compare

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 controlsR to force-refresh, Esc to dismiss, j/k/g/G/Ctrl-d/Ctrl-u to 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-diff

Full Changelog: v0.8.0...v0.9.0

v0.8.0

18 Mar 05:22

Choose a tag to compare

What's New

Runtime Settings Menu

  • Press , to open Settings overlay
  • Press d to toggle between dark and light theme at runtime
  • Press Esc to 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|auto CLI flag
  • SEMANTIC_DIFF_THEME env var
  • COLORFGBG fallback 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-diff

v0.7.2

17 Mar 19:03

Choose a tag to compare

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-diff

Full Changelog: v0.7.1...v0.7.2

v0.7.1

17 Mar 18:51

Choose a tag to compare

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-diff

Full Changelog: v0.7.0...v0.7.1

v0.7.0

17 Mar 00:22

Choose a tag to compare

What's Changed

  • Markdown preview — Press p to toggle rendered preview for .md files: 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 p key — 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-diff

Full Changelog: v0.6.0...v0.7.0

v0.6.0

16 Mar 19:22

Choose a tag to compare

What's Changed

Untracked file support

  • New (untracked) files are discovered via git ls-files --others --exclude-standard and 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.tss/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 sonnet to haiku (Claude) / gemini-flash (Copilot)
  • The classification task (grouping files by intent) works well with fast models
  • Users can upgrade to sonnet or opus via ~/.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

16 Mar 17:56

Choose a tag to compare

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::File now includes a group index to disambiguate the same file across multiple groups
  • hunk_filter_for_file builds a per-file filter scoped to the selected group
  • Removed toggle behavior from group selection (was incorrect for navigation-based sync)

v0.5.0

16 Mar 16:52

Choose a tag to compare

What's Changed

Drop-in git diff Replacement

  • Use semantic-diff as a direct replacement for git diff with the same CLI arguments (--staged, --cached, revision ranges, path filters)
  • Configure as git config diff.external for 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-diff

Full Changelog: v0.4.0...v0.5.0

v0.4.0

16 Mar 15:58

Choose a tag to compare

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 COLORFGBG environment 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=dumb environments 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-diff

Full Changelog: v0.3.0...v0.4.0

v0.3.0

15 Mar 18:49

Choose a tag to compare

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