Skip to content

v2.28.0 — it now tells you what broke, and stops lying about the rest

Released 2026-08-18. Upgrade:

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

The previous release was about YazSes describing itself accurately. This one is about what it does when something goes wrong — which, until now, was mostly nothing. A failed injection wrote a line to a log file nobody opens and left the tray icon idle blue. The person holding the key learned that dictation had failed by noticing that no text appeared.

When something breaks, YazSes now tells you

A failure in capture, injection, or a meeting is classified and shown as a desktop notification naming both the fault and the command that addresses it — "Run yazses doctor to check the injection backend" rather than silence. Repeats of the same fault are suppressed, because five identical toasts teach you to dismiss YazSes notifications, which costs more than the repeats are worth.

Where YazSes cannot identify the fault, and only there, the notification carries a [Prepare a bug report] button. It opens GitHub's issue form pre-filled in your browser. YazSes itself sends nothing — the request is made by the browser, to a page you read and submit yourself, which is why this adds no entry to the egress inventory. A recognised failure gets no button, because it already carries its own fix and an issue about a missing ydotool helps nobody.

The notification that never went away

Shipping the above surfaced a defect underneath it. A toast carrying a button runs notify-send --wait, which blocks until someone clicks — and --urgency critical means it never expires on its own. That wait ran on a daemon thread with its two-minute cap inside that thread, so the cap only fired in a process that outlived it. The long-lived daemon does. No short-lived process can: a CLI command, yazses verify, or one test run exits in seconds, the thread is abandoned without unwinding, nothing ever kills notify-send, and the pop-up is orphaned onto your desktop until you log out.

Found on a real machine with 33 of them stacked up, each describing an injection failure that had never happened. In-flight toasts are now tracked and killed when the process that raised them exits.

A bug report could carry your personal dictionary

yazses report redacts paths and identifiers from your config, and did not redact free text. Your initial_prompt and personal vocabulary are exactly where proper nouns live — colleagues' names, employers, project code names — and they went into the bundle in clear. Free-text config values are now redacted too.

Spoken git and shell commands used the words you said

push to main rendered a bare git push, discarding the branch you named — so standing on a different branch pushed that one instead, and force push to main did it destructively. shellpipe had the same shape: "search for the word error" searched for the word "for". Both now use the ref and the term you actually said.

Four more settings in the window, chosen for how each one fails

Model, language, compute type, vocabulary, injection backend, the no-text-target guard, and pre-speech padding are now editable in the Settings window. Each one refuses rather than writes when the value cannot work, because the runtime failure names the wrong cause: a mismatched model/language pair produces fluent English nonsense with no error at all, and an unsupported compute type is reported as a missing model.

Also

  • Meeting Mode from the tray icon. It is the one capability with no key to hold, so the icon was the only surface that could start or end one without a terminal. When it cannot, the menu says why, in the daemon's own words rather than a paraphrase.
  • yazses tune --limit N, taking the newest clips, and a time estimate instead of "a while".
  • "Speaker labels unavailable" stopped recommending a 45 MB download that does not fix it.
  • The Snap Store showed a different logo from every other surface — a white square with a blue speech bubble that appears nowhere else in the project.
  • The Windows Settings window could not open, and explained itself where nobody could see.
  • Every docs link in a user-visible string is now guarded to resolve to a real page. Three broken ones shipped in three days; a URL compiled into the .exe fails in front of a user who was already stuck.
  • The clipboard history named its ends. list numbers newest-first, but "the first thing I copied" means the oldest — both readings are correct English and they point opposite ways, so the list now says which end is which rather than leaving you to guess from a number.

Full detail in the changelog.