// changelog
v0.6.0
Structured findings JSON. OUTPUT.md becomes a Go template — breaking change.
Released May 20, 2026
⚠️ Breaking — OUTPUT.md semantics (ADR-0014)
COMMITBRIEF.mdusers are unaffected. Project review rules remain the user-editable system prompt.OUTPUT.mdis now a Gotext/templateconsumed 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--markdownand--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 --yesto overwrite OUTPUT.md with the new embedded default, or rewrite it intext/templatesyntax. - 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 strictresponse_format, GeminiResponseSchema, Ollamaformat: "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.ValidateOutputTemplatepre-send guard — malformed templates fail with a clear error pointing at the file.