# CommitBrief v0.9.2

> CLI provider polish — stdin transport for claude-cli, `compress --dry-run`, locale narrow to {en, tr}.

Released May 26, 2026

Canonical URL: https://commitbrief.com/changelog/v0.9.2/

---

## ⚠️ Breaking

- **Locale surface narrowed to `{en, tr}`.** Pre-v0.9.2 the
  `langNames` map advertised 15 languages for which we never
  shipped translations — `i18n.Load` silently fell through to
  English, so the dry-run footer claiming `Lang: Deutsch` was a
  lie. `Resolve` now coerces any unsupported code (`output.lang:
  de`, `--lang fr`, `LANG=es_ES`) to `en` while preserving the
  original `Source` for attribution.

## Changed

- **CLI providers respect `--output`.** The plain-text emit path
  used by `--cli claude` / `--cli gemini` now routes through the
  same `openOutput` helper the structured renderers use, so
  `--cli claude --output review.md` writes to the file instead of
  silently dropping the destination.

- **CLI provider prompt transport switched to stdin for claude-cli.**
  Large diffs were hitting the platform ARG_MAX limit
  (~128KB), surfacing as `argument list too long`. claude-cli now
  invokes `claude -p -` and pipes the prompt via stdin. gemini-cli
  stays on argv for now — upstream lacks a documented stdin
  shorthand.

- **`DefaultModel` for CLI providers is memoised + bounded.** The
  cache-key path queries `DefaultModel` on every review; before it
  re-shelled out to `<cli> --version` each time and could hang a
  pipeline behind a misbehaving host CLI. `sync.Once` + 5-second
  timeout cap the cost at one short subprocess per Backend.

## Added

- **`--cli` is mutually exclusive with `--json` and `--markdown`.**
  CLI-provider output is pre-formatted plain text; combining it
  with a structured renderer either re-flows the formatting or
  parses prose as JSON. Cobra rejects the pairing before any
  provider call.

- **`dry-run` now reports output tokens, context window, and cost
  estimate.** Mirrors the verbose footer of a real review so users
  can decide whether to fire the request without having to.

- **`commitbrief compress --dry-run`.** Runs the LLM compression
  call and prints the Result block (sizes, savings, per-review
  saved $) but does NOT replace COMMITBRIEF.md or write a backup.
  Mutually exclusive with `--out`.

## Fixed

- **`commitbrief diff` accepts pathspecs and >2 args.** The
  subcommand used to cap at two positional args, rejecting
  legitimate `git diff <ref> -- <pathspec>` invocations.
  `MinimumNArgs(1)`; everything past the first arg is forwarded
  verbatim.

- **`ui.EnableANSI` is now called from `Execute`.** On legacy
  Windows consoles VT100 escape mode must be opted into before any
  ANSI codes are written; we shipped the helper but never invoked
  it at the entry point.

- **Shared interactive stdin across the review pipeline.** Guard,
  secret scanner, and cost preflight used to each instantiate their
  own `bufio.Scanner` over `os.Stdin`; the first scanner's
  lookahead could swallow input meant for the next site. A single
  `*bufio.Reader` is now plumbed through all three.

## Removed

- **Dead i18n keys cleaned up.** ~10 unreferenced keys from earlier
  revisions. New CI guard (`make i18n-check`) fails on the first
  unreferenced key so the catalog can't grow stale again.