Patches:
- Wire tauri://destroyed listener through onDestroyed callback so
taskbar-close keeps isOpen in sync (was: defined onOverlayClosed
but never wired).
- Drop Rust-side opacity restore in apply_state; JS event handler
reads useOverlayStore.getState().opacity and restores. Fixes
hotkey-from-50%-opacity stuck at 100%.
- Replace event-based hotkey-registration signal with pull-style
AppState.hotkey_status + get_hotkey_status command. Eliminates
the listener-not-yet-registered race.
- Remove unused LogicalPosition/LogicalSize imports (would have
failed tsc under noUnusedLocals).
- Remove unused urlError selector in OpenOverlayButton (same).
- Replace flushPendingPersist with flushPendingPersistSync that
fires the write fire-and-forget; document the bounded staleness
trade-off (<= 300ms loss on crash).
- Drop broken docs/screenshot.png reference from README.
- Collapse Task 18 down: syncClickThroughCache now lives in Task 9
alongside lib/overlay.ts; Task 18 only touches the live-wiring
hook to keep the cache in sync on UI-side toggles.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Captures the brainstormed design for the two-window overlay app:
architecture, frontend structure, Rust backend split, persistence
model, click-through escape hatch, and the manual verification
checklist that defines "Phase 1 done."
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>