Bug fixes from a code review. Ten defects fixed; the full review, including what was deferred and why, is in reports/code-review-2026-09.md.
You can record a key combination again
The hotkey recorder saved the first modifier you pressed on its own. Pressing Ctrl+Opt+Cmd+; the usual way, modifiers first, stored "LCtrl" and stopped recording, so a double tap then sent a lone Control. A single modifier now becomes the binding only when you release it with nothing else pressed; a combination is saved when you press its key.
Detection
- A raised sensitivity no longer deafens the detector. 0.2.0 lowered the onset ceiling to 0.7 g. Push the threshold up to that ceiling and every tap that crossed the threshold was also over the ceiling, and got thrown away without a warning. The ceiling now stays above the threshold.
- A timing setting under the 100 ms debounce no longer makes a double tap impossible. The settings tidy-up could leave the join band below the spacing the sensor can resolve.
- The sensor stops reconnecting every 3 seconds when it opens but delivers no samples. It now backs off as it was meant to: 1, 2, 4 … 32 s.
- Revoking a permission now stops detection. Removing Input Monitoring or Accessibility while Tunk ran left it armed but blind to typing, so a bound Shortcut could fire on keystrokes. It now stops, and re-arms when the grant comes back.
Actions
- One unreadable binding no longer wipes the rest. Settings written by a newer build and read by an older one used to reset every binding to the default.
- The Shortcuts list is no longer cut short. A truncated list made Tunk refuse your Shortcuts as deleted.
- Shortcuts whose names start with
-now run. They were parsed as command-line flags. - The Fn glyph pastes back. The panel shows Fn as the globe; pasting that into the recorder failed.
- The Min gap slider stops at 100 ms, instead of offering values Tunk rewrote on the next launch.
Still signed ad hoc
This build is not signed with a Developer ID. macOS refuses it on a machine that did not build it until you open it from the right-click menu, and it asks for both permissions again after every update, because a permission grant is tied to one signature.
416 tests pass. The 11 new ones cover the detector and binding fixes; the recorder, sensor, slider and Shortcuts fixes are UI, threading and process code, verified by building the app and, for Shortcut names, by running the real shortcuts command. Detection on the recorded corpus is unchanged: 101 of 123 gestures, identical to 0.2.0.