Operationalises the ChatGPT/Jake roadmap-synthesis pass into four
release-boundary documents at docs/release/. Synthesis call:
v0.1 = stable local capture product
v0.2 = Garden Inbox / review cards
v1.0 = PKM-complete + commercial track
Two factual audits ran first per Jake's explicit instruction — release
hardening only, no architecture refactors, no Garden Inbox work:
AUDIT 1 — MCP surface
=====================
Verdict: PASSES the v0.1 trust posture.
- Read-only by design (`//! No writes — Lumotia's Tauri app remains the only writer`)
- Stdio-only transport (newline-delimited JSON-RPC 2.0); no TCP/Unix
listener, no bind, no network exposure
- Database opened via `lumotia_storage::init_readonly` — structurally
enforced, not just convention
- 4 tools, all SELECT-only: list_transcripts, get_transcript,
search_transcripts, list_tasks
- Zero matches for INSERT/UPDATE/DELETE/fs::write/fs::remove/
create_dir/spawn_blocking in the crate
- Separate binary (`crates/mcp/src/main.rs`) — not part of the running
Tauri app; user must explicitly launch and wire into client config
- Honest nuance flagged in known-limitations: a wired client gets read
access to the entire transcript history + task list — no per-row
permission boundary in v0.1
AUDIT 2 — LLM failure surface
=============================
Verdict: data-loss path PASSES; UX-wedge path PARTIAL (documented).
- post_process_segments (file + live pipeline): tracing::warn! on Err,
segments stay at rule-based output. Raw transcript preserved.
- cleanup_transcript_text_cmd (DictationPage): frontend try/catch
returns raw text unchanged on Err. Raw transcript preserved.
- extract_tasks_from_transcript_cmd (DictationPage): frontend falls
back to rule-based extractTasks (regex + verb list) on Err.
- extract_content_tags_cmd (HistoryPage): per-row try/catch; toast on
failure; transcript untouched.
- Hung llama.cpp: no tokio::time::timeout on the spawn_blocking call.
Raw transcript preserved; rest of app functional; LLM status chip
stays on "Cleaning up" until restart. Soft edge — documented in
known-limitations as v0.2 hygiene candidate. Not implemented per
"release hardening only" instruction.
THE FOUR DOCS
=============
docs/release/v0.1-checklist.md
- 10-step tester acceptance test (install → capture → cleanup →
task → MicroSteps → timer → history search)
- Must-ship list per surface (product, onboarding, artefacts, docs,
quality gates, trust+security, release-blockers, smoke-test
matrix)
- Activation metrics for private beta (3 min to first capture, 3
captures in 24h, 7-day return, etc.) + v0.1 public launch
(20 install, 15 first-capture, 10 return, 5 pay-£39)
- Pre-tag verification sequence
- Explicit out-of-scope list (Garden Inbox, Phases B-E/G/I/J, etc.)
docs/release/v0.1-known-limitations.md
- User-facing rewrite, not engineer-speak
- Power assertions per platform (Linux idle / macOS App Nap / Windows
sleep) with practical workarounds
- MCP read-only/local-only posture with the
"all transcripts visible to your wired client" honest nuance
- AI cleanup/extraction failure table — what fails, what you see,
what's preserved
- Settings page progressive-disclosure status
- Internal engine refactor (orchestrator dormant) framed for users
- Explicit "what's NOT in v0.1" call-outs
- Reporting issues + crash-dump location
docs/release/v0.2-garden-roadmap.md
- Headline: "review cards for turning messy dictations into notes,
tasks, topics and links" — tangible, not PKM-overloaded
- Garden Inbox scope (raw / cleaned / suggested title-type-folder-
project / extracted tasks / suggested tags / possible links /
confidence / Accept-Edit-Park-Archive)
- Engine architecture Phases B-E pairing
- Explicit "NOT in v0.2" list (no graph, no canvas, no PKM marketing,
no cloud provider, no premium voices)
- Open decisions for v0.2 scope freeze deferred until v0.1 ships +
20 testers run
docs/release/how-lumotia-is-built.md
- Public-facing trust page; honest disclosure that AI-assisted
human-directed, then evidence
- The real silent-data-loss bug the drill caught (Phase A.7 fix
ff8dda0) framed as proof the process works
- Phase B atomiser audit: 9 surgical fixes including the FIFO hang,
LlmEngine unload race, purge-vs-restore SELECT-then-DELETE race
- Supply-chain pre-flight (npm audit signatures + --ignore-scripts +
pinned dev deps + pinned rust toolchain)
- MCP read-only audit + LLM failure audit cross-referenced
- Anti-patterns explicitly avoided (no telemetry exfiltration, no
silent AI dependency, no "audit log later", etc.)
- Calibrated to "AI use is survivable; sloppy undisclosed untested
AI use is not" — RPCS3 framing cited
Verification:
- cargo fmt --check: clean (no Rust changed)
- All four docs are user-readable, not commit-log-derivative
- Cross-references resolve (every internal path quoted exists)
6.8 KiB
name, type, tags, description
| name | type | tags | description | |||||
|---|---|---|---|---|---|---|---|---|
| v0.1-known-limitations | release |
|
User-facing known-limitations doc for Lumotia v0.1. Written for end-users not engineers — every limitation states what works, what doesn't, what the workaround is, and when (if ever) the limitation is expected to lift. This is the trust document. Linked from README + the public release notes. |
Lumotia v0.1 — known limitations
This is the honest list. Every entry below names something that does not work the way you might expect it to in this release. Read it before you install. We'd rather have you walk in clear-eyed than disappointed.
If something you find isn't on this list, it's a real bug — please tell us. If something on this list lifts in a later release, it'll be removed from this file and called out in the changelog.
Platforms + power
Long dictation sessions may be throttled by the OS
Lumotia is designed for sit-down dictation, not always-on transcription. Long sessions (10+ minutes) work fine on every platform, but the OS itself may decide to slow Lumotia down if it thinks the app is idle.
| Platform | Behaviour | Workaround |
|---|---|---|
| Linux | The compositor's idle hooks may dim the screen, lock the session, or suspend after the OS-level inactivity timeout. Lumotia does not currently inhibit those. | Wrap launch with systemd-inhibit --what=idle:sleep:handle-lid-switch lumotia if you need a long uninterrupted session. Or raise your screen-lock timeout in system settings. |
| macOS | App Nap may pause Lumotia after the window loses focus. We've coded the protection but the runtime verification on Apple Silicon hardware is still in progress for this release. | Keep the Lumotia window focused for long sessions. As a global override: defaults write NSGlobalDomain NSAppSleepDisabled -bool YES (revert with -bool NO after). |
| Windows | Sleep prevention is not yet wired. Long sessions can be paused by your power plan's sleep timer. | Set your active power plan's sleep timeout to "Never" while dictating. |
Closing this gap is on the path to v0.2 if a real user reports a session-loss; otherwise it stays known.
Cloud transcription is not available in this release
Lumotia is local-only in v0.1. All transcription happens on your device using a Whisper model you download once. Nothing leaves your machine for transcription.
A cloud-provider plumbing crate exists in the codebase but is intentionally not exposed: there's no setting to enable it, no UI to enter an API key, and no path that sends audio to a remote service. We will only ship cloud-provider support when we can ship it with the right defaults (off, BYOK, clearly labelled, never required).
Model Context Protocol (MCP) server access
Lumotia includes an optional MCP server (lumotia-mcp) you can wire into Claude Desktop, Cline, or any MCP-capable client. It is:
- Read-only. No tool can create, edit, or delete transcripts or tasks.
- Local-only. Communicates over stdio. No network listener. No remote access.
- Off by default. You must explicitly launch it and add it to your MCP client's configuration.
The honest thing to flag: when you wire lumotia-mcp into an MCP client, that client gets read access to your entire transcript history and task list. There is no per-row permission system in v0.1. Treat it the same way you'd treat giving an MCP client access to a folder of personal notes — only enable it if you trust the client end-to-end. We'll add a permission boundary in a later release.
AI cleanup + extraction failure modes
Lumotia uses a local LLM (downloaded once, runs on your device) for transcript cleanup and task extraction. Like any model, it can fail. The product is designed so that no AI failure ever loses your transcript.
What happens on a failure:
| What fails | What you see | What's preserved |
|---|---|---|
| LLM cleanup throws an error | Sidebar status chip flashes "failed"; transcript stays at rule-based cleanup (fillers removed, repetition collapsed, British-English applied) | Your raw transcript text is unchanged |
| Task extraction throws | Tasks still get extracted, just via a rule-based regex+verb-list extractor instead of the LLM | Your transcript text is unchanged; tasks still appear |
| Content tag extraction throws | A "Tagging failed" toast appears; no tags applied | Your transcript text is unchanged; you can retry |
| LLM hangs mid-generation | The sidebar status chip may stay on "Cleaning up" indefinitely until you restart the app | Your raw transcript is preserved; the rest of the app still works while the chip is stuck |
The hanging-chip case is the only soft edge. Closing it (with a timeout wrap on the LLM call) is on the v0.2 hygiene track.
Settings page is in progressive-disclosure mode
The Settings page has six sections covering everything that matters for v0.1: Start Here, Transcription basics, Models, Privacy, Accessibility, Advanced. A full visual regroup with grouped progressive-disclosure cards is planned for v0.2.
If you can't find a setting, it's almost certainly under Advanced.
Internal engine refactor still in progress
Some internal engine refactors (alternative transcription provider plumbing) are partly landed but not yet wired through every code path. This does not affect the default local Whisper transcription path you use as a user. It means alternative providers aren't selectable in v0.1.
Soft-touch nudging is frontend-driven only
Lumotia's nudge system reacts to what happens inside the app — task completions, timer state, ritual progress, window focus. It does not yet watch what's happening on the rest of your system (keyboard activity in other apps, active-window changes, etc.) — that's a v0.2-or-later expansion.
In practice this means: Lumotia won't nudge you because you've been idle in another window. It will nudge you based on the rhythm of your Lumotia session itself. If that's the wrong default for you, you can turn nudges off entirely in Settings.
What's NOT in v0.1 (call-outs people often ask about)
- No Garden Inbox / review cards / suggested routing. This is the v0.2 marquee feature.
- No related notes / backlinks across transcripts. v0.2.
- No Obsidian plugin. v0.2.
- No mobile companion app. Not on the current track.
- No cloud sync. Not on the current track.
- No premium voices / paid tier expansion. v1.0 commercial track.
Reporting issues
If you hit something not on this list, please file an issue at the link in the README. Include:
- Platform (Linux/macOS/Windows + version)
- Lumotia version (Settings → About)
- What you did
- What you expected
- What actually happened
Crash dumps (if any) live at <app-data-dir>/crashes/ — attaching the most recent file helps us a lot.
This list is what we know. If we discover more, we'll add to it.