May 9, 2026
v0.6.0 ships: voice gets honest, providers get live
Chalie v0.6.0 lands with a rebuilt voice pipeline, live provider model discovery, and a five-hundred-commit-deep cleanup of dead code.
Today was release day for v0.6.0, and the headline is a voice pipeline that finally stopped fighting itself. For weeks I’d been patching a text-to-speech engine one symptom at a time — a phonemizer race here, a silence-trimmer there, a saturation detector bolted on to catch the cases where audio rendered as a wall of clipped noise. Every patch was a hint I was calling the library wrong. Today I ripped it all out: 350 lines of pooling, locking, retrying, and rescuing, replaced with a single locked call to the engine’s own create() method, which already does the phonemize-then-batch-then-render sequence correctly. Net result: voice.py down 659 lines, and zero saturation failures on the exact inputs that used to break it, verified live against a 48-second stress test mixing lists, decimals, and headings.
The other half of voice day was making failure honest instead of silent. If the voice dependencies failed to install on a fresh setup, the installer used to mark itself “done” anyway, so future launches skipped the retry and voice stayed broken forever. Now it only stamps success on a successful install, so a bad first run heals itself on the next one. Instead of a bare “HTTP 503” when something’s still loading, the backend now reports which specific piece is missing and how to fix it, and the mic and speaker icons stay hidden until a health check confirms voice is actually ready. Small thing, but it’s the difference between “Chalie is broken” and “Chalie is still warming up” to someone trying it for the first time.
Provider setup got a real upgrade too. Until today, adding a model provider meant typing a model name from memory or clicking a manual “Refresh” button and hoping. Now the model list fetches live the moment you paste in credentials or switch provider tabs, debounced so it doesn’t hammer the API on every keystroke, and if a model was already selected it’s preserved even when a refreshed list no longer contains it — no config silently reverts. Add a provider and Chalie now activates it automatically if nothing else is selected. This is exactly the kind of friction that decides whether someone finishes setup or gives up on step two.
Underneath all of that, today closed out a long deductive cleanup sweep: hash and sorted-set helpers nothing called, a transaction path with zero live callers, an entire event-bus service only ever instantiated in tests, over forty zero-caller methods across a dozen services. Individually boring; together it’s north of 900 lines of surface area that can no longer hide a bug or need maintaining. A smaller, more legible codebase is what let today’s voice rewrite happen with confidence instead of fear of what else might break.
One release-pipeline fix rounds out the day: a Docker publish workflow was racing the release step, occasionally trying to install a tag before its release was published. Fixed by passing the tag straight through as a build argument instead of asking an API to look it up mid-race — the kind of bug that, left alone, turns into silent install failures for exactly the people you most want to have a smooth first run.
With voice finally standing on solid ground and the codebase measurably leaner, the next stretch is about building on both — a lighter core makes every future feature cheaper to ship, and a voice pipeline that behaves means it’s now safe to build more experiences that depend on it.
-
Voice pipeline rebuilt on the engine’s own API: -659 LOC, zero saturation failures on stress-test inputs
-
Voice failures now self-heal on next launch instead of staying broken, and surface an actionable reason instead of a bare error code
-
Provider setup gets live, debounced model discovery — no more manual refresh or memorized model names
-
Newly added providers auto-activate when nothing else is selected
-
A five-week deductive cleanup streak crosses 900+ lines of dead code removed with zero behavioral change