v0.8.4 — Pre-warmed picker + per-binding 'In picker' + a11y
Pre-warmed picker + per-binding "In picker" + VoiceOver polish
Three small upgrades that make the tone picker feel native.
What's new
- Pre-warmed panel — the picker NSPanel is constructed at app launch instead of on first hotkey press, so first open is near-instant. The ~30–60 ms setup cost moves off the hotkey path.
- "In picker" per binding — every saved rewrite binding in Settings now has an opt-in checkbox to also surface it as a row in the popup. Pick saved instructions (with your custom override prompts) without remembering hotkeys.
- VoiceOver labels — every picker row announces its name + ⌘ shortcut hint + selected state; the container itself announces "Tone picker — Type to filter, arrow keys to navigate, Return to apply, Escape to cancel".
How to use
- In picker checkbox: Settings → Contextual rewrite → expand any binding row → tick "In picker" (default ON). Open the picker with your tone-picker hotkey; saved bindings appear below built-in tones.
- Search: type to filter; bindings match by their display name + tone label.
- Quick-select: ⌘1–9 commits the Nth row directly, including bindings.
Compatibility
- Bindings persisted by v0.8.3 and earlier decode with
showInPicker = trueviadecodeIfPresent— zero migration cost, round-trip safe. - Users who want a binding hidden from the picker can untick it in Settings.
Install
- Sparkle OTA: v0.6.1+ users auto-update from inside the app.
- Fresh install: download the DMG below → drag to /Applications.
Verify
- App: 257 Swift / 54 suites GREEN (pre-existing flaky
SupabaseAuth.sendCode-no-configtest ignored — passes 10/10 in isolation, fails ~1× per full suite since v0.5.x). - Build: signed (Developer ID), notarized + stapled (DMG + Sparkle zip), EdDSA-signed appcast.
Roadmap
- v0.8.5 — Multi-variant rewrite (generate 3 drafts in one call, pick between them via Preview HUD).