// changelog
v1.13.0
Repair-oriented structured-output recovery. When a provider returns something that fails findings-JSON parsing, the pipeline no longer re-sends the byte-identical request — a lone markdown fence is now salvaged for free before parsing, and the single retry sends a failure-mode-specific repair prompt instead. Two new optional meta fields make retries and degrades visible.
Released July 4, 2026
Changed
- Repair-oriented structured-output recovery (ADR-0031). When a provider
returns output that fails findings-JSON parsing, the pipeline no longer
retries with the byte-identical request. The recovery ladder has three
rungs:
- Phase 0 — fence salvage, zero retries.
ParseFindingsnow unwraps a lone markdown code-fence pair (```json … ```) before parsing, so a provider that fenced otherwise-valid JSON — common for prompt-only, OpenAI-compatible and Ollama models — parses on the first attempt. Non-fenced input passes through byte-identical, so the cache key is unchanged and cached results that happen to be fenced now render as findings on replay. - Phase 1 + 2 — a repair prompt, not a re-roll. The parse error is
classified (empty / prose / truncated-JSON / schema violation) and the
single retry sends a failure-mode-specific repair prompt: a hard
“JSON only, no prose” reset for prose or schema-ignored output, or a
“complete the JSON” nudge — with the partial output embedded and a raised
max_tokensceiling — for a truncated attempt.
- Phase 0 — fence salvage, zero retries.
- The retry stays a fresh single-shot request; the terminal
markdown-fallbackdegrade state and the summed token usage are unchanged. CLI plain-text providers are unaffected.
Added
- Recovery observability (ADR-0031). New additive optional
meta.retry_countandmeta.degrade_reasonfields in the--jsonoutput. Both areomitempty, so a clean review is byte-for-byte the same as before and the schema version stays1. Two matching--verbosefooter lines make retries and degrades visible formake evalmodel comparison. Both are live-call-only — a cache replay reports neither.