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>
3.2 KiB
name, type, slice, last_verified
| name | type | slice | last_verified |
|---|---|---|---|
| Audio VAD (currently a stub) | architecture-map-page | 03-audio-transcription | 2026/05/09 |
Audio VAD (currently a stub)
Where you are: Architecture map → Audio + Transcription → Audio VAD
Plain English summary. lumotia-audio exposes a SpeechDetector type, but right now its is_speech() returns true for every input. This is a deliberate stub: both candidate Silero VAD bindings pin an older ort version than transcribe-rs (Parakeet) requires, so adding either today would force a workspace-wide downgrade. Live capture uses the energy-based RmsVadChunker from the transcription crate as the working fallback until the ort ecosystem aligns.
At a glance
- Crate:
lumotia-audio - Path:
crates/audio/src/vad.rs - LOC: 35
- External deps: none (pulls
VAD_SPEECH_THRESHOLDfromlumotia_core::constants). - Internal callers (best effort): unused in production today. The threshold is read but never compared, because
is_speechalways returnstrue.
Public surface:
pub struct SpeechDetector—crates/audio/src/vad.rs:14, derivesDefault.pub fn SpeechDetector::new() -> Self—crates/audio/src/vad.rs:19.pub fn SpeechDetector::is_speech(&self, _samples: &[f32]) -> bool—crates/audio/src/vad.rs:26.pub fn SpeechDetector::threshold(&self) -> f64—crates/audio/src/vad.rs:30.pub fn SpeechDetector::reset(&mut self)—crates/audio/src/vad.rs:34.
What's in here
The whole file is the stub plus an explanatory header:
Both
voice_activity_detectorandsilero-vad-rustpin ort 2.0.0-rc.10 which conflicts with transcribe-rs requiring ort 2.0.0-rc.12. When the ort ecosystem aligns (likely at 2.0.0 stable), add Silero VAD here.For now, all audio is treated as speech. This matches v0.2 behaviour (no VAD) and doesn't affect core functionality.
The threshold comes from VAD_SPEECH_THRESHOLD (slice 5) and is currently dead weight.
Data flow
SpeechDetector::is_speech(samples) -> true. There is no flow.
Watch-outs
- The other VAD lives in the transcription crate.
RmsVadChunker(see transcription-streaming.md) is the live-capture chunker that actually decides what gets transcribed. When Silero lands here, expect to consolidate the two: the chunker becomes a thin shell around a real VAD predicate. is_speechreturningtrueis a feature, not a bug. v0.2 had no VAD at all. The stub keeps the interface stable so callers can switch to a real Silero impl without a code change.- Do not reach for
voice_activity_detector0.x orsilero-vad-rust6.x without a workspace-wide ort audit. The conflict is documented, has bitten before, and will bite again until upstreamortreaches a stable that both crates target. reset()is a no-op. The trait shape exists for future Silero state.
See also
- Transcription streaming —
RmsVadChunker, the actual gating today. lumotia_core::constants::VAD_SPEECH_THRESHOLD(slice 5) — wired but unused.Cargo.tomloflumotia-audio— the commented-outsilero-vad-rust = "6"line documents the deferred dep.