## 2026.7.2-2 ### Highlights - Local (on-device) dictation now streams through overlapping, silence-aligned, prompt-threaded chunks that are merged into the transcript, instead of joining independent 2-second windows. - The default on-device model is now chosen by hardware, from one resolver used everywhere (startup, tray, `dictate doctor`, the UI, and the installers). - Case- and punctuation-only differences at a streamed chunk seam are now de-duplicated, so overlapping words are not typed twice. - The installed Linux app (`.deb`/AppImage) now registers its launcher and start-on-sign-in autostart entry on first run, pointing at `dictate-ui-shell`. - Clean shutdown on Linux update: `install.sh`/`update.sh` stop the running engine before reinstalling, and the `.deb` ships a `preinst` that stops the engine and desktop shell before unpacking an upgrade. - Autostart/launcher `.desktop` entries written by the frozen app now target `dictate-ui-shell` instead of a `~/.local/bin/dictate` console script that does not exist in packaged installs — the cause of "Dictate doesn't start / the hotkey does nothing" after switching from a source install to the `.deb`. ### Changes - Local (on-device) dictation now streams through overlapping, silence-aligned, prompt-threaded chunks that are merged into the transcript, instead of joining independent 2-second windows. This removes the word-splitting and duplication ("confetti") that made local dictation unreliable: on-device quality now tracks a full-utterance decode while keeping push-to-talk latency low (the perceived wait is the final chunk, not a re-decode of the whole recording). - The default on-device model is now chosen by hardware, from one resolver used everywhere (startup, tray, `dictate doctor`, the UI, and the installers). A CUDA GPU or a capable CPU (~8 GB+ RAM and 8+ cores) defaults to the higher-quality `turbo` model; weaker CPUs default to `small`. No machine is told it runs `turbo` while actually running `small`, and installers no longer force a ~1.5 GB `turbo` download onto a box that will run `small`. - On-device decode quality was restored for dictation (beam search + generous VAD padding so word onsets are not clipped at chunk boundaries), while long note recordings keep their lighter, CPU-tuned decode settings unchanged. - Dictate Pro control-plane baseline (account auth, entitlements, Stripe handling, relay/server). Pre-release scaffolding; the purchase path is not yet wired end-to-end (see `docs/GOALS.md`). - The installed Linux app (`.deb`/AppImage) now registers its launcher and start-on-sign-in autostart entry on first run, pointing at `dictate-ui-shell`. Previously only the source `install.sh` set these up, so packaged installs never started on login despite the docs saying they did. One-time and gated to the frozen app, so it never overrides a user who later disables startup. - `dictate stop` command — stops a running engine via its single-instance lock (SIGTERM, then SIGKILL fallback). Updaters use it so a fresh engine can claim the lock cleanly instead of colliding with a stale daemon. - Clean shutdown on Linux update: `install.sh`/`update.sh` stop the running engine before reinstalling, and the `.deb` ships a `preinst` that stops the engine and desktop shell before unpacking an upgrade. Previously the old engine kept running and held the lock, so the newly installed engine could not start (Windows `update.ps1` already stopped the old process; Linux did not). ### Fixes - The GUI privacy toggle no longer pins `turbo` into config on a weak machine (which previously bypassed the hardware-aware default permanently). - Case- and punctuation-only differences at a streamed chunk seam are now de-duplicated, so overlapping words are not typed twice. - Autostart/launcher `.desktop` entries written by the frozen app now target `dictate-ui-shell` instead of a `~/.local/bin/dictate` console script that does not exist in packaged installs — the cause of "Dictate doesn't start / the hotkey does nothing" after switching from a source install to the `.deb`. - `dictate doctor` now flags launcher/startup entries whose `Exec` target is missing (e.g. a stale pip-era `~/.local/bin/dictate` left behind after moving to the package) and `dictate doctor --fix` repairs them. - Quietened startup log noise: passively enumerating provider key status (done for every backend on startup) no longer logs a validation failure for an unused, optionally-configured backend (e.g. a stale `openai` key while running local faster-whisper). The status is still reported; only the noisy log is suppressed. Explicit user validation and the provider health probe still log. ### Complete contribution record This audited record covers the complete f3e8e2d642e9521b5365b0021bac301aa7d6f39b..df1117c834976c82b64ad8dbfd5eea09e2b43d25 history: 0 in-range PRs + 0 retained seed-only PRs = 0 unique PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact. #### Pull requests