# CommitBrief 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

Canonical URL: https://commitbrief.com/changelog/v1.4.0/

---

## 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](/#quality) 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`.