# v2.48.0 — biosignal switches (off by default), a lighter-memory option, and honest language docs

**Released 2026-11-02.** Upgrade:

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

Restart the daemon afterwards (`yazses restart`). Nothing changes for an existing install until you turn
something on: every new feature below is off by default.

## Fixes

- **Persian (and other non-Latin) text was silently damaged.** The `[compute]` calculator (on for new
  installs) replaced a Persian sentence with a number, so "سال 1403 - 1404" was typed as `-1`. Russian and
  Chinese sentences were affected the same way. `[corrdict]` scored every non-Latin pair as a perfect
  mishearing. `[stt] language = "fa-IR"` passed the check and then failed at the first decode; region tags
  (`fa-IR`, `pt-BR`, `zh-TW`) are now folded everywhere. The Arabic question mark `؟` now ends a sentence for
  "delete the last sentence", `condense`, `reflow` and `sembr`. `yazses doctor` warns when dictation is not
  English but `[recimport]` or `[meeting]` language is still `en`.
- **22 translated pages promised voice commands their language does not have.** Voice commands such as
  "save file" exist in English and Mandarin only; a sentence in another language is typed as text, while
  dictation in that language works with `[stt] language` and a multilingual model. The German and Indonesian
  pages were checked against the real command classifier; the other 20 were corrected by the same rule.
  The wording is not yet checked by native speakers.
- Documentation sweep: about twenty claims that described the repository as it was before 2.47.0 now match
  it (benchmark harness location, the pipx repair, Hands-free button names, the Windows installer, the
  Android core modules, the hosted-demo wording).

## New, and off by default

- **Biosignal switches.** An opt-in `yazses.biosignal` package turns raw muscle, eye or brain-signal
  samples (a synthetic source, a recording, an OpenBCI or Muse board through BrainFlow, an LSL stream, a
  NeuroSky headset, a BITalino kit or a Myo armband) into a small set of events: a graded squeeze, a blink
  or double blink, and a jaw clench. A quality gate answers flatline, saturation, mains interference, drift
  and dropped samples with silence, and a stream-integrity guard closes the switch on dropped packets or
  clock problems. `file:` replays EDF, EDF+, BDF and XDF recordings. See
  [Use a muscle, blink or jaw-clench switch](../how-to/biosignal-switch.md).
  **None of it has been used on a real person or real hardware yet.** Each device was built against its
  published protocol and tested with fixtures and fakes. Treat it as a preview.
- **`[residency] latency_keep_alive_s`.** With `[latency]` on, the governor can keep a second, smaller
  model loaded. Set this to a number of seconds and that extra model is released once it has been idle that
  long and reloaded when needed. Default `0` changes nothing. How much memory this gives back has not been
  measured on a real machine.

## Under the hood

- **sherpa-onnx 2.0.1** (a major version, used for speaker labelling), PyAV 18.1.0 and the routine
  dependency group were updated. PySide6 is held below 6.12 and the docs plugin below 1.6 on purpose; the
  reasons are in the changelog.
- Documentation-site pages gained their own descriptions and titles that fit a search result.

What was checked: the full test suite (35,425 passed on the tree before the release commit), ruff and
mypy are clean, the documentation builds with warnings as errors, and the sherpa-onnx upgrade was run on a
recorded clip with both versions and gave identical segments.

What was not checked: any biosignal device on real hardware, the memory the new option frees, and the
translated sentences by native speakers.

The complete list is in the [changelog](https://github.com/MSKazemi/yazses/blob/main/CHANGELOG.md).
