Runtime cpal stream errors used to stop at the recorder log line, leaving the coordinator in an active recording phase until it processed empty audio. Add a small runtime-error channel from Recorder to the coordinator and abort only Starting/Listening sessions with an error capsule.
Constraint: Issue #59 asks for minimal handling of recorder runtime failures.
Rejected: Reworking recorder/coordinator ownership model | broader than needed for a single runtime error path.
Confidence: high
Scope-risk: narrow
Tested: cargo check --manifest-path openless-all/app/src-tauri/Cargo.toml
Tested: cargo test --manifest-path openless-all/app/src-tauri/Cargo.toml recorder_runtime_error_aborts_active_session
Tested: git diff --check
Settings credential labels, capsule control aria labels, and duration suffixes still used inline literals after the i18n framework landed. Move those user-visible strings behind existing locale resources without changing provider or history behavior.
Constraint: Issue #65 asks for minimal i18n alignment only.
Rejected: Broad text audit or component refactor | unnecessary for the reported literals.
Confidence: high
Scope-risk: narrow
Tested: npm run build
Tested: git diff --check
Credentials writes use a load-modify-save JSON path, so concurrent Settings debounce saves could read the same stale root and overwrite each other. Guard the CredentialsVault file accessors with one process-wide mutex to keep read-modify-write operations ordered.
Constraint: Issue #61 asks for minimal protection around the existing JSON vault path
Rejected: Atomic compare-and-swap rewrite | broader than needed for current single-process Tauri writes
Confidence: high
Scope-risk: narrow
Tested: cargo check --manifest-path openless-all/app/src-tauri/Cargo.toml
Tested: git diff --check
Store the remaining transient UI timeout handles in refs so Settings About copy feedback and Onboarding delayed permission refresh do not call setState after their components unmount.
Constraint: Issue #64 asks for minimal setTimeout handle cleanup without changing UI behavior
Confidence: high
Scope-risk: narrow
Tested: npm run build
Tested: git diff --check
Before posting Cmd+V on macOS, check the current Accessibility trust state. If permission has been revoked, keep the transcript on the clipboard and reuse the existing CopiedFallback path instead of recording a successful insertion.
Constraint: Keep issue #62 fix minimal and avoid adding unreliable target-control paste verification
Rejected: AX focused-value readback with timeout | broader and brittle across apps/web editors
Confidence: medium
Scope-risk: narrow
Tested: cargo check --manifest-path openless-all/app/src-tauri/Cargo.toml
Tested: git diff --check
Not-tested: Live macOS Accessibility revoke flow on this host
Windows can deliver modifier-only key events to the focused WebView without the low-level hook seeing the same edge, so the main window now forwards only hotkey-relevant DOM key events to the coordinator. Both native hook and window-forwarded events share the same coordinator edge gate so a working hook does not double-trigger toggle sessions.
Constraint: Issue #85 requires OpenLess foreground Right Control to reuse existing pressed/released/cancel semantics without changing global hook behavior
Rejected: Start dictation directly in the frontend | would duplicate coordinator state-machine semantics
Rejected: Keep a separate window-held flag | review found it can double-trigger toggle mode when both DOM and low-level hook report the same physical press
Confidence: medium
Scope-risk: moderate
Tested: cargo check --manifest-path openless-all/app/src-tauri/Cargo.toml
Tested: cargo test --manifest-path openless-all/app/src-tauri/Cargo.toml window_key_matcher_mirrors_windows_trigger_aliases
Tested: npm run build
Tested: git diff --check
Not-tested: Physical Windows foreground Right Control on this Linux host