v0.4.1 — P0-P2 Reliability Audit
P0 — Destructive fixes
- Version sync:
__init__.py0.3.1 → 0.4.1 (was showing wrong version to MCP servers) - Thread-safe Storage: per-thread SQLite connections + WAL mode; all reads now under lock (was crashing on concurrent TUI + Telegram access)
- Windows compat:
signal.pause()replaced withthreading.Event().wait()(was exiting immediately on Windows) - Cron stop:
stop_eventpromoted to instance attribute for immediate scheduler shutdown
P1 — Important fixes
- Router now catches
AnthropicError(Anthropic provider fallback was broken) - 7 modules now catch
LLMError+AnthropicError(was onlyRuntimeError/OSError) - Context compaction uses
Router.chat()with fallback chain + rate limiter - Skill evolution: dedup check prevents overwriting promoted skills; now passes LLM for prose refinement
- Health endpoint: caches
Runtimeacross requests (was rebuilding everything on every probe) - Sub-agents now execute tool calls in a loop (up to 3 rounds) instead of single-shot
P2 — Quality improvements
- Token estimation consistent at ~3.2 chars/token everywhere
pulse initnow lists Anthropic as a provider optionMemoryStorefile appends guarded bythreading.LockObservability.eventscapped at 5000 (prevents memory leak in long-running services)- Cron
*/Nstep syntax now actually matches (was parsed but never evaluated) decomposeheuristic handles numbered lists + comma-separated items
138/138 tests pass · Ruff lint clean