Files
Lumotia/KNOWN-ISSUES.md
Jake 26c7307607
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
agent: lumotia-rebrand — docs, scripts, root config, residuals
Phase 9 of the rebrand cascade. Sweep covers everything the Phase 8
frontend pass deliberately skipped: docs/, root markdown, scripts,
Cargo.toml descriptions, code comments that survived earlier
word-boundary sed, plus a handful of identifiers caught on the final
verify pass.

transcription-app changes:
- README.md, HANDOVER.md, KNOWN-ISSUES.md, run.sh — magnotia/Magnotia
  -> lumotia/Lumotia.
- docs/ — sweep across all subdirs except docs/handovers/ (preserved
  as immutable audit trail). Includes architecture-map references
  to magnotia_core::*, magnotia_storage::*, etc. now pointing at
  lumotia_*; dev-setup.md tracing output examples (lumotia_startup
  target); brief/ + superpowers/ + issues/ + whisper-ecosystem/ +
  audit/.
- Cargo.toml descriptions on 9 crates (core, audio, cloud-providers,
  hotkey, llm, mcp, plus referenced others).
- crates/core/src/{error,hardware,recommendation,paths}.rs +
  crates/audio/src/wav.rs + crates/llm/src/model_manager.rs +
  crates/cloud-providers/src/keystore.rs + crates/mcp/src/lib.rs —
  doc comments and a model-manager user-agent string.
- Caught on final pass: BroadcastChannel("magnotia_task_sync") -> ...
  ("lumotia_task_sync"); magnotia_locale i18n localStorage key
  renamed + migration shim added; CSS keyframe names
  magnotiaPulse / magnotiaBar / magnotiaFade renamed in the design-
  system kit; magnotia_viewer_item / magnotia_viewer_mode handoff
  keys renamed in HistoryPage + viewer/+page.svelte; src/assets/
  wordmark.svg text.
- src-tauri/src/lib.rs comment cleanup ("magnotia era" was sed'd
  to "lumotia era" earlier — restored).

Preserved (intentional):
- crates/core/src/paths.rs — keeps "magnotia" / "Magnotia" / ".magnotia"
  legacy detection strings in legacy_and_target_paths() so the
  migration shim can still find user data from the magnotia era.
- src/lib/stores/{page,focusTimer}.svelte.ts + src/lib/i18n/index.ts
  — migration call sites reference the legacy magnotia keys
  deliberately.
- docs/handovers/ — historical audit trail.

cargo build --workspace passes. npm run check: 0 errors / 0 warnings
(3958 files). cargo test --workspace: 339 pass / 0 fail.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:38:03 +01:00

7.2 KiB

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 (PowerAssertion::begin), src-tauri/src/commands/power.rs:140 (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.

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.

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 — lumotia-cloud-providers crate is not user-exposed

Status: The crate is a declared workspace dependency in src-tauri/Cargo.toml:36 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. 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.themepreferences.theme whenever the legacy value changes.

Source:

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.

Engine architecture (Phase A)

KI-06 — transcribe_file and live-transcription commands not yet rewired through Orchestrator

Status: Phase A introduced the TranscriptionProvider async trait (crates/cloud-providers/src/provider.rs), EngineRegistry (crates/transcription/src/registry.rs), and Orchestrator plus LocalProviderAdapter (crates/transcription/src/orchestrator.rs). The abstractions compile, are object-safe, and pass unit tests against a mock provider. The existing dictation path (src-tauri/src/commands/transcription.rs) still calls LocalEngine::transcribe_sync directly via pick_engine, not through the orchestrator. Live and meeting commands likewise route around the orchestrator.

Source: src-tauri/src/commands/transcription.rs:29 (pick_engine), src-tauri/src/commands/live.rs, src-tauri/src/commands/meeting.rs.

Impact: None at runtime. The orchestrator path is dormant until a follow-up commit migrates the call sites. Cloud providers (Phase G) cannot be exercised end-to-end until this rewire lands.

Resolution (deferred): Phase A.1 follow-up commit. Build an EngineRegistry at app boot (one LocalProviderAdapter per LocalEngine), inject Arc<Orchestrator> into AppState, replace pick_engine plus engine.transcribe_sync chunking-loop calls with orchestrator.transcribe(audio, &profile) per chunk. Keep the chunking strategy in the command layer (it is a strategy concern, not a dispatch concern). Tests should cover both paths against a mock provider before touching the real engines.

Workaround: N/A. Existing path works as before.

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.