v3.20.0 β Reliability audit
Reliability audit release. A broad correctness + resilience sweep from a four-agent audit (core engine, command/UX, error-handling, test coverage) β 25 fixes across four priority tiers, test suite 685 β 710.
Interaction & tool plumbing
- Interactive prompts no longer swallowed by the tool spinner β confirmations, arrow-select menus, and
ask_userpause the live spinner on every path (native single/multi + Ollama). Confirming a command or picking an option works reliably again. - Lazy-MCP meta-tools work when batched with other tools (no more "Unknown tool").
- Batch-edit rejections reach the model instead of being dropped (no building on a phantom edit).
History & compaction
- Ollama loop normalizes mixed-format history;
/compact+ auto-compact no longer 400 on OpenAI-compat after tool turns; image tool-results aren't dumped as base64 text on a provider switch. - Session/history files written atomically; monotonic history ids (no collision/overwrite after 100 sessions).
Resilience
- Quit-time summary gated (
summarize_on_exit) + hard-capped at 15s; MCP stdio uses one persistent reader (no leaked threads / desync);MemoryStoreSQLite lock-guarded; REPL survives a non-tty stdout.
Polish
/watchdetects new files;/multifolds in @-files + warns; arrow-select numbers work beyond 5; completer keywords for/approve /effort /failover /tune /toon /sandbox /mcpand/lsp diagnostics;/voicepreflights the recorder;save_settingsno longer mutates the caller's dict.
710 tests passing.