# CommitBrief v0.6.0

> Structured findings JSON. OUTPUT.md becomes a Go template — breaking change.

Released May 20, 2026

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

---

## ⚠️ Breaking — OUTPUT.md semantics (ADR-0014)

- **`COMMITBRIEF.md` users are unaffected.** Project review rules
  remain the user-editable system prompt.
- **`OUTPUT.md` is now a Go `text/template` consumed locally**, not
  a format instruction embedded in the LLM prompt. The model
  produces structured findings JSON under a fixed schema; the
  renderer applies your OUTPUT.md to those findings for
  `--markdown` and `--output <file>.md`. Pre-0.6.0 OUTPUT.md files
  written as natural-language instructions fail the pre-send
  validation guard.
- **Migration**: run `commitbrief init --yes` to overwrite OUTPUT.md
  with the new embedded default, or rewrite it in `text/template`
  syntax.
- **Severity vocabulary expanded to five levels** (was three):
  `critical`, `high`, `medium`, `low`, `info`.
- **Old local cache entries auto-invalidated** because the system
  prompt SHA is part of the cache key.

## Added

- **Structured findings JSON contract** between LLM and renderer.
  Every provider uses its native structured-output mechanism:
  Anthropic `tools`, OpenAI strict `response_format`, Gemini
  `ResponseSchema`, Ollama `format: "json"`.
- **Retry-once + graceful degrade.** Unparseable LLM output triggers
  one retry; second failure degrades to plain-text with a stderr
  warning. Cache entries record the fallback mode.
- **Per-finding Cards layout** (Stage B). Each finding renders as a
  lipgloss-bordered panel coloured by severity. Empty case shows a
  single green-checkmark "No findings. Looks good." panel.
- **`render.ValidateOutputTemplate`** pre-send guard — malformed
  templates fail with a clear error pointing at the file.