chore: rebrand from Kon/Corbie to Magnotia

Replace all instances of the legacy product names "Kon" and "Corbie" with
"Magnotia" across user-facing copy, code identifiers, package names, bundle
ids, file paths, and documentation. Preserves the unrelated "konsole" (KDE
terminal) reference and the parent CORBEL company name.

- Renames 10 Rust crates (kon-* → magnotia-*) and the tauri binary
- Updates package.json, tauri.conf.json (productName + identifier)
- Renames CSS classes (kon-rh-* → magnotia-rh-*) and animations
- Renames brand and roadmap docs
- Regenerates Cargo.lock and package-lock.json

Verified: svelte-check passes; pure-rust crates compile under new names.
This commit is contained in:
Claude
2026-04-30 13:06:55 +00:00
parent 749403697a
commit 89c63891fa
186 changed files with 1297 additions and 1297 deletions

View File

@@ -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 kon-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 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.
- 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 kon-storage migration_v13 -- --nocapture`
Run: `cargo test -p magnotia-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 kon-storage migration_v13 -- --nocapture`
Run: `cargo test -p magnotia-storage migration_v13 -- --nocapture`
Expected: PASS.
- [ ] **Step 5: Run the full storage test suite to confirm no regression**
Run: `cargo test -p kon-storage`
Run: `cargo test -p magnotia-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 kon-storage cascade_sets_auto_completed -- --nocapture`
Run: `cargo test -p magnotia-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**
@@ -223,7 +223,7 @@ if pending == 0 {
.bind(&pid)
.execute(&mut *tx)
.await
.map_err(|e| KonError::StorageError(format!("Auto-complete parent failed: {e}")))?;
.map_err(|e| MagnotiaError::StorageError(format!("Auto-complete parent failed: {e}")))?;
}
```
@@ -240,18 +240,18 @@ if pending == 0 {
.bind(&pid)
.execute(&mut *tx)
.await
.map_err(|e| KonError::StorageError(format!("Auto-complete parent failed: {e}")))?;
.map_err(|e| MagnotiaError::StorageError(format!("Auto-complete parent failed: {e}")))?;
}
```
- [ ] **Step 4: Run test to verify it passes**
Run: `cargo test -p kon-storage cascade_sets_auto_completed -- --nocapture`
Run: `cargo test -p magnotia-storage cascade_sets_auto_completed -- --nocapture`
Expected: PASS.
- [ ] **Step 5: Run the full storage test suite**
Run: `cargo test -p kon-storage`
Run: `cargo test -p magnotia-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 kon-storage uncomplete_clears_auto_completed -- --nocapture`
Run: `cargo test -p magnotia-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 kon-storage uncomplete_clears_auto_completed -- --nocapture`
Run: `cargo test -p magnotia-storage uncomplete_clears_auto_completed -- --nocapture`
Expected: PASS.
- [ ] **Step 5: Run the full storage test suite**
Run: `cargo test -p kon-storage`
Run: `cargo test -p magnotia-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 kon-storage list_recent_completions -- --nocapture`
Run: `cargo test -p magnotia-storage list_recent_completions -- --nocapture`
Expected: FAIL — function not defined.
- [ ] **Step 3: Add the struct and function**
@@ -562,7 +562,7 @@ pub async fn list_recent_completions(
.bind(format!("-{} days", days - 1))
.fetch_all(pool)
.await
.map_err(|e| KonError::StorageError(format!("List recent completions failed: {e}")))?;
.map_err(|e| MagnotiaError::StorageError(format!("List recent completions failed: {e}")))?;
let lookup: std::collections::HashMap<String, u32> = rows
.into_iter()
@@ -574,7 +574,7 @@ pub async fn list_recent_completions(
sqlx::query_as("SELECT DATE('now', 'localtime')")
.fetch_one(pool)
.await
.map_err(|e| KonError::StorageError(format!("Get local today failed: {e}")))?;
.map_err(|e| MagnotiaError::StorageError(format!("Get local today failed: {e}")))?;
let today = today_row.0;
let mut series = Vec::with_capacity(days as usize);
@@ -588,7 +588,7 @@ pub async fn list_recent_completions(
.bind(format!("-{offset} days"))
.fetch_one(pool)
.await
.map_err(|e| KonError::StorageError(format!("Compute spine day failed: {e}")))?;
.map_err(|e| MagnotiaError::StorageError(format!("Compute spine day failed: {e}")))?;
let count = lookup.get(&day).copied().unwrap_or(0);
series.push(DailyCompletionCount { day, count });
}
@@ -607,17 +607,17 @@ pub use database::{DailyCompletionCount, list_recent_completions};
- [ ] **Step 4: Run tests to verify they pass**
Run: `cargo test -p kon-storage list_recent_completions -- --nocapture`
Run: `cargo test -p magnotia-storage list_recent_completions -- --nocapture`
Expected: all 4 new tests PASS.
- [ ] **Step 5: Run the full storage test suite**
Run: `cargo test -p kon-storage`
Run: `cargo test -p magnotia-storage`
Expected: all tests pass.
- [ ] **Step 6: Verify clippy + fmt**
Run: `cargo clippy -p kon-storage -- -D warnings && cargo fmt --check`
Run: `cargo clippy -p magnotia-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 kon_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 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.
- [ ] **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 kon`
Run: `cargo build -p magnotia`
Expected: clean build.
- [ ] **Step 5: Verify clippy + fmt**
Run: `cargo clippy -p kon -- -D warnings && cargo fmt --check`
Run: `cargo clippy -p magnotia -- -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 kon_storage::list_recent_completions, parameterised
Thin wrapper over magnotia_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)
// - kon:task-completed (from page.svelte.ts completeTask)
// - kon:step-completed (from MicroSteps.svelte)
// - kon:task-uncompleted (new event — emitted by uncompleteTask)
// - kon:task-deleted (new event — emitted by deleteTask)
// - 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)
// - 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("kon:task-completed", handler);
window.addEventListener("kon:step-completed", handler);
window.addEventListener("kon:task-uncompleted", handler);
window.addEventListener("kon:task-deleted", handler);
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("focus", handler);
if (hasTauriRuntime()) {
@@ -1034,12 +1034,12 @@ EOF
---
### Task 10: Dispatch `kon:task-uncompleted` + `kon:task-deleted`
### Task 10: Dispatch `magnotia:task-uncompleted` + `magnotia:task-deleted`
**Files:**
- Modify: `src/lib/stores/page.svelte.ts``uncompleteTask` (line 470-479) and `deleteTask` (line 438-451).
- [ ] **Step 1: Emit `kon:task-uncompleted` from `uncompleteTask`**
- [ ] **Step 1: Emit `magnotia: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("kon:task-uncompleted", { detail: { id } }));
window.dispatchEvent(new CustomEvent("magnotia:task-uncompleted", { detail: { id } }));
}
```
- [ ] **Step 2: Emit `kon:task-deleted` from `deleteTask`**
- [ ] **Step 2: Emit `magnotia: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("kon:task-deleted", { detail: { id } }));
window.dispatchEvent(new CustomEvent("magnotia: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 kon:task-completed.
paths, which don't currently fire magnotia: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-corbie-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-magnotia-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-corbie-feature-complete-roadmap.md HANDOVER.md
git add docs/roadmap/2026-04-23-magnotia-feature-complete-roadmap.md HANDOVER.md
git commit -m "$(cat <<'EOF'
docs(phase8): mark Phase 8 shipped + refresh handover