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:
@@ -1,18 +1,18 @@
|
||||
---
|
||||
name: Corbie — feature-complete roadmap
|
||||
name: Magnotia — feature-complete roadmap
|
||||
description: Build plan from 2026-04-23 baseline to full feature-complete v0.1 release
|
||||
type: roadmap
|
||||
tags: [roadmap, planning, corbie, release]
|
||||
tags: [roadmap, planning, magnotia, release]
|
||||
created: 2026/04/23
|
||||
status: active
|
||||
author: Wren (CORBEL's resident agent) on behalf of Jake Sames
|
||||
---
|
||||
|
||||
# Corbie — Feature-Complete Roadmap
|
||||
# Magnotia — Feature-Complete Roadmap
|
||||
|
||||
> **What Corbie is.** A local-first, cognitive-load-aware dictation + task-capture desktop app. Vulkan-accelerated Whisper / Parakeet speech-to-text, a local LLM (Qwen3 tiers) for transcript cleanup and task extraction, an MCP server for integration with Claude Desktop / Cline / Cursor, and a UI designed around ADHD / executive-dysfunction needs. Tauri 2 + Svelte 5 + Rust. Zero telemetry.
|
||||
> **What Magnotia is.** A local-first, cognitive-load-aware dictation + task-capture desktop app. Vulkan-accelerated Whisper / Parakeet speech-to-text, a local LLM (Qwen3 tiers) for transcript cleanup and task extraction, an MCP server for integration with Claude Desktop / Cline / Cursor, and a UI designed around ADHD / executive-dysfunction needs. Tauri 2 + Svelte 5 + Rust. Zero telemetry.
|
||||
>
|
||||
> **Formerly known as Kon.** Rebrand in flight; repo names at `jakejars/kon` + `git.corbel.consulting/jake/kon` still carry the Kon name and will rename together with the codebase sweep in the final phase.
|
||||
> **Formerly known as Magnotia.** Rebrand in flight; repo names at `jakejars/magnotia` + `git.corbel.consulting/jake/magnotia` still carry the Magnotia name and will rename together with the codebase sweep in the final phase.
|
||||
|
||||
## Baseline — where we are (2026/04/23)
|
||||
|
||||
@@ -32,19 +32,19 @@ MicroSteps is shipped; its "just-start" timer button emits an event that current
|
||||
|
||||
> **Layer 1 first** (per Jake's standing rule): build the features roughly, in series, through Phase 1 – Phase 8. Do polish passes in Phase 9 and QC + release in Phase 10. **Do not mix make-it-work and make-it-neat passes** — every phase ships end-to-end (event wired, UI rendered, store state committed, tests updated) but does not chase aesthetic polish until Phase 9.
|
||||
|
||||
> **Ordering rationale.** Phase 1 closes the Core MVP gap and unblocks the already-half-wired just-start timer. Phase 2 enables model improvement by collecting human feedback — useful even while later phases are being built. Phases 3–8 build the differentiating ADHD-specific features from highest-utility-per-effort to lowest. Phase 9 is polish debt. Phase 10 is release prep (including Rachmann's RB-08 verification and the Kon → Corbie codebase rename).
|
||||
> **Ordering rationale.** Phase 1 closes the Core MVP gap and unblocks the already-half-wired just-start timer. Phase 2 enables model improvement by collecting human feedback — useful even while later phases are being built. Phases 3–8 build the differentiating ADHD-specific features from highest-utility-per-effort to lowest. Phase 9 is polish debt. Phase 10 is release prep (including Rachmann's RB-08 verification and the Magnotia → Magnotia codebase rename).
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 — Visual countdown + Just-Start timer
|
||||
|
||||
**Why now.** Closes the one remaining Core MVP gap. Unblocks the dangling `kon:start-timer` emit from MicroSteps. Directly combats time blindness, which the brief names as the single biggest lever for the target audience.
|
||||
**Why now.** Closes the one remaining Core MVP gap. Unblocks the dangling `magnotia:start-timer` emit from MicroSteps. Directly combats time blindness, which the brief names as the single biggest lever for the target audience.
|
||||
|
||||
**Scope.**
|
||||
- `FocusTimer.svelte` — a progress-ring countdown component. Shrinking colour ring (not digital). Subtle colour shift across the last 15%. Remaining time label inside the ring for users who want the number; small enough that the ring dominates the visual field.
|
||||
- `focusTimer.svelte.ts` store — single active timer, running / paused / completed state, elapsed / remaining computed, event dispatch on state transitions.
|
||||
- Mount in `+layout.svelte` so the timer persists across page navigation (dictation → tasks → settings).
|
||||
- Listener for `window` event `kon:start-timer` with `{ durationSeconds, label }` payload.
|
||||
- Listener for `window` event `magnotia:start-timer` with `{ durationSeconds, label }` payload.
|
||||
- Trigger from MicroSteps row (already exists). Trigger from task-row context button (new).
|
||||
- Floating position top-right of main content, above everything, not intrusive when idle (hidden until a timer is running).
|
||||
- On completion: gentle chime + 3-second ring flourish + OS notification via `tauri-plugin-notification`. No modal. No guilt copy.
|
||||
@@ -60,7 +60,7 @@ MicroSteps is shipped; its "just-start" timer button emits an event that current
|
||||
|
||||
## Phase 2 — Human-in-the-loop feedback
|
||||
|
||||
**Why here.** AI output quality is the single biggest determinant of whether Corbie feels useful. Thumbs-up / thumbs-down on AI-generated micro-steps and task extractions costs almost nothing to add and gives us a feedback corpus the moment anyone uses it. Enables later retraining / prompt tuning.
|
||||
**Why here.** AI output quality is the single biggest determinant of whether Magnotia feels useful. Thumbs-up / thumbs-down on AI-generated micro-steps and task extractions costs almost nothing to add and gives us a feedback corpus the moment anyone uses it. Enables later retraining / prompt tuning.
|
||||
|
||||
**Scope.**
|
||||
- Thumbs-up / thumbs-down buttons on every AI-generated item (micro-step row, extracted task, cleanup paragraph).
|
||||
@@ -141,9 +141,9 @@ MicroSteps is shipped; its "just-start" timer button emits an event that current
|
||||
|
||||
**Revised architecture — "nudge bus" hybrid.** Earlier drafts proposed a Rust-side OS-activity watcher (keyboard, active window). Cross-platform review flagged this as fragile: Wayland offers no sanctioned global-keyboard API, macOS needs accessibility permission, Windows needs a message-loop hook, and the signal is low quality everywhere. Deferred to post-v0.1.
|
||||
|
||||
Phase 6 instead ships a **frontend-owned nudge bus** that consumes signals Corbie already produces:
|
||||
Phase 6 instead ships a **frontend-owned nudge bus** that consumes signals Magnotia already produces:
|
||||
- Focus-timer state (running / completed / cancelled) — already on `window` events from Phase 1.
|
||||
- Task-completed events — adds a `kon:task-completed` window event dispatched when `complete_task_cmd` / `complete_subtask_cmd` resolve.
|
||||
- Task-completed events — adds a `magnotia:task-completed` window event dispatched when `complete_task_cmd` / `complete_subtask_cmd` resolve.
|
||||
- Micro-step generation — event from the decompose path.
|
||||
- Ritual state — `ritualsMorning`, `lastTriageDate` from settings/storage.
|
||||
- App focus / visibility — `document.visibilitychange` + Tauri window `focus`/`blur` events.
|
||||
@@ -164,7 +164,7 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
|
||||
- **Trigger set for v1 (all in-app, no OS-wide detection):**
|
||||
- `inactivity_with_active_timer` — timer running + `document.visibilitystate === 'hidden'` OR window `blur` for 90 s continuous. (We know the user has switched away; we don't need to know what they switched to.)
|
||||
- `pending_morning_triage` — past 10:00 local + triage enabled + last-shown ≠ today. Fires once per day; gets suppressed forever if user later skips or completes.
|
||||
- `micro_step_idle` — micro-step created + no `kon:task-completed` or `kon:step-completed` event for that parent-task-id within 15 min.
|
||||
- `micro_step_idle` — micro-step created + no `magnotia:task-completed` or `magnotia:step-completed` event for that parent-task-id within 15 min.
|
||||
- **Suppression rules:**
|
||||
- Global mute in settings (on/off).
|
||||
- Hard cap 3 nudges per rolling hour.
|
||||
@@ -190,7 +190,7 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
|
||||
**Rule idempotency (new explicit requirement).**
|
||||
- Each rule stores `last_fired_at: ISO8601` and, for daily rules, `last_fired_local_date: YYYY-MM-DD`. Without this, a poll-driven "at 09:00" fires on every tick.
|
||||
- On sleep/resume: on app focus after > 10 minutes away, check each time-of-day rule; if today's fire time has passed and `last_fired_local_date` is not today, fire once and update. Configurable per-rule toggle: `catch_up_on_resume` (default ON for time-of-day rules).
|
||||
- "After a task completes" rule: subscribes to the `kon:task-completed` event from Phase 6. Rule fires once per task id (guarded via `last_fired_task_ids`).
|
||||
- "After a task completes" rule: subscribes to the `magnotia:task-completed` event from Phase 6. Rule fires once per task id (guarded via `last_fired_task_ids`).
|
||||
- "Morning triage finishes" rule: fires on *either* "Start the day" or "Skip for today" — skip counts as finishing. Fires once per `last_fired_local_date`.
|
||||
|
||||
**Scope.**
|
||||
@@ -225,7 +225,7 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
|
||||
|
||||
**Estimated effort.** Half day.
|
||||
|
||||
**Shipped note (2026/04/24).** Landed on `main` across commits `729b82c` to `fa93033` (13 feature commits plus one style-fix commit for a comment em-dash). Migration v13 adds `auto_completed` on `tasks`; cascade path in `complete_subtask_and_check_parent` sets it, `uncomplete_task` clears it on both target and reopened parent. New storage fn `list_recent_completions(pool, days)` + Tauri wrapper `list_recent_completions_cmd` expose the fixed-length, oldest-first 7-day series. Frontend has a dedicated `completionStats.svelte.ts` store (listens on `kon:task-completed` / `kon:step-completed` / `kon:task-uncompleted` / `kon:task-deleted` / `focus`), a `CompletionSparkline.svelte` SVG component, and header wiring in `TasksPage.svelte`. Settings toggle `showMomentumSparkline` added (default `true`) in the Rituals section; Phase 9 polish may resection. Acceptance list verified by full suite: 273 Rust tests pass, `cargo clippy --all-targets -D warnings` clean, `cargo fmt --check` clean, `npm run check` 0/0, `npm run build` clean. Manual dogfood walkthrough (Task 12 Step 6) still owes real-app verification when Jake next opens Corbie.
|
||||
**Shipped note (2026/04/24).** Landed on `main` across commits `729b82c` to `fa93033` (13 feature commits plus one style-fix commit for a comment em-dash). Migration v13 adds `auto_completed` on `tasks`; cascade path in `complete_subtask_and_check_parent` sets it, `uncomplete_task` clears it on both target and reopened parent. New storage fn `list_recent_completions(pool, days)` + Tauri wrapper `list_recent_completions_cmd` expose the fixed-length, oldest-first 7-day series. Frontend has a dedicated `completionStats.svelte.ts` store (listens on `magnotia:task-completed` / `magnotia:step-completed` / `magnotia:task-uncompleted` / `magnotia:task-deleted` / `focus`), a `CompletionSparkline.svelte` SVG component, and header wiring in `TasksPage.svelte`. Settings toggle `showMomentumSparkline` added (default `true`) in the Rituals section; Phase 9 polish may resection. Acceptance list verified by full suite: 273 Rust tests pass, `cargo clippy --all-targets -D warnings` clean, `cargo fmt --check` clean, `npm run check` 0/0, `npm run build` clean. Manual dogfood walkthrough (Task 12 Step 6) still owes real-app verification when Jake next opens Magnotia.
|
||||
|
||||
---
|
||||
|
||||
@@ -236,7 +236,7 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
|
||||
**Contents.**
|
||||
- File-system `.md` save dialog (replace clipboard-only export). Rust `write_text_file` command; platform dialog via `tauri-plugin-dialog`.
|
||||
- Bulk select + bulk export in History.
|
||||
- LLM-powered content tags (`topic:*`, `intent:*`). Slot into the existing `kon-llm` stub.
|
||||
- LLM-powered content tags (`topic:*`, `intent:*`). Slot into the existing `magnotia-llm` stub.
|
||||
- Settings UX overhaul: bundle high-traffic settings into a "Start here" group; hide advanced behind a disclosure.
|
||||
- Visual polish pass on all Phase 1 – Phase 8 surfaces: spacing, typography, motion curves, colour, dark-mode parity.
|
||||
- Accessibility pass: keyboard navigation, screen reader labels, focus order, colour contrast audit against WCAG AA.
|
||||
@@ -270,7 +270,7 @@ all-targets / fmt clean / svelte-check 0/0 / npm build clean.
|
||||
|
||||
## Phase 10 — QC + rename + release — **SPLIT 2026/04/23**
|
||||
|
||||
Earlier draft rolled QC, a full codebase rename, an app-data migration shim, and the release ceremony into one day. Review flagged this as unrealistic and split it. The rename sweep in particular crosses every surface in the app; rushing it is how you end up with `kon.db` on half the users' machines and `corbie.db` on the rest.
|
||||
Earlier draft rolled QC, a full codebase rename, an app-data migration shim, and the release ceremony into one day. Review flagged this as unrealistic and split it. The rename sweep in particular crosses every surface in the app; rushing it is how you end up with `magnotia.db` on half the users' machines and `magnotia.db` on the rest.
|
||||
|
||||
### Pre-Phase-10: Cargo.lock policy decision — **RESOLVED 2026/04/24**
|
||||
|
||||
@@ -283,33 +283,33 @@ Earlier draft rolled QC, a full codebase rename, an app-data migration shim, and
|
||||
**Prerequisite:** Phase 1 – Phase 9 complete. Cargo.lock committed.
|
||||
|
||||
- Full dogfood walkthrough: record a real brain-dump → clean transcript → task extraction → micro-step one task → run a focus timer → tag energy → complete → open evening wind-down → skip morning triage → re-check no re-prompt.
|
||||
- RB-08 macOS power-assertion verification: **Rachmann runs this offline** on his Mac. `pmset -g assertions` during a live session; expected `PreventSystemSleep` attributed to Corbie's bundle id. On confirmation, close RB-08 and move `docs/issues/power-assertion-macos-objc2.md` to `docs/issues/resolved/`.
|
||||
- RB-08 macOS power-assertion verification: **Rachmann runs this offline** on his Mac. `pmset -g assertions` during a live session; expected `PreventSystemSleep` attributed to Magnotia's bundle id. On confirmation, close RB-08 and move `docs/issues/power-assertion-macos-objc2.md` to `docs/issues/resolved/`.
|
||||
- Cross-platform build matrix green across Linux / macOS / Windows.
|
||||
- Accessibility regression check: keyboard-only traversal of every new Phase 5 – Phase 8 surface.
|
||||
- Freshly-clean install test on a spare user account: no stray data leaks from dev.
|
||||
|
||||
Rachmann's Mac slot runs in parallel; not blocking the rest of 10a.
|
||||
|
||||
### Phase 10b — Kon → Corbie rename sweep (estimated half day to 1 day)
|
||||
### Phase 10b — Magnotia → Magnotia rename sweep (estimated half day to 1 day)
|
||||
|
||||
Runs **after** Phase 10a QC, **after** Jake has renamed the two repos in GitHub + Gitea web UIs. The rename only starts here, not earlier, so in-flight Phase 1 – Phase 9 work doesn't have to re-learn event names mid-cycle.
|
||||
|
||||
- `package.json` → `name: "corbie"`, `description` update. (Version stays at `0.1.0`.)
|
||||
- Cargo crates: `kon`, `kon-audio`, `kon-storage`, `kon-transcription`, `kon-llm`, `kon-ai-formatting`, `kon-core`, `kon-cloud-providers`, `kon-hotkey`, `kon-mcp` → `corbie-*`. Mass-rename via `Cargo.toml` name field + workspace path references + `use` imports.
|
||||
- `package.json` → `name: "magnotia"`, `description` update. (Version stays at `0.1.0`.)
|
||||
- Cargo crates: `magnotia`, `magnotia-audio`, `magnotia-storage`, `magnotia-transcription`, `magnotia-llm`, `magnotia-ai-formatting`, `magnotia-core`, `magnotia-cloud-providers`, `magnotia-hotkey`, `magnotia-mcp` → `magnotia-*`. Mass-rename via `Cargo.toml` name field + workspace path references + `use` imports.
|
||||
- Binary + product names: `src-tauri/tauri.conf.json` (productName, identifier), `.desktop` file, Windows product name, macOS bundle name.
|
||||
- Install paths: `~/.local/share/kon/` → `~/.local/share/corbie/` (plus the macOS `~/Library/Application Support` and Windows `%APPDATA%` equivalents). **App-data migration shim required** — first-run checks for the old dir, moves contents, writes a sentinel `.migrated-from-kon`. Shim must handle the case where both dirs exist (prefer new, log the duplicate).
|
||||
- Database filename: `kon.db` → `corbie.db`. Handled by the same shim.
|
||||
- Window titles, tray tooltip, About-dialog, README body, docs references where they name the product (leave historical brief content talking about "Kon" — it's a historical document).
|
||||
- Event names: `kon:start-timer`, `kon:task-completed`, `kon:open-wind-down`, `kon:preferences-changed`, `kon:hotkey-pressed`, `kon:llm-download-progress` → `corbie:*`. Single commit; one find-replace; both emitter and listener in the same diff.
|
||||
- Logs, error messages, user-facing copy (including toast strings that mention "Kon").
|
||||
- Settings SQLite key: `kon_preferences` → `corbie_preferences`. Migration reads old key on first launch, writes new key, deletes old.
|
||||
- Remotes: `ssh://git.corbel.consulting:2222/jake/kon.git` + `github.com:jakejars/kon.git` → `…/corbie.git`. `git remote set-url` locally after web-UI renames.
|
||||
- Install paths: `~/.local/share/magnotia/` → `~/.local/share/magnotia/` (plus the macOS `~/Library/Application Support` and Windows `%APPDATA%` equivalents). **App-data migration shim required** — first-run checks for the old dir, moves contents, writes a sentinel `.migrated-from-magnotia`. Shim must handle the case where both dirs exist (prefer new, log the duplicate).
|
||||
- Database filename: `magnotia.db` → `magnotia.db`. Handled by the same shim.
|
||||
- Window titles, tray tooltip, About-dialog, README body, docs references where they name the product (leave historical brief content talking about "Magnotia" — it's a historical document).
|
||||
- Event names: `magnotia:start-timer`, `magnotia:task-completed`, `magnotia:open-wind-down`, `magnotia:preferences-changed`, `magnotia:hotkey-pressed`, `magnotia:llm-download-progress` → `magnotia:*`. Single commit; one find-replace; both emitter and listener in the same diff.
|
||||
- Logs, error messages, user-facing copy (including toast strings that mention "Magnotia").
|
||||
- Settings SQLite key: `magnotia_preferences` → `magnotia_preferences`. Migration reads old key on first launch, writes new key, deletes old.
|
||||
- Remotes: `ssh://git.corbel.consulting:2222/jake/magnotia.git` + `github.com:jakejars/magnotia.git` → `…/magnotia.git`. `git remote set-url` locally after web-UI renames.
|
||||
|
||||
### Phase 10c — Release (estimated half day)
|
||||
|
||||
- Version is already `0.1.0` in `Cargo.toml`, `package.json`, and `tauri.conf.json` — no bump needed. Confirm the three match.
|
||||
- Write `CHANGELOG.md`. Seed from this roadmap's phases. Entries are written to end-users, not engineers — "You can now read transcripts aloud" not "Added tts_speak command".
|
||||
- Write release notes in plain language: what it does, who it's for, the Kon-data migration note, the Windows notifications caveat (installed app only).
|
||||
- Write release notes in plain language: what it does, who it's for, the Magnotia-data migration note, the Windows notifications caveat (installed app only).
|
||||
- Tag `v0.1.0` on the head commit.
|
||||
- Push tag to both remotes. GitHub Actions release workflow auto-builds artefacts for Linux / macOS / Windows.
|
||||
- Smoke-test at least one artefact per platform (ideally Rachmann covers macOS) before the release is made public.
|
||||
@@ -328,7 +328,7 @@ Runs **after** Phase 10a QC, **after** Jake has renamed the two repos in GitHub
|
||||
|
||||
## Explicit non-goals
|
||||
|
||||
- Mobile apps. Corbie is desktop-first; a mobile companion is post-v0.1.
|
||||
- Mobile apps. Magnotia is desktop-first; a mobile companion is post-v0.1.
|
||||
- Cloud sync. Local-first is the floor, not a feature. Sync is out of scope through v0.1.
|
||||
- Premium voices, paid tiers, subscription. Licensing + monetisation is a separate track tracked in memory `project_marketplace_creem`.
|
||||
- AI body doubling (low-fi focus rooms) — validated but parked to post-v0.1.
|
||||
@@ -339,13 +339,13 @@ Runs **after** Phase 10a QC, **after** Jake has renamed the two repos in GitHub
|
||||
Ideas worth keeping warm once the v0.1 release is out. Not tracked as phases until the core release is done.
|
||||
|
||||
- **Calendar integration.** Read-only first pass could parse a local ICS file (Thunderbird / Evolution export) and surface day events alongside the tasks list — stays local-first. A cloud-sync pass (Google / iCloud / CalDAV) is a v0.2+ conversation because it re-opens credential handling and refresh-token plumbing that v0.1 deliberately avoids.
|
||||
- **Right-click highlighted text → capture as task.** Two flavours: (a) *In-Corbie* — context menu on a selected transcript range or viewer segment, routes to `create_task_cmd` with the selection as text. Small — lives naturally in Phase 9 polish or a bolt-on. (b) *System-wide* — highlight anywhere (browser, Slack, IDE) and call Corbie. Platform-painful: macOS Services API, Windows shell-extension, Linux desktop-env-specific context menus. Scope as a separate post-v0.1 phase.
|
||||
- **Right-click highlighted text → capture as task.** Two flavours: (a) *In-Magnotia* — context menu on a selected transcript range or viewer segment, routes to `create_task_cmd` with the selection as text. Small — lives naturally in Phase 9 polish or a bolt-on. (b) *System-wide* — highlight anywhere (browser, Slack, IDE) and call Magnotia. Platform-painful: macOS Services API, Windows shell-extension, Linux desktop-env-specific context menus. Scope as a separate post-v0.1 phase.
|
||||
|
||||
## Anchors
|
||||
|
||||
- Spec: [docs/brief/feature-set.md](docs/brief/feature-set.md) + [docs/brief/design-principles.md](docs/brief/design-principles.md)
|
||||
- Current baseline: this session's HANDOVER.md
|
||||
- Rebrand memory: `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_corbie_rebrand.md`
|
||||
- Rebrand memory: `~/.claude/projects/-home-jake-Documents-CORBEL-Main/memory/project_magnotia_rebrand.md`
|
||||
- Release-blocker index: [docs/issues/README.md](docs/issues/README.md)
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user