# v2.37.2 — the update button was quietly downgrading your dictation

**Released 2026-09-19.** Upgrade:

```sh
sudo snap refresh yazses     # snap
pipx upgrade yazses          # or: uv tool upgrade yazses
scoop update yazses          # Windows
```

A patch release for one bug, found on a real machine within hours of v2.37.1 shipping.

## The tray's own "Install update" button was deleting an enabled feature

`yazses features enable stt-parakeet` (or any other feature with an optional Python
dependency) installs it with a bare `uv pip install --python <this venv>` — which never
touches a `uv tool install`'s own record of what belongs in that environment. Running
`uv tool upgrade yazses` — exactly what the tray's **Install update** entry and
`yazses update` both run for a `uv tool` install — rebuilds the venv from that record and
removes anything it does not list.

Reproduced in an isolated sandbox before writing any fix: installing `onnx-asr` this way
and then running `uv tool upgrade yazses` printed `Modified yazses environment -
onnx-asr==0.12.0` and the package was gone — even on a version-pinned, otherwise no-op
upgrade. The real-world effect: Parakeet, a materially more accurate STT engine, silently
stopped loading and dictation fell back to a much smaller Whisper model — with nothing
surfaced anywhere except one `WARNING` line in a rotating log file. It read as "the new
release feels worse," because from the outside it was indistinguishable from one.

`system/deps.py::install_packages` now detects a `uv tool`-managed environment and records
the dependency in its `uv-receipt.toml` instead, merged with whatever was already recorded
there. That merge matters on its own: a naive fix (`uv tool install --with X yazses`) would
have introduced a *different* regression, since `--with` **replaces** the whole list rather
than adding to it — confirmed against the real `uv` CLI before shipping, by enabling a
second feature and watching the first one disappear from the receipt.

**`yazses doctor` also had a real gap here**, independent of the fix above: its existing
**STT engine** row only checks whether faster-whisper — the universal fallback — can load,
which reports `OK` in both the healthy case and this silently-degraded one. Doctor now
separately reports when a *configured*, non-default engine's own dependency cannot be
found, naming the exact `yazses features enable <name>` command to fix it.

## For maintainers

`publish-channels.yml`'s `winget` job required its manifest directory to already be
committed on the tag being released — which cannot be true, since its checksums come from
assets this same workflow is still uploading. It failed this way on both v2.37.0 and
v2.37.1's first automatic run. It now generates its own manifest first, the way the
`homebrew` and `aur` jobs already did.

## Upgrading

Your config, models and learning corpus are untouched. If you use Parakeet or Moonshine,
worth a `yazses doctor` after this upgrade to confirm the engine you configured is the one
actually running.
