agent: lumotia-rebrand — docs, scripts, root config, residuals
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

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>
This commit is contained in:
2026-05-13 12:38:03 +01:00
parent 681a9b26dc
commit 26c7307607
213 changed files with 1175 additions and 1170 deletions

View File

@@ -1,23 +1,23 @@
---
name: Magnotia architecture map
name: Lumotia architecture map
type: architecture-map-root-index
last_verified: 2026/05/09
---
# Magnotia architecture map
# Lumotia architecture map
> **Where you are:** Architecture map root.
> **Reading order if this is your first time:** read this page top to bottom, pick the slice that matches what you are trying to do, follow the breadcrumb trail.
## What Magnotia is in 60 seconds
## What Lumotia is in 60 seconds
Magnotia is a local-first dictation desktop app. You press a hotkey, you speak, your speech becomes formatted text on disk and on the clipboard. Everything that touches your voice or your transcript runs on your own machine. Zero telemetry, zero analytics, no calls home unless you turn on auto-update.
Lumotia is a local-first dictation desktop app. You press a hotkey, you speak, your speech becomes formatted text on disk and on the clipboard. Everything that touches your voice or your transcript runs on your own machine. Zero telemetry, zero analytics, no calls home unless you turn on auto-update.
It is a Tauri 2 app. The shell is Svelte 5. The brain is a Rust workspace of nine crates. Speech-to-text runs through Whisper (whisper-rs) by default with Parakeet (transcribe-rs ONNX) as an alternative. Optional cleanup runs through a local llama-cpp-2 LLM (Qwen3.5 / 3.6, four-tier model picker). Transcripts live in a SQLite database with a FTS5 full-text index. A standalone `magnotia-mcp` binary opens that database read-only and serves four tools over the Model Context Protocol so external agents can read your history without write access.
It is a Tauri 2 app. The shell is Svelte 5. The brain is a Rust workspace of nine crates. Speech-to-text runs through Whisper (whisper-rs) by default with Parakeet (transcribe-rs ONNX) as an alternative. Optional cleanup runs through a local llama-cpp-2 LLM (Qwen3.5 / 3.6, four-tier model picker). Transcripts live in a SQLite database with a FTS5 full-text index. A standalone `lumotia-mcp` binary opens that database read-only and serves four tools over the Model Context Protocol so external agents can read your history without write access.
Targets: Linux (primary, Wayland-friendly), macOS, Windows. Android is on the roadmap (a few crate features carry `android` cfgs).
> **Brand rename in flight.** Magnotia was approved as "Lumenote" on 2026/05/08. The codebase still says "magnotia" and "Magnotia" everywhere. The rename is a separate session.
> **Brand rename in flight.** Lumotia was approved as "Lumenote" on 2026/05/08. The codebase still says "lumotia" and "Lumotia" everywhere. The rename is a separate session.
## The three layers
@@ -36,11 +36,11 @@ Targets: Linux (primary, Wayland-friendly), macOS, Windows. Android is on the ro
│ │ Audio + │ LLM + Formatting + │ Core + Storage + │ │
│ │ Transcription │ MCP + Cloud │ Hotkey + Build │ │
│ │ (slice 03) │ (slice 04) │ (slice 05) │ │
│ │ magnotia-audio │ magnotia-llm │ magnotia-core │ │
│ │ magnotia- │ magnotia- │ magnotia-storage │ │
│ │ transcription │ ai-formatting │ magnotia-hotkey │ │
│ │ │ magnotia-mcp │ workspace + CI │ │
│ │ │ magnotia- │ │ │
│ │ lumotia-audio │ lumotia-llm │ lumotia-core │ │
│ │ lumotia- │ lumotia- │ lumotia-storage │ │
│ │ transcription │ ai-formatting │ lumotia-hotkey │ │
│ │ │ lumotia-mcp │ workspace + CI │ │
│ │ │ lumotia- │ │ │
│ │ │ cloud-providers │ │ │
│ └────────────────────┴──────────────────────┴─────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
@@ -96,12 +96,12 @@ Open items surfaced by the slice maps. Each slice's README has its own debt sect
### Brand rename pending
- The codebase still says "magnotia" and "Magnotia" everywhere. Strings include `"magnotia live dictation session"`, `magnotia_preferences` settings key, `magnotia_settings` localStorage key, prefixed events (`magnotia:hotkey-pressed`, `magnotia:llm-download-progress`, `magnotia:open-wind-down`, `magnotia:preferences-changed`), the bundle identifier `uk.co.corbel.magnotia`, every crate name (`magnotia-core`, `magnotia-audio`, etc), the `magnotia-mcp` binary, the brand asset folders. A rebrand sweep is a single dedicated session.
- The codebase still says "lumotia" and "Lumotia" everywhere. Strings include `"lumotia live dictation session"`, `lumotia_preferences` settings key, `lumotia_settings` localStorage key, prefixed events (`lumotia:hotkey-pressed`, `lumotia:llm-download-progress`, `lumotia:open-wind-down`, `lumotia:preferences-changed`), the bundle identifier `uk.co.corbel.lumotia`, every crate name (`lumotia-core`, `lumotia-audio`, etc), the `lumotia-mcp` binary, the brand asset folders. A rebrand sweep is a single dedicated session.
### Bridge surface drift
- **Slice 02 registers 91 Tauri commands. Slice 01 invokes 60.** The 31 unaccounted commands are likely registered for tests, internal lifecycle, or removed callers. Worth an audit pass.
- **Backend events emitted but not listened to (apparent).** `runtime-warning`, `transcription-result`, `native-pcm`, `magnotia:hotkey-released`. Some may be deprecated, some may be observed only in specific routes. Verify before any cleanup.
- **Backend events emitted but not listened to (apparent).** `runtime-warning`, `transcription-result`, `native-pcm`, `lumotia:hotkey-released`. Some may be deprecated, some may be observed only in specific routes. Verify before any cleanup.
### Schema drift vs HANDOVER
@@ -109,7 +109,7 @@ Open items surfaced by the slice maps. Each slice's README has its own debt sect
### Audio pipeline gaps
- **VAD is a stub** in `magnotia-audio` because both candidate Silero crates pin `ort 2.0.0-rc.10` while transcribe-rs (Parakeet) needs `2.0.0-rc.12`. Live capture leans on the energy-based `RmsVadChunker` in `magnotia-transcription` as a working fallback. Two VADs in two crates with no shared code or thresholds.
- **VAD is a stub** in `lumotia-audio` because both candidate Silero crates pin `ort 2.0.0-rc.10` while transcribe-rs (Parakeet) needs `2.0.0-rc.12`. Live capture leans on the energy-based `RmsVadChunker` in `lumotia-transcription` as a working fallback. Two VADs in two crates with no shared code or thresholds.
- **Streaming primitives** (`RmsVadChunker`, `LocalAgreement`, `trim_buffer_to_commit_point`) are unit-tested but not yet wired into `src-tauri/src/commands/live.rs`. Comments in `streaming/mod.rs`, `buffer_trim.rs`, `commit_policy.rs` flag the integration as a follow-up.
### LLM and formatting
@@ -124,7 +124,7 @@ Open items surfaced by the slice maps. Each slice's README has its own debt sect
### MCP and security
- **MCP has no auth.** Stdio is the trust boundary. Any future HTTP / SSE transport needs an auth layer before it ships.
- **`magnotia-cloud-providers` is empty scaffolding.** In-memory keystore only. API keys vanish on restart. Documented TODO for `keyring` migration.
- **`lumotia-cloud-providers` is empty scaffolding.** In-memory keystore only. API keys vanish on restart. Documented TODO for `keyring` migration.
### Frontend debt
@@ -154,9 +154,9 @@ Open items surfaced by the slice maps. Each slice's README has its own debt sect
- **`src-tauri/.cargo/config.toml` hard-codes `LIBCLANG_PATH = "C:\\Program Files\\LLVM\\bin"`** for Windows.
- **No code signing.** Apple and Windows signing env blocks are commented out. First-run users hit Gatekeeper / SmartScreen.
- **`tauri-action@v0` is unpinned.** Floats. Pin before v0.1.
- **`pcm-processor.js` hard-codes `16000` and `8000`** which must move in lock-step with `magnotia_core::constants::{WHISPER_SAMPLE_RATE, MIN_CHUNK_SAMPLES}`.
- **`pcm-processor.js` hard-codes `16000` and `8000`** which must move in lock-step with `lumotia_core::constants::{WHISPER_SAMPLE_RATE, MIN_CHUNK_SAMPLES}`.
- **`uuid` Cargo feature is `v4` despite the storage `Cargo.toml` comment claiming "v7 random"**. Cosmetic but worth cleaning up.
- **GPU probe is a stub.** `magnotia_core::hardware::probe_gpu()` returns `None`; no NVIDIA / AMD / Intel / Apple discrimination at runtime.
- **GPU probe is a stub.** `lumotia_core::hardware::probe_gpu()` returns `None`; no NVIDIA / AMD / Intel / Apple discrimination at runtime.
- **Power probe is Linux-only.** macOS and Windows return `PowerState::Unknown`, which callers treat as `OnAc`.
## How this map was generated