// changelog

v1.4.0

A "Trust & quality" release — `--show-prompt` to see exactly what leaves your machine, an opt-in `guard.token_preflight`, a live elapsed-time counter on the progress spinner, the first published measured-quality benchmarks, and a fix for the spinner flooding the screen on some terminals.

Released May 29, 2026

Added

  • --show-prompt — see exactly what gets sent. Assembles the full system + user prompt that would be sent to the model, prints it, and exits — no provider call, no cache lookup, no cost. It reflects every prompt-shaping flag (the scope, --with-context, --cli / --provider, --lang), so it’s the full-text companion to dry-run (which reports only metadata). Honours --output to write the prompt to a file. Use it to audit data egress or debug a custom COMMITBRIEF.md.

  • guard.token_preflight config (opt-in, default off). When enabled, a review whose estimated prompt exceeds the active model’s context window prompts for confirmation (on a TTY) or aborts (non-interactively) before the paid call — a friendly catch instead of a raw provider 400 context length exceeded. Off by default because the estimate is a chars / 4 heuristic and a false positive shouldn’t block an unguarded review. Turn it on with commitbrief config set guard.token_preflight true.

  • Live elapsed-time counter on the progress spinner. Once a stage has run for more than a second, the animated tree shows a muted timer beside it (e.g. Thinking… 0:42), so a slow --with-context agent call reads as working rather than frozen.

  • Published measured-review-quality benchmarks. CommitBrief now ships an eval harness that scores real review output against a 23-fixture known-answer corpus (23 planted defects + 3 clean controls). The first scorecard across five models is on the Benchmarks section of the site: every Claude model recalls essentially all planted defects with zero false positives on the clean controls.

Fixed

  • Progress spinner flooding the screen on some terminals. The animated renderer redraws in place by moving the cursor up; a stage line longer than the terminal width wrapped to multiple rows, so the cursor-up under-counted and a line (often Searching for changes…) repeated every frame — it looked like an infinite loop. Rendered lines are now clipped to the terminal width so they never wrap, and TERM=dumb terminals fall back to plain one-line-per-stage output. Workaround on older builds: --color never or NO_COLOR=1.