diff --git a/HANDOVER.md b/HANDOVER.md
index 63d96f4..f6648a6 100644
--- a/HANDOVER.md
+++ b/HANDOVER.md
@@ -13,7 +13,7 @@ Phase 9 session. Spec + plan written from scratch and committed; plan correction
## Rebrand note
-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`.
+Product rename **Magnotia → Lumotia** completed 2026/05/13 (cascade across both repos, all 15 phases, cynical-QC gated). Codebase paths, package names, crate names, bundle identifier (`consulting.corbel.lumotia`), localStorage keys, settings keys, event channels, and on-disk data dir all carry `lumotia`. Migration shims preserve existing user data (data-dir rename, settings-key rename, localStorage-key rename). Remote repo rename pending Jake's action. See `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_lumotia_rebrand_cascade_complete.md` (write pending Phase 15.5 of the cascade plan).
## What shipped this session
@@ -25,7 +25,7 @@ Product rename **Lumotia → Lumotia** still in flight. Copy in new docs is "Lum
### 9b — LLM content tags
- `lumotia-llm` exports a new `ContentTags { topic, intent }`, an `INTENT_CLOSED_SET`, an `is_valid_intent` helper, a `CONTENT_TAGS_SYSTEM` prompt and a `CONTENT_TAGS_GRAMMAR` GBNF (recursive style matching the existing `TASK_ARRAY_GRAMMAR`).
-- `LlmEngine::extract_content_tags` method follows the same render-chat → generate → JSON-parse shape as the existing `cleanup_text` and `extract_tasks`. Truncates to the trailing 2000 chars on a UTF-8 boundary; max_tokens 96 is enough for the JSON envelope. Smoke test in `crates/llm/tests/content_tags_smoke.rs` is gated on `MAGNOTIA_LLM_TEST_MODEL` matching the Phase 8 pattern.
+- `LlmEngine::extract_content_tags` method follows the same render-chat → generate → JSON-parse shape as the existing `cleanup_text` and `extract_tasks`. Truncates to the trailing 2000 chars on a UTF-8 boundary; max_tokens 96 is enough for the JSON envelope. Smoke test in `crates/llm/tests/content_tags_smoke.rs` is gated on `LUMOTIA_LLM_TEST_MODEL` matching the Phase 8 pattern.
- `extract_content_tags_cmd` Tauri wrapper bridges through `state.llm_engine` with the standard `spawn_blocking` + `PowerAssertion` guard.
### 9b structural — migration v14 + persistence wiring
@@ -92,7 +92,7 @@ The original Phase 9 spec + plan committed at `49a795f` + `48d3db7` had three mi
| Phases 1-8 | All shipped. |
| Phase 9 | **Mostly shipped this session.** Export plumbing, LLM content tags (with persistence), polish on sparkline + badge are live. SettingsPage deeper restructure + walkthrough a11y sweeps deferred. Roadmap entry updated. |
| Phase 10a | QC: dogfood walkthrough (above), Rachmann's RB-08 Mac verification (parallel), cross-platform CI, a11y regression, clean-install test. Half 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 10b | Magnotia → Lumotia rename sweep: **COMPLETE 2026/05/13** (cascade across both repos, 15 phases). Remote repo rename pending Jake. |
| Phase 10c | Release: 0.1.0 version sync, CHANGELOG seeded from roadmap phases, release notes, tag + push. Half day. |
### Release-blocker state
@@ -114,5 +114,5 @@ The original Phase 9 spec + plan committed at `49a795f` + `48d3db7` had three mi
- 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-24.md](HANDOVER-2026-04-24.md) (Phase 8)
- 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`
+- Rebrand memory: `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_lumotia_rebrand_cascade_complete.md`
- Active-focus upstream: `context/active-focus.md` in CORBEL-Main
diff --git a/docs/architecture-map/README.md b/docs/architecture-map/README.md
index 06bb6f0..cca11c2 100644
--- a/docs/architecture-map/README.md
+++ b/docs/architecture-map/README.md
@@ -117,7 +117,7 @@ Open items surfaced by the slice maps. Each slice's README has its own debt sect
- **No prompt versioning.** No `PROMPT_VERSION` constant. Cached cleanup output will silently drift across prompt revisions.
- **Trivial-true GPU cross-check (commit `052265b`).** `gpu_offloaded` derived from `use_gpu && gpu_layers >= n_layer` is provably true today because `gpu_layers = u32::MAX` whenever `use_gpu` is set. Real residency observability needs llama.cpp log parsing.
- **MAX_CONTEXT_TOKENS is a process-wide cap of 8192** regardless of model tier. The 27B tier has a much larger native context that is never advertised.
-- **`MAGNOTIA_LLM_TEST_MODEL` env-var gate** is the only thing keeping the LLM smoke tests honest. Worth documenting in a contributor note.
+- **`LUMOTIA_LLM_TEST_MODEL` env-var gate** is the only thing keeping the LLM smoke tests honest. Worth documenting in a contributor note.
- **British English regex misses `-ing` forms** of `-ize` verbs (e.g. `organizing` slips through unconverted).
- **Multi-token phrase repetition not detected** by the anti-hallucination filter. Five repetitions of `"thank you"` does not trigger.
diff --git a/src/design-system/ui_kits/index.html b/src/design-system/ui_kits/index.html
index 03356fa..5a6dc2d 100644
--- a/src/design-system/ui_kits/index.html
+++ b/src/design-system/ui_kits/index.html
@@ -75,7 +75,7 @@ const { useState, useEffect, useRef } = React;
function pad(n){ return String(n).padStart(2,'0'); }
-function MagnotiaApp() {
+function LumotiaApp() {
const [current, setCurrent] = useState('dictation');
const [recording, setRecording] = useState(false);
const [seconds, setSeconds] = useState(0);
@@ -142,7 +142,7 @@ function MagnotiaApp() {
);
}
-ReactDOM.createRoot(document.getElementById('root')).render();
+ReactDOM.createRoot(document.getElementById('root')).render();