Files
jjf/CHANGELOG.md
T
swaitsandClaude Opus 4.7 cbc54ba685
CI / check / clippy / fmt (push) Canceled after 0s
CI / build (1.85) (push) Canceled after 0s
CI / build (stable) (push) Canceled after 0s
chore(release): 0.4.0
Restores `jj show` support, broken by the 0.3.0 dispatch rewrite.
`jj show` accepts its revision as a positional `[REVSET]` argument
rather than a `-r` option, which the help-driven dispatch didn't
recognize — so bare `jjf` (which defaults to `show`) errored instead
of opening the picker. A revision named as a bare positional now also
bypasses the picker, like an explicit `-r`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 13:58:43 -06:00

6.3 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.4.0 — 2026-05-22

Restores jj show support, which the 0.3.0 dispatch rewrite broke: bare jjf (which defaults to show) works again, and a revision named as a bare positional bypasses the picker.

Fixed

  • Bare jjf (which defaults to the show subcommand) no longer errors with "'jj show' takes no revset flag (-r/--to)". The 0.3.0 help-driven dispatch only scanned a leaf's Options: block, but jj show accepts its revision as a positional [REVSET] argument. jjf now also reads the Arguments: block and recognizes a positional revset that exposes -r as an alias, injecting -r <picked> as before.
  • jjf show <rev> (a revision passed as a bare positional, e.g. jjf show @-) now bypasses the picker and runs verbatim, instead of launching the picker and appending a second, conflicting -r. The bypass check previously only recognized explicit revset flags; it now also recognizes a bare positional for positional-revset leaves. Option values are not mistaken for positionals — jjf reads the leaf's full option set (including Global Options:) to step over them, so jjf show -T <template> still opens the picker.

Added

  • The bypass check also recognizes the inline --revision=<rev> / --to=<rev> form, not just space-separated flags.

0.3.0 — 2026-05-04

Subcommand dispatch is now help-driven instead of substring-matching "REVSET", so multi-level subcommands and non--r revset flags work.

Fixed

  • jjf bm main (where bm is a user alias for bookmark move) now correctly emits jj bm main --to <picked> instead of -r <picked>, which jj rejected. jjf parses the leaf's Options: block and picks -r/--revision[s] first, then -t, --to. --from is intentionally not a fallback (different semantics).
  • jjf tag set v0.2.0 no longer errors with "doesn't take revisions". jjf now walks into multi-level subcommands by parsing each parent's Commands: block, so tag set, bookmark move, git push, etc. resolve to their actual leaf and read its real flag set.

Added

  • Bypass mode when the user already passed a revset flag in their args. jjf describe -r @- now runs verbatim instead of double-injecting -r. Triggers on any of -r, --revision, --revisions, -t, --to in passthrough.
  • Refusal message for leaves with no revset flag now includes the resolved leaf path (e.g. jjf workspace list → "'jj workspace list' takes no revset flag — run 'jj workspace list' directly") so users see exactly which command jjf landed on.
  • Unit tests for the help parsers and command-line construction against captured fixtures of jj tag set --help, jj bookmark move --help, and jj tag --help.

0.2.0 — 2026-04-29

Picker now renders jj's real graph (merge connectors and all), with the cursor/filter aware of decorative rows.

Changed

  • Graph rendering now uses jj's native --graph output instead of a custom one-row-per-commit reconstruction. Merge connectors (├─┬─╮, ├─╯, ╰─╯) appear exactly as jj log draws them, so the picker is a 1:1 visual match for the real log.
  • Cursor row arrow glyphs changed from ├──► to ●──▶ so the selection arrow doesn't visually clash with the graph chrome.
  • Hint row at the bottom of the picker drops trailing key/label pairs (esc quit, ^U clear, …) until it fits on one row. Previously a narrow terminal would wrap the hint and push the search bar off the top of the screen.

Added

  • Connector / decorative graph rows (├─╮, ╰─╯, ~, …) are kept in the picker for visual fidelity with jj log. Cursor navigation (arrows, Page{Up,Down}, Home, End, Ctrl-N/P/J/K, Ctrl-A/E) skips over them; selection is silently ignored on connector rows.
  • Filtering (any non-empty query) excludes connector rows, since they can't match a query and a stray ├─╮ between filtered hits would carry no useful information.

Fixed

  • Long descriptions no longer split across rows when the user has ui.log-word-wrap = true configured globally — the internal jj log invocation now forces ui.log-word-wrap=false so a single commit always renders on a single picker row.

0.1.0 — 2026-04-29

Initial release.

Added

  • Fuzzy picker over jj log for any jj subcommand that accepts -r.
  • Smart prefix matching: typing the bold-highlighted portion of a change ID jumps to that revision instantly. Falls back to nucleo fuzzy matching against description text.
  • Multi-select via Tab; selections joined into -r 'A|B|C' revset union.
  • Two-column layout (when terminal ≥ 80 cols): picker on left, live jj show --summary preview of the cursor row on right, cached per revision.
  • Live command preview row showing the exact jj … invocation that Enter will run.
  • Preflight check via jj <sub> --help: subcommands that don't accept revisions (status, log, etc.) are rejected upfront with a friendly message.
  • --ignore-working-copy on the internal jj log call so the picker doesn't race with prompt/editor auto-snapshot integrations.
  • Shell integration via jjf init <bash|zsh|fish|nu>:
    • rewrites shell history so up-arrow recalls the resolved jj … command rather than the jjf … invocation,
    • drops the jjf … entry on cancel/error so cancelled invocations don't pollute history,
    • defaults jjf (no args) to jjf show,
    • passes meta-commands and bare flags through to the binary directly.
  • Vim-style and emacs-style navigation: ↑↓, Ctrl-N/P, Ctrl-J/K, PageUp/PageDown, Home/End, Ctrl-A/E.
  • Light-terminal detection via COLORFGBG: cursor-row highlight uses reverse video on light themes (where the dark gray bg is invisible).
  • Synchronized output (DEC mode 2026) around each redraw to eliminate tearing on Kitty / WezTerm / foot / recent iTerm.