v2.30.0 — the release that measured its own claims¶
Released 2026-08-24. Upgrade:
176 commits. The theme is uncomfortable and worth stating plainly: a great deal of what YazSes said about itself had never been checked against what it does. Not lies — nobody wrote a false number on purpose. Values that were true once and then quietly stopped being true, claims copied from an assumption, defaults nobody had ever scored. Each was individually invisible, because the thing that would have noticed did not exist.
So this release mostly consists of measuring, and then repairing what the measurements found.
Speaker labels were wrong, and nobody had checked¶
Meeting Mode and yazses transcribe --diarize have labelled who said what since v2.11. That labelling had never been scored against annotated audio. It is now, on AMI:
| Old shipped default | Now | |
|---|---|---|
| DER (collar 0), four-meeting subset | 84.09% | 28.55% |
| Speakers found in a four-person room | 81 to 257 | 4 |
Missed speech and false alarm barely moved between those columns — the segmentation was finding the speech all along. What collapsed was who said it: 68% of scored time went to the wrong speaker, because the clustering split four people into up to 257 clusters. A transcript in that state is not "somewhat inaccurate"; it is unreadable, and that is what the feature was shipping.
The default is fixed, and on the full AMI test split auto-clustering now scores 26.71% DER. Along the way the sweep that found it had to be fixed too — its range excluded the answer, which reads exactly like "nothing helps" — and the harness learned to record which machine produced a number, since it turns out not to be portable.
Seventeen capabilities that existed and could not be reached¶
yazses features listed them. The config keys were real. The code was written and tested. There was simply no caller, so enabling them did nothing and the feature page said "not possible yet". Seventeen are now wired end to end — among them yazses fileopen, yazses jump, whole-utterance undo/redo, and meeting recovery for a post-pass that never finished. The count of capabilities that are wired rather than merely present moved from 85 to 102.
What we hand people said the opposite of what the code does¶
pip install yazses[all]was eight extras short of "all" — no denoise, no Chinese script normalisation, no Silero VAD, no Moonshine, no EMG band, no MCP agent, no pyannote diarization. Two separate guards exemptedallon the grounds that it is an aggregate; neither computed the aggregate.- The example config three packagers install set
model = "tiny.en"against a default ofbase.en, andmax_record_seconds = 90— the ceiling that had been raised because 90 was cutting long dictations off. Copying the file we ship re-introduced the bug that raised it. The README's own block was further out: a silence gate twelve times more sensitive than the default, handed to every reader of the front page. - Flathub advertised 2.29.0 and installed 2.18.2 — eleven releases apart. The guard that kept the store listing current made the stale half harder to notice, because the visible number was always right.
- Parakeet was documented as four times whisper-small's speed. It is about twice.
- The
sileroVAD backend documented itself as avoiding torch. It requires torch and torchaudio unconditionally: choosing it downloads ~3.0 GB, most of it the NVIDIA CUDA stack, onto a CPU-only tool. The cost is now stated where the choice is made. - Three benchmark claims had never been measured, and the WER page could only measure the easy half of what it was warning you about.
--split test-otherexists now, so "your real-world error rate will be worse" is a number instead of a caveat.
Nothing but DEBUG may carry what you said¶
A privacy pass with a rule attached, and a test that enforces it: no log level a normal install runs at may contain your transcript. yazses report promised "never transcripts" and would have included them at DEBUG. redact_patterns scrubbed the text and kept the audio clip, which nothing said. The egress inventory — the guard that is supposed to know every outbound path — could not see the SSH tunnel that carries your dictation to a remote host, and no surface told you that dictation was leaving the machine at all.
The daemon stopped refusing to start¶
A typo in macros.toml. An invalid regex in redact_patterns. One non-UTF-8 byte in vocabulary.txt, which broke every dictation burst. Each of these stopped a working install dead, and each is now a reported problem with a working daemon behind it.
Also¶
yazses meeting --speakers, because the setting that mattered most was unreachable from the command line. Diarization now says so when speaker labels cannot be people rather than inventing them. doctor explains what a redaction pattern does and does not cover. The status poll stopped re-reading the package version five times a second. Subtitles wrap instead of running to 80 characters. And yazses tune no longer calls a proposal "validated" on 4% corroboration.
The full list — every change, with the reasoning — is in CHANGELOG.md.