Skip to content

v2.15.1 — err is a verb

Released 2026-08-07. Upgrade:

pipx upgrade yazses          # or: uv tool upgrade yazses

A patch release with two fixes, both of which came from tightening something that had been left loose.

Dictation stopped deleting "err"

err shipped in the default [filters.disfluency] filler_words — a reasonable-looking entry, since people do write "err, I'm not sure". It is also an ordinary English verb, and disfluency filtering is on by default, so ordinary dictation quietly lost a real word:

"To err is human"             →  "To is human"          ❌ before
"Err on the side of caution"  →  "on the side of caution" ❌ before

Both are correct now.

This was not part of the sentence-initial filler chain fixed in v2.15.0, and none of those fixes touched it — "To err is human" is lowercase and mid-utterance, so plain filler removal did it, with no capitalisation guard or position-0 rule involved. It had been there the whole time.

The principle applied is the one settled in #120: deleting a real word from someone's dictation is worse than leaving a filler in. If you genuinely say "err" as a hesitation and want it stripped, add it back:

[filters.disfluency]
filler_words = ["um", "uh", "er", "err", "hmm", "like", "you know"]

Contract 4.0.0 → 5.0.0 — shared text behaviour changed, so the golden vectors were regenerated and the Android port inherits the fix.

The type gate is real now, and it found a crash

mypy src had been carrying a 73-error backlog across 21 files. A gate that is always red cannot tell a new mistake from the pile, so it was not a gate at all. It is now zero errors, and ruff covers scripts/ too — it had silently drifted out of scope and was hiding two errors nobody could see.

Almost all 73 were annotation debt rather than defects. One was real: yazses update did " ".join(status.command) where command is list[str] | None. It is None for any install method that has no upgrade recipe. Today detect_install_method() only returns snap/uv/pipx/pip, so it was unreachable — but APT is a shipped install channel, and the day an apt branch is added it would have raised a TypeError instead of a helpful message. It now names the install method that has no automatic upgrade and exits non-zero, with a regression test verified to fail without the guard.

Upgrading

Nothing to do beyond upgrading. No configuration changes, no migration. If you had worked around the err bug by editing filler_words, your edit still applies — remove err from your list only if you want the new default behaviour.