# v2.51.0 — Glance-Type says what works on your session, clearer doctor reports, and Mandarin safety checks

**Released 2026-11-06.** 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`). Most of this release makes YazSes say plainly what it can and
cannot do, where it used to stay silent or report the wrong thing.

## What you will notice

- **Glance-Type lists what it can do on your session.** `yazses gaze status` prints a list of what you might
  try: dictating to the window you look at, "focus this" / "minimize this", "close this", gaze calibration and
  pointer movement. Pointer movement is a separate feature and never creates a gaze target. `doctor`, `status`
  and the hands-free panel show a one-line summary on the `Gaze target` row. On Wayland nothing is routed: gaze
  commands are refused with a notification, and "close this" is never sent to the focused window. On X11 the
  existing behaviour is unchanged, and it is now printed: "close this" on a window you are not looking at
  closes the focused window under the default `refuse_destructive_fallback = false`.
- **`doctor` and `gaze status` say when the click observer failed to start.** With `[gaze_refine]` enabled (it
  is off by default), a refused Windows hook, a macOS event tap blocked by missing permissions, or a lost X11
  display used to show as "registered". Both commands now give the reason.
- **A feature toggle can no longer half-apply a language profile.** For example,
  `yazses features enable chinese-script` on the default English install used to write a config that refused
  dictation at the next start. `features enable` and Settings now refuse, write nothing, and point to
  `yazses language set zh-CN` / `zh-TW`.
- **Reopening YazSes on macOS replaces a stale daemon.** After an upgrade, or once Input Monitoring is granted,
  opening the app restarts a daemon that is older than the app or was started without the permission. It only
  does this while the daemon is idle, never during a dictation or a meeting.

## Fixes

- **Chinese meetings.** Meeting minutes no longer overflow the summariser's context: each CJK character is now
  counted at its real token cost, not at the English rate of three characters per token. A failed summary step
  no longer puts a space between two Chinese summaries.
- **Windows Store (MSIX) build.** The `doctor` advice for the camera and the microphone no longer describes the
  `.exe` build.
- **Hands-free and recording.** A tap on a microphone that failed to open no longer latches a turn. Recording
  past `max_record_seconds` now logs a warning instead of being cut without a trace. An unknown engine next to a
  Parakeet or Moonshine model falls back to `base.en` and says why.
- **Typing.** Voice punctuation no longer doubles punctuation the decoder already added. On Wayland, wtype key
  combos with `meta`, `control`, `enter`, `esc` or `del` work. `send-to` refuses C1 control characters.
- **IPC and MCP.** On Windows, a malformed daemon reply is now one typed IPC error, as on Linux and macOS.
  Requests that hold non-finite numbers or non-scalar ids get a valid parse error. MCP `ask_human` waits as
  long as the daemon is listening.
- **Doctor.** On Linux it no longer reports keyboard capture as OK when only a game controller is readable. It
  no longer reports "multiple yazses on PATH" for a directory or a non-executable file.
- **Settings, overlays and meetings.** On Windows, Settings no longer reports a successful restart as failed.
  The overlay windows have names that screen readers can announce. Meeting Mode live lines are stamped when the
  utterance began. `yazses gaze calibrate` no longer saves a broken calibration or hangs. `yazses transcribe`
  reads file names that contain a colon as local files. On macOS, a stop during hotkey start-up is no longer
  lost.

## Not yet verified

- **Send to Claude / Codex** now keeps a "never sent" validation record (ADR-031 §5). It is empty because no
  hand-off has yet been tried against a real Claude or Codex app, and `yazses features info sendto` says so.
- **Mandarin voice commands** are listed on the Chinese voice typing page, marked *unreviewed* and experimental.
  No native speaker has reviewed the phrases yet.

Also in the repository, not in the product, and none of it changes what the software does:

- English command parity is pinned to an independent record of the old grammar.
- The `.mcpb` bundle manifest is validated against the MCP Bundle spec schema.
- Tests now enforce the CI cache, permission and shared-setup rules, and Dependabot now updates the shared setup
  action's pins.
- `bench-stt.py` refuses to score an engine fallback, and every test thread join is bounded.
- There are new research notes and decision packets.

What was checked: the full test suite, ruff, mypy and the strict documentation build on the release commit, and
every CI leg on `main` before this release was cut, including Windows, macOS, Linux arm64 and FreeBSD.

What was not checked: Glance-Type and the click observer on real GNOME, KDE, macOS and Windows sessions (the
GNOME and KDE findings come from documentation and toolkit source), the macOS daemon replacement on a real Mac,
the MSIX build on a real Store install, the Settings refusal in a real Qt window, screen readers, real Claude or
Codex apps, and real Whisper output for the punctuation fix.

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