Files
Lumotia/docs/release/apple-silicon-rb08-runbook.md
Jake 3770815fbf
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 — v0.1 release-completion run
Closes the code-side v0.1 ship gate. All quality gates green:
cargo fmt/clippy/test (~327 tests), npm check (0/0), vitest 13/13,
scripts/dogfood-rebrand-drill.sh 8/8.

Phase F — first-run onboarding promoted to v0.1
- FirstRunPage with skip-to-main + failure recovery + event recording
- Six onboarding commands (record/list/has-completed + lumotia_events)
- Storage migration v17 (onboarding_events + lumotia_events tables)

UI hardening (in-scope items from v0.1-ui-hardening.md)
- StatusPill + PostCaptureCard components, 21st preview entry
- Sidebar recording-as-sacred-state (opacity + aria-disabled, reduced-motion)
- Settings 6-section regroup + Help section + Activation log + Privacy toggle
- Error-state copy sweep (DictationPage + SettingsPage, plain-language)
- Global :focus-visible rule, textarea outlines restored
- Ctrl+K / Ctrl+, / Escape bindings in +layout

LLM resilience
- rule_based_extract_tasks (regex-free imperative-verb extractor) +
  extract_tasks_with_fallback wrapper — task extraction never returns zero
- tokio::time::timeout(120s) wraps cleanup/tags/tasks commands

Release artefacts
- LICENSE (canonical AGPL-3.0), CHANGELOG (Keep-a-Changelog format)
- v0.1-release-notes, privacy-and-ai-use, install-warnings,
  tester-onboarding-kit, tester-acceptance-runbook, code-signing-setup,
  apple-silicon-rb08-runbook, virtual-audio-setup, v0.1-contrast-audit
- Workspace versioning + AGPL spdx; npm exact-pin (10 ranges removed)
- AppImage SHA-256 sidecar in build.yml
- README v0.1 section + Reporting-issues; canonical repo slug

Closure pass — items moved from human-required to code-complete
- KI-02 Linux idle inhibit: zbus 5 → org.freedesktop.login1.Manager.Inhibit
- KI-03 Windows sleep prevention: SetThreadExecutionState(ES_CONTINUOUS|...)
- acquire/release_idle_inhibit Tauri commands, wired in DictationPage
- Diagnostic-bundle frontend wire-up (Settings → Help button)
- WCAG-AA contrast fix via .btn-filled-text utility (no token changes)
- 8 destructive-action sites wrapped in plain-language confirm() guards
- KNOWN-ISSUES.md + v0.1-known-limitations.md updated (KI-02/03 fixed)

Scripts
- pre-tag-verify.sh, tag-day.sh, smoke-linux + driver
- parse-diagnostic-bundle.sh, parse-activation-log.py

Per-item audit trail: docs/release/v0.1-completion-status.md
Remaining: W-01…W-08 (signing certs, hardware probes, smoke matrix,
tester recruitment) — see docs/release/v0.1-known-limitations.md.
2026-05-15 06:59:08 +01:00

3.4 KiB

name, type, tags, description
name type tags description
apple-silicon-rb08-runbook release
release
v0.1
macos
apple-silicon
app-nap
RB-08
KI-01
runbook
10-minute step-by-step verification procedure for RB-08 — macOS App Nap on Apple Silicon. Determines whether App Nap protection is effective at runtime and instructs how to record the outcome in KNOWN-ISSUES.md.

Apple Silicon RB-08 runbook

Verification of RB-08: does Lumotia's NSProcessInfo.beginActivityWithOptions call actually prevent App Nap on M-series hardware? This takes roughly 10 minutes on a machine that already has the app installed.

Prerequisites

  • M-series Mac (M1, M2, M3, or M4 — any chip revision)
  • Latest macOS release
  • Lumotia v0.1.0 .dmg installed via the Gatekeeper "Open Anyway" flow (see docs/release/install-warnings.md)

Step 1 — Baseline

Open Activity Monitor (Spotlight: Activity Monitor). Click the Energy tab. Find Lumotia. If the App Nap column is missing, right-click the column header bar and enable it.

Open Lumotia, bring its window to the front. Confirm App Nap shows No while the window is focused. This is the expected baseline.


Test 1 — Focused recording (60 seconds)

Keep the Lumotia window in the foreground. Start a recording. Speak for 60 seconds. Stop.

Expected: Full 60-second transcript. App Nap stayed No.

Failure: Transcript shorter than what was spoken, or transcription did not complete.


Test 2 — Backgrounded recording (60 seconds)

Start a recording. Immediately press Command-Tab to switch to another app. Speak for 60 seconds while Lumotia is in the background. Switch back. Stop the recording.

While waiting, watch Activity Monitor: does App Nap flip to Yes for Lumotia?

Expected (RB-08 mitigated): Full 60-second transcript. App Nap stayed No throughout.

Failure (RB-08 not mitigated): Transcript contains only the first few seconds of speech. App Nap column flipped to Yes during the background period.


Test 3 — Long backgrounded session (5 minutes)

Same as Test 2 but leave Lumotia backgrounded for 5 minutes.

Expected: Full 5-minute transcript.

Failure: Transcript truncated. Note the approximate cutoff in seconds.


Recording the outcome

All three tests pass — RB-08 mitigated:

  1. Tick the RB-08 item in docs/release/v0.1-checklist.md.
  2. Open KNOWN-ISSUES.md, find KI-01, update its status to "fixed in v0.1", and append the test results + Mac model + macOS version.

Test 2 or Test 3 fails — RB-08 not mitigated:

  1. Leave the RB-08 checklist item unchecked.
  2. In docs/release/v0.1-known-limitations.md, update the macOS row to name the tested hardware/OS and state that throttling was observed when backgrounded.
  3. Add the workaround: "Keep the Lumotia window focused during long dictation sessions. System-wide override: defaults write NSGlobalDomain NSAppSleepDisabled -bool YES (revert with -bool NO when done)."
  4. Append the failure details to KNOWN-ISSUES.md KI-01.

Reporting format for KNOWN-ISSUES.md

Append this block to the KI-01 entry:

RB-08 verification — [date]
Mac model: [e.g. MacBook Pro M2 Max, 2023]
macOS: [e.g. 15.3.2]
Test 1 (focused, 60s): PASS / FAIL
Test 2 (backgrounded, 60s): PASS / FAIL — App Nap column: [Yes / No / fluctuated]
Test 3 (backgrounded, 5min): PASS / FAIL — transcript cutoff at approx [N] seconds
Overall: MITIGATED / NOT MITIGATED