# v2.31.0 — the release that made its evidence reproducible

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

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

32 commits. v2.30.0 measured claims that had previously rested on assumptions. This release
finishes the other half of that work: it makes the evidence behind those measurements
identifiable, repeatable and difficult to misread.

## Every published number now carries its evidence

The benchmark archive now contains the result behind every number published in the docs,
including per-utterance rows where the aggregate alone was not enough. Each result records
the exact command that produced it and a digest of the corpus in decode order, so two hosts
cannot silently compare different subsets while both report “200 utterances”. Linux runs
across three machines reproduced the same corpus digest.

The archive also gained paired significance analyses. They settle two choices the raw tables
could not: beam 2 reaches the measured accuracy of beam 5 on both tested splits at lower cost,
while beam 1 loses measurable accuracy on clean audio.

## The latency governor stopped fighting the configured engine

The governor hardcoded beam 5 on its normal-load path. With the shipped configuration that
missed the engine already in the pool and started loading a second copy of the same model in
the background. It now preserves `[stt] beam_size`, reuses the existing engine, and uses the
measured beam-2 policy when the machine is busy.

The diarization path received the same kind of correction: supplying a speaker count no
longer silently disables the tuned clustering threshold. Documentation that compared results
from different thresholds has been withdrawn, and the missing like-for-like measurement is
now archived.

## Reports preserve record boundaries and privacy

Log views no longer begin halfway through a multiline record, and support reports discard an
entire DEBUG record rather than removing only the line containing the level marker. A DEBUG
traceback can therefore no longer leave its continuation lines behind in a report that
promises to exclude them.

## Packaging and release checks now exercise the shipped product

- The macOS application no longer imports a Linux backend when `yazses doctor` starts.
- The `.dmg` inspector reads the app's own metadata instead of mistaking a bundled Qt
  framework version for the YazSes version.
- Intel macOS can resolve the TTS, Silero, read-back and `all` extras again.
- Windows CI installs the dependency group needed by the tests it runs.
- Release workflows match every future `v*` tag instead of carrying a list of known majors.
- Release completeness verifies that published artifacts have servable attestations, not
  merely that an attestation step ran.

Also fixed: `verify` no longer tells a silent room to lower a threshold already at its
minimum; feature help names the command that enables a capability; pyannote access errors
name both gated models and the current login command; and six surfaces now acknowledge the
pyannote backend that already ships.

The full list — every change, measurement and limitation — is in
[CHANGELOG.md](https://github.com/MSKazemi/yazses/blob/main/CHANGELOG.md).
