Some checks failed
check / cargo check (macos-latest) (push) Has been cancelled
check / cargo check (ubuntu-22.04) (push) Has been cancelled
check / cargo check (windows-latest) (push) Has been cancelled
check / svelte build + lint (push) Has been cancelled
audit / cargo audit (push) Has been cancelled
audit / npm audit (push) Has been cancelled
settings.theme and preferences.theme overlap: the legacy localStorage field still drives two SegmentedButton bindings in SettingsPage.svelte while preferences.theme is the canonical Tauri-persisted store. A migration \$effect in the four route +layout files syncs the legacy value into preferences whenever it changes. Resolution requires touching SettingsPage.svelte (2 484 LOC), src/lib/stores/page.svelte.ts, four route layouts, and the localStorage migration system. That is moderate-risk frontend work, not pre-launch polish, so it lands in KNOWN-ISSUES with a concrete plan and is deferred from v0.1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
70 lines
5.3 KiB
Markdown
70 lines
5.3 KiB
Markdown
# Known issues
|
|
|
|
Tracked limitations and partial implementations in the current codebase. Each entry points at the code that owns the gap so future work can find it.
|
|
|
|
## Power management
|
|
|
|
### KI-01 — macOS App Nap guard pending Apple Silicon runtime verification
|
|
|
|
**Status:** macOS code path compiles and the registry tests pass, but runtime behaviour against actual OS idle-throttling has not been confirmed on Apple Silicon hardware. Also tracked internally as **RB-08**.
|
|
|
|
**Source:** [`src-tauri/src/commands/power.rs:73`](src-tauri/src/commands/power.rs#L73) (`PowerAssertion::begin`), [`src-tauri/src/commands/power.rs:140`](src-tauri/src/commands/power.rs#L140) (`objc_bridge`).
|
|
|
|
**Impact:** Long live-dictation sessions on macOS may still be slowed or paused by the OS until verified end-to-end on hardware.
|
|
|
|
**Workaround:** Keep the app window focused, or move the cursor periodically. For testing, App Nap can be disabled globally with `defaults write NSGlobalDomain NSAppSleepDisabled -bool YES` (revert with `-bool NO`).
|
|
|
|
### KI-02 — Linux power assertion is a no-op
|
|
|
|
**Status:** `PowerAssertion::begin` does nothing on Linux. The planned implementation (systemd-logind / GNOME idle inhibitor via `org.freedesktop.login1.Inhibit`) is described in the file-level doc but not wired up.
|
|
|
|
**Source:** [`src-tauri/src/commands/power.rs`](src-tauri/src/commands/power.rs).
|
|
|
|
**Impact:** Long sessions can be paused by the compositor's idle hooks (screen lock, suspend timers) on KDE, GNOME, Hyprland, Sway, etc.
|
|
|
|
**Workaround:** Raise the system idle / screen-lock timeout while dictating, or wrap launch with `systemd-inhibit --what=idle:sleep:handle-lid-switch ./run.sh`.
|
|
|
|
### KI-03 — Windows power assertion is a no-op
|
|
|
|
**Status:** `PowerAssertion::begin` does nothing on Windows. The planned implementation (`SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED)` on begin, `ES_CONTINUOUS` alone on end) is described in the file-level doc but not wired up.
|
|
|
|
**Source:** [`src-tauri/src/commands/power.rs`](src-tauri/src/commands/power.rs).
|
|
|
|
**Impact:** Long sessions can be paused by Windows sleep policies.
|
|
|
|
**Workaround:** Set the active power plan's sleep to "Never" while dictating.
|
|
|
|
## Cloud providers
|
|
|
|
### KI-04 — `magnotia-cloud-providers` crate is not user-exposed
|
|
|
|
**Status:** The crate is a declared workspace dependency in [`src-tauri/Cargo.toml:36`](src-tauri/Cargo.toml#L36) and compiles into the binary, but no Tauri command, page, or settings field invokes `store_api_key` / `retrieve_api_key`. There is no UI to enter or store a cloud API key in the current build.
|
|
|
|
**Source:** [`crates/cloud-providers/src/keystore.rs`](crates/cloud-providers/src/keystore.rs). The `TODO` in the doc comment captures the planned migration to OS-native credential storage (the `keyring` crate or equivalent) before the feature is wired up.
|
|
|
|
**Impact:** None for end users today (no exposed surface). When the feature is wired post-launch, cross-restart persistence must land before any "save key" UX ships, otherwise saved keys reset on every restart.
|
|
|
|
**Workaround:** N/A.
|
|
|
|
## Frontend
|
|
|
|
### KI-05 — Dual theme system: `settings.theme` and `preferences.theme` coexist
|
|
|
|
**Status:** Theme is stored twice. The legacy `settings.theme` ("Dark" / "Light" / "System", localStorage-only) is bound to two `SegmentedButton` controls in `SettingsPage.svelte`. The canonical `preferences.theme` ("dark" / "light" / "system", Tauri-persisted via `save_preferences`) is what the DOM and runtime actually consume. A migration `$effect` in `src/routes/+layout.svelte` (and the secondary `+layout@.svelte` files for `/preview`, `/viewer`, `/float`) syncs `settings.theme` → `preferences.theme` whenever the legacy value changes.
|
|
|
|
**Source:**
|
|
- [`src/lib/stores/page.svelte.ts:61`](src/lib/stores/page.svelte.ts#L61) (legacy default: `theme: "Dark"`)
|
|
- [`src/lib/stores/preferences.svelte.ts:30`](src/lib/stores/preferences.svelte.ts#L30) (canonical default: `theme: "dark"`)
|
|
- [`src/routes/+layout.svelte:61-68`](src/routes/+layout.svelte#L61) (migration `$effect`)
|
|
- [`src/lib/pages/SettingsPage.svelte:1118`](src/lib/pages/SettingsPage.svelte#L1118), [`:2360`](src/lib/pages/SettingsPage.svelte#L2360) (UI bindings still on the legacy field)
|
|
|
|
**Impact:** No user-facing bug; theme switching works. The cost is code complexity and a small race window where preference fan-out can lag behind a `settings.theme` change. The `$effect` is lightweight (string compare plus a debounced persist when the mapped value differs), not a hot-loop performance problem despite earlier framing.
|
|
|
|
**Resolution (deferred):** Switch the two `SettingsPage` bindings to `preferences.theme` with mapped options, retire the migration `$effect` in all four route layouts, drop `theme` from `SettingsState`, and add a one-shot localStorage migration that copies any historical `settings.theme` into `preferences` on first run after the cleanup. Touches ~5 files including the 2 484-LOC `SettingsPage.svelte`; deferred from the v0.1 polish pass to avoid a moderate-risk frontend change immediately before launch.
|
|
|
|
**Workaround:** N/A.
|
|
|
|
## How to add an entry
|
|
|
|
When shipping a partial implementation or known limitation, add a `KI-NN` entry here with the four standard fields: **Status**, **Source** (file:line), **Impact**, **Workaround**. Link from the affected module's doc comment back to this file by ID.
|