# v2.15.1 — `err` is a verb

**Released 2026-08-07.** Upgrade:

```sh
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](https://github.com/MSKazemi/yazses/issues/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:

```toml
[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.
