Skip to content

Phona 1.6.0

Choose a tag to compare

@basal-john basal-john released this 07 Sep 09:23
· 10 commits to main since this release
6a50a08

Five changes since 1.5.0. One of them is a crash that took out five dictations in a week.

The route-change crash is fixed

installTapOnBus threw an uncatchable NSException the moment a dictation started after the input device's format had gone stale, which is what a route change leaves behind. Swift cannot catch that exception, so the app died. Five crashes in one week, all the same stack.

The engine is now reset before the tap is installed, and the channel count is checked alongside the sample rate, so the tap is never handed a bad format in the first place.

A slow dictation no longer looks like a dead one

Under real memory pressure a dictation can run 10 to 70 seconds, and until now that looked exactly like one that had died: the HUD sat on "working" with nothing either way. Past 8 seconds the menu bar says it is still working. It never overwrites an unread clipboard warning from an earlier dictation.

Copy to clipboard stopped destroying images silently

Copy to clipboard was the one output mode that could throw away a copied image or file without saying so. Both insert modes warned, because both went through the code that notices. It now warns too, and so do the two paths where a paste is attempted but has nowhere to land, which had been computing the warning and then discarding it.

Every path that replaces the clipboard now goes through one place.

A fresh install gets the models the docs describe

The shipped defaults still named Whisper large-v3-turbo and the 4-bit Qwen, months after everything else moved to Parakeet and the 8-bit Qwen. A fresh install therefore ran a pair that had never been measured against the correction prompt, and nothing said so.

Now corrected, and held by a test that reads the model ids out of the README and compares them to the defaults. device_open_timeout, model_update_check and self_correction were documented and missing from the config file a fresh install writes, which the same test caught.

If you already have a config.json, nothing changes. Your models are whatever it names.

The audit names the words the guard keeps rejecting

The guard records which name triggered a rejection and the audit never showed it. A name that recurs, PR or CI, is now called out separately from a one-off, because a repeat argues for adding it to your dictionary rather than for coincidence.

Also

  • The README is a third of its previous length. The reasoning behind each rule moved to docs/decisions.md with its measurements intact, and the troubleshooting section to docs/troubleshooting.md
  • docs/engine.md now says which parts belong to the CLI rather than the app, and lists seven commands it had never mentioned
  • Ten tests for the clipboard path, which had none

Install

Download Phona-1.6.0.dmg, drag Phona to Applications, then run ./install.sh from this repo for the speech engine. Already running Phona? ./update.sh does everything and leaves your settings, history and permissions alone.

The app is signed ad-hoc rather than with a paid Apple Developer ID, so macOS warns the first time. Right click, Open, then Open again. Once only.

Apple Silicon and macOS 14 or later.