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,12 +1,12 @@
# Magnotia Session Handover — 2026/04/17
# Lumotia Session Handover — 2026/04/17
*Originally written when the product was named Kon (and briefly Corbie); references rewritten in the 2026-04-30 rebrand sweep.*
## Session Summary
Six-commit sprint executing the upgrade plan from
`/home/jake/Documents/CORBEL-Furnished-House/output/reports/magnotia-upgrade-plan-2026-04-17.md`.
Goal: get Magnotia from "core feature broken" to "ready to dogfood with friends."
`/home/jake/Documents/CORBEL-Furnished-House/output/reports/lumotia-upgrade-plan-2026-04-17.md`.
Goal: get Lumotia from "core feature broken" to "ready to dogfood with friends."
## Commits
@@ -95,7 +95,7 @@ index in sync. Dictionary table also added in v2.
New collapsible section. Add custom terms (medication names, jargon,
people's names) that the LLM cleanup prompt should preserve. Backed by
the `dictionary` SQLite table. The LLM client itself is currently a
stub; when wired, it imports `list_dictionary` from magnotia_storage and
stub; when wired, it imports `list_dictionary` from lumotia_storage and
injects terms into the prompt suffix.
### Wayland self-relaunch
@@ -111,14 +111,14 @@ HANDOVER env-var prefix is no longer needed.
```bash
sudo dnf install cmake clang-devel
cd /home/jake/Documents/CORBEL-Projects/magnotia
cd /home/jake/Documents/CORBEL-Projects/lumotia
npm install # if you have not already
```
### Launch (no env-var prefix needed any more)
```bash
cd /home/jake/Documents/CORBEL-Projects/magnotia
cd /home/jake/Documents/CORBEL-Projects/lumotia
npm run tauri dev
```
@@ -142,10 +142,10 @@ env GDK_BACKEND=x11 WINIT_UNIX_BACKEND=x11 \
3. **Auto mode.** Clear the picker (set to "Auto"). Hit dictation. The
logs (terminal where you ran `npm run tauri dev`) should show:
- `[magnotia-audio] start: enumerated N input device(s)`
- `[magnotia-audio] trying '...'` for each candidate
- `[magnotia-audio] '...' validation: M samples, rms=...`
- `[magnotia-audio] selected microphone: '...'`
- `[lumotia-audio] start: enumerated N input device(s)`
- `[lumotia-audio] trying '...'` for each candidate
- `[lumotia-audio] '...' validation: M samples, rms=...`
- `[lumotia-audio] selected microphone: '...'`
The selected mic should NOT be a `.monitor` source.
4. **History rename.** Make a recording. In History, rename it to
@@ -196,7 +196,7 @@ env GDK_BACKEND=x11 WINIT_UNIX_BACKEND=x11 \
| **Linux x86_64 (Fedora 43, KDE Wayland)** | ✓ | ✓ | The everyday dev target | **HIGH** — this is what the sprint was developed against |
| **Linux x86_64 (other distros, X11)** | Should work | Should work | Wayland self-relaunch is no-op on X11 sessions, evdev hotkeys may need user added to `input` group | **MEDIUM** — tested patterns, untested distros |
| **Windows 10/11 x86_64** | Untested but should compile (CPAL + Tauri + whisper.cpp all support it) | Untested | Custom evdev hotkeys are no-op; falls back to Tauri's global-shortcut plugin which works on Windows | **LOW** — theoretically supported, has had zero hands-on testing |
| **macOS aarch64 (Apple Silicon)** | Untested | Untested | Path bug fixed this commit (now uses `~/Library/Application Support/Magnotia/`); Info.plist needs `NSMicrophoneUsageDescription` for the app bundle | **LOW** — theoretically supported, has had zero hands-on testing |
| **macOS aarch64 (Apple Silicon)** | Untested | Untested | Path bug fixed this commit (now uses `~/Library/Application Support/Lumotia/`); Info.plist needs `NSMicrophoneUsageDescription` for the app bundle | **LOW** — theoretically supported, has had zero hands-on testing |
| **macOS x86_64 (Intel)** | Same as Apple Silicon | Same | Same | **LOW** |
**For the friends beta on Linux only**, this matters not at all. For a future Windows or macOS build, expect to spend a focused day or two debugging:
@@ -209,7 +209,7 @@ env GDK_BACKEND=x11 WINIT_UNIX_BACKEND=x11 \
### What this sprint added on the cross-platform front
- `crates/storage/src/file_storage.rs::app_data_dir()` now correctly handles macOS (`~/Library/Application Support/Magnotia/`) and Linux (XDG-aware, `~/.local/share/magnotia`, with legacy `~/.magnotia` fallback for existing installs). Windows path unchanged.
- `crates/storage/src/file_storage.rs::app_data_dir()` now correctly handles macOS (`~/Library/Application Support/Lumotia/`) and Linux (XDG-aware, `~/.local/share/lumotia`, with legacy `~/.lumotia` fallback for existing installs). Windows path unchanged.
- New Tauri command `get_os_info` returns `{os, arch, family, usesCmd, isWayland, customHotkeyBackend, primaryModifierLabel}` so the frontend can adapt UI strings (Cmd vs Ctrl labels, "Open Finder" vs "Open Explorer", etc).
- New `src/lib/utils/osInfo.js` helper: async `loadOsInfo()` warms a cache, then `isMac() / isWindows() / isLinux() / modKeyLabel() / isWayland()` are synchronous. Eagerly loaded at app startup in the root layout.
- Falls back gracefully in browser-preview mode by reading `navigator.platform`.
@@ -242,7 +242,7 @@ src/routes/+layout.svelte (+ ToastViewport mount)
1. Real-user feedback from one to three friends. What confuses them?
What feels slow? What did they expect that did not happen?
2. Address the deferred items in priority of feedback signal.
3. Consider opening up the `magnotia-public-beta` channel — a single
3. Consider opening up the `lumotia-public-beta` channel — a single
GitHub release with the auto-updater plumbed.
4. The architecture review's other items (frontend test coverage,
monolithic component split, hardcoded hex colours, ARIA gaps)
@@ -250,6 +250,6 @@ src/routes/+layout.svelte (+ ToastViewport mount)
---
*Compiled 2026/04/17 by Wren. Magnotia goes from "live transcription does not
*Compiled 2026/04/17 by Wren. Lumotia goes from "live transcription does not
work" to "ready to put in front of one trusted friend." Six commits, no
horrors so far.*

View File

@@ -1,11 +1,11 @@
---
name: handover-2026-04-18
type: reference
tags: [handover, session, magnotia]
tags: [handover, session, lumotia]
description: Session handover — 2026/04/18 dogfooding sprint
---
# Magnotia Handover — 2026/04/18
# Lumotia Handover — 2026/04/18
*Originally written when the product was named Kon (and briefly Corbie); references rewritten in the 2026-04-30 rebrand sweep.*
@@ -15,7 +15,7 @@ Phase 1 brand migration and Phase 2 polish are both **complete and committed**.
## What's working
- **18/18 automated validation checks pass** (Playwright, `python3 /tmp/magnotia_validation.py`)
- **18/18 automated validation checks pass** (Playwright, `python3 /tmp/lumotia_validation.py`)
- **Pre-warm fixed** — `tauri::async_runtime::spawn` instead of `tokio::spawn`; model loads in background before first dictation
- **Preferences infinite loop fixed** — `Object.assign` mutation instead of object reassignment; Svelte 5 module state now stable
- **DOM hydration fixed** — `applyToDOM` called on store init so `data-theme` is always set, even without Tauri webview injection
@@ -34,7 +34,7 @@ sudo dnf install vulkan-headers vulkan-loader-devel glslc
Then launch:
```bash
cd /home/jake/Documents/CORBEL-Projects/magnotia
cd /home/jake/Documents/CORBEL-Projects/lumotia
LIBCLANG_PATH=/usr/lib64/llvm21/lib64 npm run tauri dev
```
@@ -51,7 +51,7 @@ Three items from the validation checklist that need real Tauri runtime:
### Pre-release (before any build beyond Jake's machine)
- [ ] Updater signing key — `tauri signer generate`, public key → `tauri.conf.json`, private key → CI secrets
- [ ] ggml dedup — plan at `docs/superpowers/plans/2026-04-18-magnotia-ggml-dedup.md`, Option A (system-ggml shared lib), execute at Phase 3
- [ ] ggml dedup — plan at `docs/superpowers/plans/2026-04-18-lumotia-ggml-dedup.md`, Option A (system-ggml shared lib), execute at Phase 3
## Gotchas discovered today
@@ -66,7 +66,7 @@ Three items from the validation checklist that need real Tauri runtime:
## Resume prompt
```
Picking up Magnotia dogfooding from the 2026/04/18 session.
Picking up Lumotia dogfooding from the 2026/04/18 session.
HANDOVER is at HANDOVER.md in the project root.
First job: confirm Vulkan GPU build compiles and check startup logs for RTX 4070.
Then run the three manual validation items from the handover.

View File

@@ -1,11 +1,11 @@
---
name: handover-2026-04-19
type: reference
tags: [handover, session, magnotia]
tags: [handover, session, lumotia]
description: Session handover — 2026/04/19 dogfood polish + cross-platform window chrome
---
# Magnotia Handover — 2026/04/19
# Lumotia Handover — 2026/04/19
*Originally written when the product was named Kon (and briefly Corbie); references rewritten in the 2026-04-30 rebrand sweep.*
@@ -14,7 +14,7 @@ Second dogfood sprint. Four phases: (1) fix bugs surfaced on first real use, (2)
## What shipped this session
### Cross-window preferences sync
- `preferences.svelte.js` emits `magnotia:preferences-changed` Tauri event on update.
- `preferences.svelte.js` emits `lumotia:preferences-changed` Tauri event on update.
- Main / viewer / float layouts listen and call `applyExternalPreferences` without re-emit, so theme and font changes propagate live across sibling windows.
- Echo suppressed via source window label check.
@@ -30,13 +30,13 @@ Second dogfood sprint. Four phases: (1) fix bugs surfaced on first real use, (2)
- **Tags**: `$lib/utils/frontmatter.js` exposes `deriveAutoTags` (currently returns `[]`), `buildFrontmatter`, `serialiseFrontmatter`, `buildMarkdown`. Manual tags stored as `item.manualTags`, rendered as removable chips in the expanded row with `+ add tag` input.
- Header tag chip bar (cap 7, click to filter, × to clear), plus `tag:xyz` search syntax.
- Global **Starred** filter toggle in the History header.
- Research memo found all five previous auto-tag families redundant with existing row UI — kept the derivation hook for the post-Task-7 `topic:*` content tag from magnotia-llm.
- Research memo found all five previous auto-tag families redundant with existing row UI — kept the derivation hook for the post-Task-7 `topic:*` content tag from lumotia-llm.
- Duplicate-transcript render fix: expanded `<p>` only if compact preview actually truncated.
### Viewer / editor popout
- `/viewer` route now reads `magnotia_viewer_mode` from localStorage ("view" | "edit").
- `/viewer` route now reads `lumotia_viewer_mode` from localStorage ("view" | "edit").
- Edit mode renders a plain textarea bound to `item.text`; 400ms debounced save flushes on input, final flush on `onDestroy`. Segment-specific controls (Compact, Starred) hidden in edit mode.
- Native title: **"Magnotia - Transcription Editor"**.
- Native title: **"Lumotia - Transcription Editor"**.
### Platform-aware window chrome (Linux fix)
**Root cause:** Tauri v2 frameless `decorations: false` on KDE Wayland + webkit2gtk does not honour diagonal corner resize (collapses `NorthEast` etc. to a single axis via GTK's `gtk_window_begin_resize_drag`), and `data-tauri-drag-region` adds noticeable drag latency. Setting `setPointerCapture` ahead of `startResizeDragging` does not help once the compositor has taken over the pointer grab. Verified via Context7 docs + Codex diagnosis — Linux frameless is a known-fragile path.
@@ -45,7 +45,7 @@ Second dogfood sprint. Four phases: (1) fix bugs surfaced on first real use, (2)
- Linux uses **native KWin/Mutter decorations**. `src-tauri/tauri.linux.conf.json` overlays `decorations: true` + full main window config (title, sizes) — overlays **replace** the windows array, so every field must be present, not just the delta. `src-tauri/src/commands/windows.rs` uses `cfg!(target_os = "linux")` to set decorations per window.
- macOS / Windows keep custom chrome. `src/lib/utils/osInfo.js` `isLinux()` gates `<Titlebar>` and `<ResizeHandles>` via `useCustomChrome = $state(false)`; flips to `!isLinux()` after `loadOsInfo()` resolves.
- Dueling drag-region handlers removed across Titlebar, float page, viewer page — everywhere a manual `startDragging()` lives, the `data-tauri-drag-region` attribute was deleted (they're alternatives per Tauri docs, not combinable).
- `ResizeHandles` kept for macOS/Windows frameless: 12 px edges / 20 px corners via CSS vars (`--magnotia-resize-edge`, `--magnotia-resize-corner`), `pointerdown` + `setPointerCapture`, corners with explicit higher z-index. Handles rendered as siblings of the animated layout div so `position: fixed` is viewport-relative rather than captured by the transform containing block.
- `ResizeHandles` kept for macOS/Windows frameless: 12 px edges / 20 px corners via CSS vars (`--lumotia-resize-edge`, `--lumotia-resize-corner`), `pointerdown` + `setPointerCapture`, corners with explicit higher z-index. Handles rendered as siblings of the animated layout div so `position: fixed` is viewport-relative rather than captured by the transform containing block.
### Window minimum sizes (evidence-backed)
Research pass cited GNOME HIG (1024×600 desktop / 360×294 mobile floors), WCAG 2.2 SC 1.4.10 Reflow (320 CSS px), Raycast 750×474 as a reference for single-pane working width, and consistent A11y principle that nothing should clip in the default configuration.
@@ -66,16 +66,16 @@ Research pass cited GNOME HIG (1024×600 desktop / 360×294 mobile floors), WCAG
- Settings now shows the Vulkan option instead of the "This build is CPU-only" notice.
### Desktop shortcut
- `~/Desktop/Magnotia.desktop` launcher with the 128×128 icon, `Terminal=true` so logs are visible and Ctrl+C cleanly stops the run.sh wrapper.
- `~/Desktop/Lumotia.desktop` launcher with the 128×128 icon, `Terminal=true` so logs are visible and Ctrl+C cleanly stops the run.sh wrapper.
## What's deferred
- **Transparent windows (`transparent: true`)** — Tauri issue #13270 reports this smooths drag/resize further on Linux, but it's moot now that Linux uses native decorations.
- **File-system export (.md save dialog)** — currently clipboard-only. Needs a Rust `write_text_file` command for plugin-less file writes.
- **Bulk select + bulk export** in History.
- **LLM-powered content tags** (`topic:*`, `intent:*`) — slots into Task 7 `magnotia-llm` stub once Phase 3 wires real llama-cpp-2.
- **LLM-powered content tags** (`topic:*`, `intent:*`) — slots into Task 7 `lumotia-llm` stub once Phase 3 wires real llama-cpp-2.
- **Settings UX overhaul** — Jake flagged that current settings feel overwhelming. Proposed: bunch high-traffic settings, hide advanced behind a toggle. Brainstorm + plan deferred to a dedicated session.
- **Task 7 (MicroSteps end-to-end)** — storage + Tauri CRUD + magnotia-llm stub + frontend dual-write all landed in an earlier commit chain. The MicroSteps UI was written as the final task 7 step but not yet dogfooded against the stub LLM. Needs manual walkthrough.
- **Task 7 (MicroSteps end-to-end)** — storage + Tauri CRUD + lumotia-llm stub + frontend dual-write all landed in an earlier commit chain. The MicroSteps UI was written as the final task 7 step but not yet dogfooded against the stub LLM. Needs manual walkthrough.
## Gotchas discovered today
@@ -85,15 +85,15 @@ Research pass cited GNOME HIG (1024×600 desktop / 360×294 mobile floors), WCAG
| `data-tauri-drag-region` + manual `startDragging()` on the same node caused drag latency | Pick one — we use manual `startDragging` for the button/input early-return logic |
| Corner resize collapsed to single axis on KWin Wayland | Native decorations on Linux side-step the whole frameless path |
| `animate-float-enter` on the viewer/float layout root created a containing block that broke `position: fixed` on ResizeHandles children | Render ResizeHandles as a sibling of the animated div, not a descendant |
| Magnotia binary auto-respawned on file-save while a second run.sh was also launching → two visible instances sharing one Vite server | Do not script `./run.sh` while the user has already launched via the desktop icon; rely on HMR |
| Lumotia binary auto-respawned on file-save while a second run.sh was also launching → two visible instances sharing one Vite server | Do not script `./run.sh` while the user has already launched via the desktop icon; rely on HMR |
| `run.sh` leaves `"beforeDevCommand": ""` in tauri.conf.json if its cleanup trap is bypassed (e.g. SIGKILL) | Cleanup trap restores `"npm run dev"` on graceful exit; SIGTERM (not SIGKILL) is the right kill signal |
| `/proc/asound/cards` header lines have leading whitespace for 2-digit card ID alignment | Parser trims leading whitespace before checking for leading digit |
## How to resume
```
Picking up Magnotia dogfooding from 2026/04/19.
Picking up Lumotia dogfooding from 2026/04/19.
HANDOVER is at HANDOVER.md in the project root.
Active priorities: (1) confirm resize/drag/mic cleanup, (2) Task 7 MicroSteps
dogfood with magnotia-llm stub, (3) Settings UX brainstorm.
dogfood with lumotia-llm stub, (3) Settings UX brainstorm.
```

View File

@@ -1,11 +1,11 @@
---
name: handover-2026-04-24
type: reference
tags: [handover, session, magnotia, phase-8, gamification]
tags: [handover, session, lumotia, phase-8, gamification]
description: Session handover — 2026/04/24 Phase 8 forgiving gamification shipped end-to-end
---
# Magnotia Handover — 2026/04/24
# Lumotia Handover — 2026/04/24
*Originally written when the product was named Kon (and briefly Corbie); references rewritten in the 2026-04-30 rebrand sweep.*
@@ -13,7 +13,7 @@ Phase 8 session. Executed the forgiving-gamification spec + plan written at the
## Rebrand note
Product rename **Magnotia → Magnotia** still in flight. Copy in new docs is "Magnotia"; codebase paths / package names / repos still carry `magnotia`. No rebrand work this session. See `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_magnotia_rebrand.md`.
Product rename **Lumotia → Lumotia** still in flight. Copy in new docs is "Lumotia"; codebase paths / package names / repos still carry `lumotia`. No rebrand work this session. See `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_magnotia_rebrand.md`.
## What shipped this session
@@ -35,7 +35,7 @@ Today's header now shows `Tasks · 3 today` alongside a 7-day momentum sparkline
| `4ffdae9` | `completionStats.svelte.ts` store |
| `54ddd41` | `CompletionSparkline.svelte` component |
| `3cadbb0` | badge + sparkline wired into Tasks header (+ `$derived` → getter fix) |
| `c29720e` | emit `magnotia:task-uncompleted` + `magnotia:task-deleted` events |
| `c29720e` | emit `lumotia:task-uncompleted` + `lumotia:task-deleted` events |
| `fa93033` | settings toggle for momentum sparkline |
### Counting semantics (locked)
@@ -48,9 +48,9 @@ Today's header now shows `Tasks · 3 today` alongside a 7-day momentum sparkline
### Architectural notes worth carrying forward
- **`serde` is now a dependency of `magnotia-storage`.** Added because `DailyCompletionCount` is serialised directly to the frontend via Tauri. The existing `TaskRow``TaskDto` split wasn't reused because the struct has no camelCase translation need (`day`, `count` are already frontend-friendly). Simpler, one fewer file to maintain.
- **`serde` is now a dependency of `lumotia-storage`.** Added because `DailyCompletionCount` is serialised directly to the frontend via Tauri. The existing `TaskRow``TaskDto` split wasn't reused because the struct has no camelCase translation need (`day`, `count` are already frontend-friendly). Simpler, one fewer file to maintain.
- **`$derived` cannot be exported at module scope in `.svelte.ts`.** Svelte 5 errors with `derived_invalid_export`. Originally hit during Task 9 integration; fix landed in the same commit (`3cadbb0`). `svelte-check` misses this; only Vite catches it. Plan/spec both mistakenly prescribed `$derived`; future stores should use `export function fooCount(): number` + `(...)` call sites, or a `$derived` wrapped inside a component script.
- **Tuple `FromRow` in storage.** `magnotia-storage` strips sqlx's `derive` feature, so `#[derive(sqlx::FromRow)]` is not available. Use tuple `FromRow` `(String, i64)` etc. instead. Noted for future tasks in this crate.
- **Tuple `FromRow` in storage.** `lumotia-storage` strips sqlx's `derive` feature, so `#[derive(sqlx::FromRow)]` is not available. Use tuple `FromRow` `(String, i64)` etc. instead. Noted for future tasks in this crate.
## Verification state at session end
@@ -64,7 +64,7 @@ Fresh run on `main` tip `fa93033`:
## Owed to Jake (next session)
1. **Manual dogfood walkthrough.** Cannot be driven by an automated agent. When opening Magnotia next:
1. **Manual dogfood walkthrough.** Cannot be driven by an automated agent. When opening Lumotia next:
- Fresh state, no completions → header shows only "Tasks" title; no badge, no sparkline.
- Complete one top-level task → badge "1 today"; sparkline appears.
- Complete two more → badge "3 today".
@@ -81,9 +81,9 @@ Fresh run on `main` tip `fa93033`:
3. **Plan quality note for future Phase 9+ plans.** Two patterns I prescribed turned out to be wrong on this codebase and only surfaced during execution:
- `$derived` at `.svelte.ts` module scope: not supported.
- `#[derive(sqlx::FromRow)]` in `magnotia-storage`: feature is stripped.
- `#[derive(sqlx::FromRow)]` in `lumotia-storage`: feature is stripped.
Worth a one-screen "magnotia-storage gotchas" reference file or at least a note at the top of future plans that touch these areas.
Worth a one-screen "lumotia-storage gotchas" reference file or at least a note at the top of future plans that touch these areas.
## What's left for v0.1
@@ -94,7 +94,7 @@ Unchanged except for Phase 8 now being closed:
| Phases 1 to 8 | **All shipped.** |
| Phase 9 | Polish debt (file-system .md save dialog, bulk select/export in History, LLM content tags, settings UX pass, visual polish, accessibility sweep). Absorbs backlog above. 1 to 2 days. |
| Phase 10a | QC: dogfood walkthrough, Rachmann's RB-08 Mac verification (parallel), cross-platform CI, a11y regression, clean-install test. Half day. |
| Phase 10b | Magnotia → Magnotia rename sweep: package name, all 10 crates, bundle ids, install paths, `magnotia.db``magnotia.db`, event names, repo rename on both remotes. Half to 1 day. |
| Phase 10b | Lumotia → Lumotia rename sweep: package name, all 10 crates, bundle ids, install paths, `lumotia.db``lumotia.db`, event names, repo rename on both remotes. Half to 1 day. |
| Phase 10c | Release: 0.1.0 version sync, CHANGELOG seeded from roadmap phases, release notes, tag + push. Half day. |
### Release-blocker state
@@ -117,7 +117,7 @@ Unchanged except for Phase 8 now being closed:
- Spec: [docs/superpowers/specs/2026-04-24-phase8-forgiving-gamification-design.md](docs/superpowers/specs/2026-04-24-phase8-forgiving-gamification-design.md)
- Plan: [docs/superpowers/plans/2026-04-24-phase8-forgiving-gamification.md](docs/superpowers/plans/2026-04-24-phase8-forgiving-gamification.md)
- Roadmap: [docs/roadmap/2026-04-23-magnotia-feature-complete-roadmap.md](docs/roadmap/2026-04-23-magnotia-feature-complete-roadmap.md)
- Roadmap: [docs/roadmap/2026-04-23-lumotia-feature-complete-roadmap.md](docs/roadmap/2026-04-23-lumotia-feature-complete-roadmap.md)
- Previous handover: [HANDOVER-2026-04-19.md](HANDOVER-2026-04-19.md)
- Release-blocker index: [docs/issues/README.md](docs/issues/README.md)
- Rebrand memory: `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_magnotia_rebrand.md`