Files
Lumotia/docs/release/v0.1-checklist.md
Jake bf1b68275a agent: lumotia — Pass 1 v0.1 checklist refinements + Pass 2 v0.1 UI hardening boundary doc
Operationalises the ChatGPT review of the v0.1 release-doc set into two
related landings. Both bounded; no Garden Inbox work, no architecture
refactor, no full redesign.

PASS 1 — v0.1-checklist.md refinements
=======================================

Seven targeted edits to the existing checklist:

1. Cold setup vs warm activation split. Tester acceptance test was
   conflating model-download time (variable, network-dependent) with
   UX-controlled flow time. Two-phase pass:
     - Cold setup: install → onboarding → ready-to-record (no time bound)
     - Warm activation: model-ready → first recording within 3 minutes
   Steps 1-4 are cold; 5-10 are warm.

2. Migration-aware onboarding wording. "Skip-onboarding path for users
   who already have transcripts on disk" → "Migration-aware onboarding:
   existing users with valid data are not forced through first-run, but
   can launch the tutorial manually from Settings → Help."

3. UI acceptance section. New testable items between Documentation
   surface and Quality gates — turns "redo the UI" into measurable
   requirements:
     - Main capture action visible <1s on Home
     - Recording state not communicated by colour alone
     - 10-step flow completable at 900×700 + keyboard only
     - Destructive actions reversible or confirmed
     - Every async state has sidebar status chip feedback
     - Error states preserve raw transcript + plain-words next step
     - Settings Start Here / Privacy / Accessibility findable
     - Focus ring visible everywhere
     - prefers-reduced-motion respected
     - WCAG AA contrast spot-check both modes
     - Post-capture card surfaces (display-only; NOT Garden Inbox)

4. Supported platforms scope. New subsection before smoke-test matrix
   explicitly naming:
     - Primary (must work end-to-end): Linux Fedora + Ubuntu LTS
     - Best-effort (announced if smoke-tested): macOS Apple Silicon,
       Windows 11
     - Not announced unless smoke-tested: macOS Intel

5. P0/P1/P2 smoke-test severity replacing "any  blocks tag":
     - P0 — blocks tag (tester spine on a primary platform)
     - P1 — ships only with explicit known-limitation entry
     - P2 — does not block private beta (not-announced platform / v0.2
       feature)
   Pre-tag verification confirms no unresolved P0 or undocumented P1.

6. "Telemetry" → "local activation log". Re-worded the activation
   metrics capture mechanism. Word choice deliberate — privacy-conscious
   audience reacts to "telemetry" itself. Surface: Settings →
   Diagnostics → Activation log. Nothing sent automatically.

7. Support burden signal. New activation-metric subsection covering
   the AI-assisted-indie risk that every issue becomes a support call:
     - Self-service rate ≥ 70% (issues filed to bug tracker, not inbox)
     - Diagnostic bundle (logs + system info + crash dumps; skips
       transcript content + audio by default)
     - Top-3 setup failures documented after first 5 testers

PASS 2 — v0.1-ui-hardening.md
==============================

New strict-boundary doc at docs/release/v0.1-ui-hardening.md (262
lines). Anchored on the line:

  The v0.1 UI pass is not there to make Lumotia beautiful. It is there
  to make the first successful capture inevitable.

Step 0 (before any code change): walk the 20 existing
src/design-system/preview/ files and classify each item as
already-good / needs-v0.1-hardening / v0.2-polish. Don't rebuild what
works. Inventory table inline in the doc cross-references each preview
file to the in-scope items below.

IN SCOPE (10 items, each testable):
  1. Home capture clarity — big record button, status pill, last-capture
     preview, capped Now/Tasks at 1-3 visible
  2. Recording as sacred UI state — hide settings/history/advanced
     during capture; show only timer/pause/stop/cancel + live transcript
     + level meter
  3. Post-capture card — the v0.1 headline UI artefact. Display-only
     surface of raw + cleaned + tasks + microsteps + 4 actions
     (Save/Export/StartFirstMicroStep/OpenInHistory). Explicitly NOT
     Garden Inbox: no routing, no accept/edit/park/archive, no
     backlinks, no confidence scores
  4. First-run onboarding polish — single clear next action per step,
     pre-supplied prompt for test recording, graceful failure recovery,
     skip-to-main escape hatch (tracked as known-limitations follow-up)
  5. Settings sanity pass — 6 sections in order: Start Here /
     Transcription / Models / Tasks / Accessibility / Privacy / Advanced.
     Full 7-group progressive-disclosure regroup deferred to v0.2
  6. Error-state copy sweep — every error preserves raw transcript,
     explains in plain words, says next user action, no stack traces
     user-facing
  7. Keyboard flow — entire 10-step tester acceptance completable by
     keyboard only, focus ring visible, no hover-only controls
  8. Responsive at 900×700 + 1440×900 ONLY — ultrawide / mobile / split-
     screen deferred to v0.2 unless a tester reports them
  9. Accessibility practical checks (WCAG-style, not certification) —
     keyboard, focus, not-colour-alone, reduced motion, contrast spot-
     check, literal-words status labels, form-label association
  10. Status labels everywhere — new StatusPill component (no existing
     class found in survey); add to design-system/preview/components-
     status-pills.html. Pill states: Ready / Recording / Paused /
     Transcribing / Cleaning / Extracting tasks / Saved / Exported /
     Needs review / Failed safely

OUT OF SCOPE (the traps to refuse — each ships in v0.2 or later):
  - New visual identity (brand book v3 PDF is locked)
  - New navigation model
  - Garden Inbox (review cards, routing, accept/edit/park/archive,
    related notes, backlinks, P-P-T detection)
  - Suggested routing
  - Backlinks
  - Graph view
  - Canvas view
  - New animation system
  - Full SettingsPage 7-group redesign
  - Obsidian plugin
  - Cloud / provider UI

Plus a "Definition of done" with 8 specific completion criteria, and
cross-references to checklist + Garden roadmap + how-built + design-
system preview + locked brand book.

VERIFICATION
============
- cargo fmt --check: clean (no Rust touched)
- All four release docs cross-reference cleanly
- No new tests required (boundary docs, not code)
- v0.1 ship gate unchanged in shape, sharpened in detail
2026-05-14 22:12:21 +01:00

14 KiB
Raw Blame History

name, type, tags, description
name type tags description
v0.1-checklist release
release
v0.1
checklist
tester-acceptance
activation-metrics
ui-acceptance
support-burden
Source of truth for 'are we allowed to ship v0.1?'. Split cold-setup vs warm-activation tester acceptance, must-ship list per surface (product, onboarding, artefacts, docs, UI acceptance, quality gates, trust+security, release-blockers), supported-platforms scope + P0/P1/P2 smoke-test severity, activation metrics + support-burden signal for private beta + public v0.1, explicit out-of-scope list, pre-tag verification sequence. Pairs with docs/release/v0.1-ui-hardening.md for the UI scope boundary.

Lumotia v0.1 release checklist

Locked scope: v0.1 ships the stable local capture product. Garden Inbox is v0.2. Cloud providers stay dormant. OEM verification stays v0.2+. See docs/release/v0.2-garden-roadmap.md for what comes next.

Tag-eligible when: every item below is or explicitly waived in the linked known-limitations row.

The tester acceptance test (private beta spine)

The product is ready when a stranger can complete this flow on a fresh install, on their primary platform, without coaching. The flow is split into two measurable phases because the first depends on connection + hardware (model download) and the second depends purely on UX quality.

Cold setup pass. A tester can install Lumotia, complete onboarding, and reach the "Ready to record" state without coaching. No hard time bound — the model download is the dominant variable. Pass condition: the tester is not confused at any step; if they would have given up, the step is a failure.

Warm activation pass. Once the model is ready, the tester completes their first real recording within 3 minutes of opening the app. This measures the part of the flow Lumotia controls.

The full ten-step flow:

  1. Install Lumotia from the artefact for their platform.
  2. Open the app. First-run onboarding starts automatically.
  3. Grant microphone permission via the OS prompt the onboarding surfaces.
  4. Pick or download a speech model (sensible default suggested).
  5. Test recording (a short pre-supplied prompt the onboarding asks them to read).
  6. See the live transcript appear.
  7. Stop dictation. See the cleaned transcript.
  8. Extract one task from the transcript.
  9. Break the task into MicroSteps and start a 5-minute timer on the first one.
  10. Find the dictation again in History via search.

Steps 14 are the cold-setup pass. Steps 510 are the warm-activation pass.

Every step has a green path. Every step has a clearly-named failure mode in the known-limitations doc. No step depends on a feature that's marked v0.2 or later.

Must-ship

Product surface (already shipped, verify via Phase A/B/C dogfood passes)

  • Phases 18 functional on Linux primary, parity-tested on macOS + Windows
  • Phase 9a — native OS save-dialog Markdown export (single + bulk + collision-suffixing)
  • Phase 9b — LLM content tags with manualTags promote-on-click
  • Phase 9d — sparkline + badge a11y + prefers-reduced-motion respect
  • Phase 9c — Settings sanity pass: Start Here / transcription basics / model picker / privacy / accessibility / advanced (full 7-group regroup deferred to v0.2)

First-run onboarding (engine architecture Phase F — promoted to v0.1 must-ship)

  • Onboarding steps wired in src/lib/pages/FirstRunPage.svelte: permissions → model check/download → test recording → cleaned transcript surfaced → "you're ready" → main UI
  • First-run gate routes anyone with no onboarding-event record through this flow
  • onboarding_events SQLite table (completed_at, skipped, version) + migration
  • Onboarding Tauri commands
  • Migration-aware onboarding: existing users with valid data are not forced through first-run, but can launch the tutorial manually from the Settings → Help section
  • Time-to-first-capture measurable from the onboarding events (raw signal for activation metrics)

Release artefacts + trust path

  • Three-way version sync: Cargo.toml workspace + src-tauri/Cargo.toml + package.json + tauri.conf.json all on 0.1.0
  • CHANGELOG.md seeded with Phase 18 outcomes in end-user voice (not commit-log style)
  • Release notes drafted in plain language (one page max, no jargon)
  • Windows code-signing certificate sourced + signing wired into tauri build
  • macOS notarisation + Gatekeeper acceptance via Apple Developer ID (or documented Gatekeeper-warning workaround if notarisation isn't available)
  • Linux AppImage SHA-256 checksum published alongside artefact + GPG signature optional
  • "What warning you may see on first install" documented per platform (SmartScreen / Gatekeeper)
  • CI green on Linux/macOS/Windows artefact builds on tag push
  • Manual smoke-test on each platform artefact before public release (see matrix below)

Documentation surface

  • docs/release/v0.1-known-limitations.md complete + user-readable
  • docs/release/how-lumotia-is-built.md complete + linked from README
  • Privacy + AI-use disclosure page (what stays local, what optionally reaches the network, what NEVER leaves the machine)
  • README updated for v0.1 launch: install paths per platform, first-run expectations, where to file issues

UI acceptance (the v0.1 UI hardening pass)

Scope and boundary for this pass are pinned in docs/release/v0.1-ui-hardening.md. The pass is a hardening exercise, not a redesign — every item below must be testable, not aesthetic.

  • Main capture action is visible within 1 second of landing on Home (no hover or scroll required)
  • Recording state is communicated without relying on colour alone (literal status pill: Ready / Recording / Paused / Transcribing / Cleaning / Saved / Failed safely)
  • Tester acceptance flow (10 steps) can be completed at 900 × 700 without horizontal scrolling
  • Tester acceptance flow can be completed using keyboard only — no mouse touched
  • All destructive / cancel actions are reversible (soft-delete + restore) or guarded by explicit confirmation (e.g. type-the-word DELETE)
  • Every async state has visible feedback in the sidebar status chip: downloading model / transcribing / cleaning / extracting tasks / exporting
  • Error states preserve the raw transcript and explain the next user action in plain words (not stack traces, not codes)
  • Settings has a visible Start Here section, with Privacy and Accessibility sections findable from the first sidebar group (no drilling into Advanced)
  • Focus ring is visible on every interactive element at standard zoom
  • prefers-reduced-motion respected app-wide (carry from Phase 9d sparkline + badge polish)
  • Text contrast acceptable in both light and dark mode (WCAG AA spot-check, not full audit)
  • Post-capture card surfaces after every recording: raw transcript / cleaned transcript / extracted tasks / MicroSteps / Save-or-Export / Start-first-MicroStep / Open-in-History. Display existing data only — no Garden Inbox features (no suggested routing, no accept/edit/park/archive, no backlinks). That is v0.2.

Quality gates carried forward from Phase A + B

  • cargo test --workspace — green
  • cargo fmt --check — clean
  • cargo clippy --workspace --all-targets -- -D warnings — clean
  • npm run test — green
  • npm run check — 0 errors / 0 warnings
  • scripts/dogfood-rebrand-drill.sh — 8/8 probes pass (carry from Phase A)
  • Rust toolchain still pinned to rust-toolchain.toml
  • npm dev deps still exact-pinned

Trust + security boundary verified

  • MCP surface read-only / stdio-only / no write tools confirmed (see Audit 1 in docs/release/how-lumotia-is-built.md)
  • LLM failure paths preserve raw transcript / extract tasks via fallback / never block export (see Audit 2 in docs/release/how-lumotia-is-built.md)
  • lumotia-cloud-providers crate compiles but has no UI exposure (KI-04)
  • npm audit signatures runs in run.sh and on CI before any tag

Release-blocker resolution

  • RB-08 macOS App Nap power-assertion runtime verification on Apple Silicon (resolve or document with workaround per KI-01)
  • Decision recorded per platform-power-assertion item: KI-02 Linux idle inhibit, KI-03 Windows sleep prevention — fix-if-tiny vs document-as-known-limitation (see known-limitations doc)

Supported platforms for v0.1

Promising five platform paths we can't actually support is the exact "AI slop" trap the trust page is meant to prevent. Concrete scope:

  • Primary (must work end-to-end before tag): Linux (AppImage on Fedora, AppImage on Ubuntu LTS)
  • Best-effort (announced if smoke-tested): macOS Apple Silicon (.dmg), Windows 11 (.msi)
  • Not announced unless smoke-tested: macOS Intel — included in the matrix below but a P2 failure (see severity matrix) blocks announcement, not tag

Smoke-test matrix (executed against final tagged artefacts)

Platform Install First-run Capture Cleanup Export History search Uninstall + reinstall preserves transcripts
Linux (AppImage on Fedora) [ ] [ ] [ ] [ ] [ ] [ ] [ ]
Linux (AppImage on Ubuntu LTS) [ ] [ ] [ ] [ ] [ ] [ ] [ ]
macOS (Apple Silicon, .dmg) [ ] [ ] [ ] [ ] [ ] [ ] [ ]
macOS (Intel, .dmg) [ ] [ ] [ ] [ ] [ ] [ ] [ ]
Windows (.msi on Win 11) [ ] [ ] [ ] [ ] [ ] [ ] [ ]

Smoke-test severity (replaces "any blocks tag")

Not every failure has equal weight. Classify each at the moment it appears.

  • P0 — blocks tag. Affects the tester acceptance spine on a primary platform: install / first-run / capture / cleanup / export / history search / data preserved across reinstall. A single P0 stops the day's ship.
  • P1 — ships only with explicit known-limitation entry. Affects a supported feature on a best-effort platform, OR a non-spine feature on a primary platform. Entry must land in docs/release/v0.1-known-limitations.md with workaround.
  • P2 — does not block private beta. Affects a not-announced platform (e.g. macOS Intel without a smoke-tester), OR a v0.2-flagged feature. Tracked, not gated.

Severity is recorded next to each in the matrix above. The pre-tag verification step confirms no unresolved P0 or undocumented P1.

Activation metrics

Private beta (closed, ~20 testers)

Defined activation:

  • Activation: Tester completes their first recording within 3 minutes of opening the app for the first time.
  • Core value: Tester creates 3 useful captures in the first 24 hours.
  • Retention: Tester returns within 7 days and uses history / search / review.
  • Quality: Tester accepts or edits at least one extracted task.
  • Trust: Tester can articulate what stays local if asked.

Capture mechanism: an optional local activation log stored on-device. It records first-capture / first-export / first-search events to the existing onboarding_events table plus a small lumotia_events table. Nothing is sent automatically. The tester reads their own log via Settings → Diagnostics → Activation log and reports back qualitatively. Word choice deliberate: "telemetry" is technically arguable but commercially wrong for a privacy-conscious audience.

Public v0.1 launch (open download)

Defined pass-bar:

  • Can 20 strangers install Lumotia successfully?
  • Can 15 of them complete first capture?
  • Can 10 of them use it twice within a week?
  • Can 5 of them say they would pay £39 for a Founding Licence?

If we don't hit these numbers, the answer is iteration on first-run + clarity-of-pitch, not feature additions.

Support burden signal

For an AI-assisted indie app, every issue that becomes a support call is a tax on the founder's time. Measure:

  • Self-service rate: Can testers describe what went wrong without a one-on-one call? Target: ≥ 70 % of issues filed against the bug tracker, not the inbox.
  • Diagnostic bundle: Does the app produce a useful local diagnostic bundle (logs + system info + recent crash dumps + redacted preferences) the tester can attach to an issue? Bundler must skip transcript content and audio files by default.
  • Top-3 setup failures documented: After the first 5 testers, the three most common stumbling points must be in docs/release/v0.1-known-limitations.md with explicit workarounds.

This is a release metric, not a code metric. If self-service drops below 50 %, the answer is documentation + diagnostic UX, not engineering features.

Out of scope for v0.1 (explicit non-goals)

To stop ourselves second-guessing under release pressure, these are pinned not in v0.1. Reopening any of them moves the ship date.

  • Garden Inbox / review cards / suggested routing → v0.2
  • Engine Phase B filter-chain refactor → v0.2
  • Engine Phase C vocabulary crate → v0.2
  • Engine Phase D model warmup coordinator → v0.2
  • Engine Phase E dictionary quick-add → v0.2
  • Engine Phase G OpenAI Whisper API provider → v0.2 at earliest, with BYOK / off-by-default / never-required / clearly-labelled framing
  • Engine Phase I OEM verification → v1.0 commercial track
  • Engine Phase J full degraded-mode indicator → v0.2 (data-loss path closed in v0.1 per Audit 2; the UI-wedge case is documented in known-limitations)
  • Full SettingsPage 7-group regroup → v0.2
  • Rust-side OS-activity watcher for nudges → v0.2 if ever
  • Obsidian plugin → v0.2 ecosystem play
  • Mobile companion → not on any current track
  • Cloud sync → not on any current track

Pre-tag verification (the morning of)

In order, before git tag v0.1.0:

  1. Re-run all quality gates fresh on a clean checkout.
  2. Re-run scripts/dogfood-rebrand-drill.sh against a freshly-built binary.
  3. Re-execute the 10-step tester acceptance flow personally on Linux.
  4. Confirm the smoke-test matrix is fully green for the platforms we're announcing.
  5. Confirm known-limitations doc has no item marked "TBD" or "pending decision".
  6. Confirm CHANGELOG.md + release notes are user-readable, not commit-log dumps.
  7. Tag, push to both remotes, watch CI complete the per-platform builds, smoke-test one artefact per platform from the CI output.

If any step fails, the day's ship is off. Reopen, fix, repeat.