agent: lumotia-rebrand — docs, scripts, root config, residuals
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:
@@ -16,7 +16,7 @@
|
||||
|
||||
- Branch: `main` (Jake's standing rule — phases ship on main, not feature branches).
|
||||
- Commit after each task. Format: `feat(gamification): [what changed]`, or `fix(gamification): …` for a within-phase correction. Each task's final step is the commit.
|
||||
- Test runner on Rust: `cargo test -p magnotia-storage` (or crate name in workspace). Frontend has **no test runner** — `npm run check` is the only type/lint gate; correctness is verified by cargo tests on the backend and manual dogfood on the frontend, deferred to Phase 10a QC.
|
||||
- Test runner on Rust: `cargo test -p lumotia-storage` (or crate name in workspace). Frontend has **no test runner** — `npm run check` is the only type/lint gate; correctness is verified by cargo tests on the backend and manual dogfood on the frontend, deferred to Phase 10a QC.
|
||||
- British English in user-facing copy.
|
||||
- No em / en dashes in prose or strings.
|
||||
|
||||
@@ -97,7 +97,7 @@ async fn migration_v13_adds_auto_completed_column() {
|
||||
|
||||
- [ ] **Step 2: Run test to verify it fails**
|
||||
|
||||
Run: `cargo test -p magnotia-storage migration_v13 -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage migration_v13 -- --nocapture`
|
||||
Expected: FAIL with "no such column: auto_completed" or "expected auto_completed column" depending on which assertion fires first.
|
||||
|
||||
- [ ] **Step 3: Add the migration entry**
|
||||
@@ -130,12 +130,12 @@ In `crates/storage/src/migrations.rs`, append to the `MIGRATIONS: &[(i64, &str,
|
||||
|
||||
- [ ] **Step 4: Run test to verify it passes**
|
||||
|
||||
Run: `cargo test -p magnotia-storage migration_v13 -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage migration_v13 -- --nocapture`
|
||||
Expected: PASS.
|
||||
|
||||
- [ ] **Step 5: Run the full storage test suite to confirm no regression**
|
||||
|
||||
Run: `cargo test -p magnotia-storage`
|
||||
Run: `cargo test -p lumotia-storage`
|
||||
Expected: all existing tests still pass.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
@@ -209,7 +209,7 @@ async fn cascade_sets_auto_completed_on_parent_only() {
|
||||
|
||||
- [ ] **Step 2: Run test to verify it fails**
|
||||
|
||||
Run: `cargo test -p magnotia-storage cascade_sets_auto_completed -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage cascade_sets_auto_completed -- --nocapture`
|
||||
Expected: FAIL — parent_auto is 0 because the cascade UPDATE doesn't set the flag yet.
|
||||
|
||||
- [ ] **Step 3: Modify the cascade UPDATE**
|
||||
@@ -246,12 +246,12 @@ if pending == 0 {
|
||||
|
||||
- [ ] **Step 4: Run test to verify it passes**
|
||||
|
||||
Run: `cargo test -p magnotia-storage cascade_sets_auto_completed -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage cascade_sets_auto_completed -- --nocapture`
|
||||
Expected: PASS.
|
||||
|
||||
- [ ] **Step 5: Run the full storage test suite**
|
||||
|
||||
Run: `cargo test -p magnotia-storage`
|
||||
Run: `cargo test -p lumotia-storage`
|
||||
Expected: all tests pass.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
@@ -317,7 +317,7 @@ async fn uncomplete_clears_auto_completed_on_parent() {
|
||||
|
||||
- [ ] **Step 2: Run test to verify it fails**
|
||||
|
||||
Run: `cargo test -p magnotia-storage uncomplete_clears_auto_completed -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage uncomplete_clears_auto_completed -- --nocapture`
|
||||
Expected: FAIL on the `parent_auto` assertion (still 1).
|
||||
|
||||
- [ ] **Step 3: Modify both UPDATE statements in `uncomplete_task`**
|
||||
@@ -357,12 +357,12 @@ sqlx::query(
|
||||
|
||||
- [ ] **Step 4: Run test to verify it passes**
|
||||
|
||||
Run: `cargo test -p magnotia-storage uncomplete_clears_auto_completed -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage uncomplete_clears_auto_completed -- --nocapture`
|
||||
Expected: PASS.
|
||||
|
||||
- [ ] **Step 5: Run the full storage test suite**
|
||||
|
||||
Run: `cargo test -p magnotia-storage`
|
||||
Run: `cargo test -p lumotia-storage`
|
||||
Expected: all tests pass.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
@@ -507,7 +507,7 @@ async fn list_recent_completions_uses_local_day_boundary() {
|
||||
|
||||
- [ ] **Step 2: Run tests to verify they fail**
|
||||
|
||||
Run: `cargo test -p magnotia-storage list_recent_completions -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage list_recent_completions -- --nocapture`
|
||||
Expected: FAIL — function not defined.
|
||||
|
||||
- [ ] **Step 3: Add the struct and function**
|
||||
@@ -607,17 +607,17 @@ pub use database::{DailyCompletionCount, list_recent_completions};
|
||||
|
||||
- [ ] **Step 4: Run tests to verify they pass**
|
||||
|
||||
Run: `cargo test -p magnotia-storage list_recent_completions -- --nocapture`
|
||||
Run: `cargo test -p lumotia-storage list_recent_completions -- --nocapture`
|
||||
Expected: all 4 new tests PASS.
|
||||
|
||||
- [ ] **Step 5: Run the full storage test suite**
|
||||
|
||||
Run: `cargo test -p magnotia-storage`
|
||||
Run: `cargo test -p lumotia-storage`
|
||||
Expected: all tests pass.
|
||||
|
||||
- [ ] **Step 6: Verify clippy + fmt**
|
||||
|
||||
Run: `cargo clippy -p magnotia-storage -- -D warnings && cargo fmt --check`
|
||||
Run: `cargo clippy -p lumotia-storage -- -D warnings && cargo fmt --check`
|
||||
Expected: clean.
|
||||
|
||||
- [ ] **Step 7: Commit**
|
||||
@@ -647,7 +647,7 @@ EOF
|
||||
|
||||
- [ ] **Step 1: Add the import at the top of `src-tauri/src/commands/tasks.rs`**
|
||||
|
||||
Update the existing `use magnotia_storage::{...}` block (currently starting at line 10) to include the new symbols. Add `DailyCompletionCount, list_recent_completions as db_list_recent_completions` alongside the existing entries.
|
||||
Update the existing `use lumotia_storage::{...}` block (currently starting at line 10) to include the new symbols. Add `DailyCompletionCount, list_recent_completions as db_list_recent_completions` alongside the existing entries.
|
||||
|
||||
- [ ] **Step 2: Add the command at the end of `src-tauri/src/commands/tasks.rs`**
|
||||
|
||||
@@ -676,12 +676,12 @@ In `src-tauri/src/lib.rs`, inside the `invoke_handler!` block, below the existin
|
||||
|
||||
- [ ] **Step 4: Compile**
|
||||
|
||||
Run: `cargo build -p magnotia`
|
||||
Run: `cargo build -p lumotia`
|
||||
Expected: clean build.
|
||||
|
||||
- [ ] **Step 5: Verify clippy + fmt**
|
||||
|
||||
Run: `cargo clippy -p magnotia -- -D warnings && cargo fmt --check`
|
||||
Run: `cargo clippy -p lumotia -- -D warnings && cargo fmt --check`
|
||||
Expected: clean.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
@@ -691,7 +691,7 @@ git add src-tauri/src/commands/tasks.rs src-tauri/src/lib.rs
|
||||
git commit -m "$(cat <<'EOF'
|
||||
feat(gamification): list_recent_completions_cmd Tauri wrapper
|
||||
|
||||
Thin wrapper over magnotia_storage::list_recent_completions, parameterised
|
||||
Thin wrapper over lumotia_storage::list_recent_completions, parameterised
|
||||
by day count. Serialises to camelCase JSON (day, count).
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||||
@@ -769,10 +769,10 @@ EOF
|
||||
//
|
||||
// Refresh triggers:
|
||||
// - module load (first time)
|
||||
// - magnotia:task-completed (from page.svelte.ts completeTask)
|
||||
// - magnotia:step-completed (from MicroSteps.svelte)
|
||||
// - magnotia:task-uncompleted (new event — emitted by uncompleteTask)
|
||||
// - magnotia:task-deleted (new event — emitted by deleteTask)
|
||||
// - lumotia:task-completed (from page.svelte.ts completeTask)
|
||||
// - lumotia:step-completed (from MicroSteps.svelte)
|
||||
// - lumotia:task-uncompleted (new event — emitted by uncompleteTask)
|
||||
// - lumotia:task-deleted (new event — emitted by deleteTask)
|
||||
// - window focus (for day rollover while the app stayed open
|
||||
// past midnight)
|
||||
//
|
||||
@@ -813,10 +813,10 @@ if (typeof window !== "undefined") {
|
||||
const handler = () => {
|
||||
refresh().catch(() => {});
|
||||
};
|
||||
window.addEventListener("magnotia:task-completed", handler);
|
||||
window.addEventListener("magnotia:step-completed", handler);
|
||||
window.addEventListener("magnotia:task-uncompleted", handler);
|
||||
window.addEventListener("magnotia:task-deleted", handler);
|
||||
window.addEventListener("lumotia:task-completed", handler);
|
||||
window.addEventListener("lumotia:step-completed", handler);
|
||||
window.addEventListener("lumotia:task-uncompleted", handler);
|
||||
window.addEventListener("lumotia:task-deleted", handler);
|
||||
window.addEventListener("focus", handler);
|
||||
|
||||
if (hasTauriRuntime()) {
|
||||
@@ -1034,12 +1034,12 @@ EOF
|
||||
|
||||
---
|
||||
|
||||
### Task 10: Dispatch `magnotia:task-uncompleted` + `magnotia:task-deleted`
|
||||
### Task 10: Dispatch `lumotia:task-uncompleted` + `lumotia:task-deleted`
|
||||
|
||||
**Files:**
|
||||
- Modify: `src/lib/stores/page.svelte.ts` — `uncompleteTask` (line 470-479) and `deleteTask` (line 438-451).
|
||||
|
||||
- [ ] **Step 1: Emit `magnotia:task-uncompleted` from `uncompleteTask`**
|
||||
- [ ] **Step 1: Emit `lumotia:task-uncompleted` from `uncompleteTask`**
|
||||
|
||||
Current body:
|
||||
```ts
|
||||
@@ -1060,11 +1060,11 @@ Replace the try-block body with:
|
||||
await invoke("uncomplete_task_cmd", { id });
|
||||
applyLocalTaskUpdate(id, { done: false, doneAt: null });
|
||||
if (typeof window !== "undefined") {
|
||||
window.dispatchEvent(new CustomEvent("magnotia:task-uncompleted", { detail: { id } }));
|
||||
window.dispatchEvent(new CustomEvent("lumotia:task-uncompleted", { detail: { id } }));
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Emit `magnotia:task-deleted` from `deleteTask`**
|
||||
- [ ] **Step 2: Emit `lumotia:task-deleted` from `deleteTask`**
|
||||
|
||||
Current body:
|
||||
```ts
|
||||
@@ -1087,7 +1087,7 @@ Add the dispatch inside the success path, right after `broadcastTasks();`:
|
||||
|
||||
```ts
|
||||
if (typeof window !== "undefined") {
|
||||
window.dispatchEvent(new CustomEvent("magnotia:task-deleted", { detail: { id } }));
|
||||
window.dispatchEvent(new CustomEvent("lumotia:task-deleted", { detail: { id } }));
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1105,7 +1105,7 @@ feat(gamification): emit task-uncompleted + task-deleted events
|
||||
|
||||
Phase 8 completionStats store listens on these events to refresh the
|
||||
daily count. Keeps the badge + sparkline accurate after un-tick / delete
|
||||
paths, which don't currently fire magnotia:task-completed.
|
||||
paths, which don't currently fire lumotia:task-completed.
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||||
EOF
|
||||
@@ -1222,7 +1222,7 @@ Record any deviations in the handover. Do not mark this step complete on compile
|
||||
### Task 13: Update roadmap and handover
|
||||
|
||||
**Files:**
|
||||
- Modify: `docs/roadmap/2026-04-23-magnotia-feature-complete-roadmap.md` (Phase 8 section — mark shipped, fold the revised-dropped-grace-days line into past tense).
|
||||
- Modify: `docs/roadmap/2026-04-23-lumotia-feature-complete-roadmap.md` (Phase 8 section — mark shipped, fold the revised-dropped-grace-days line into past tense).
|
||||
- Modify: `HANDOVER.md` (end-of-session summary).
|
||||
|
||||
- [ ] **Step 1: Update roadmap Phase 8 status**
|
||||
@@ -1247,7 +1247,7 @@ Replace the session summary with today's state:
|
||||
- [ ] **Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add docs/roadmap/2026-04-23-magnotia-feature-complete-roadmap.md HANDOVER.md
|
||||
git add docs/roadmap/2026-04-23-lumotia-feature-complete-roadmap.md HANDOVER.md
|
||||
git commit -m "$(cat <<'EOF'
|
||||
docs(phase8): mark Phase 8 shipped + refresh handover
|
||||
|
||||
|
||||
Reference in New Issue
Block a user