Overview
Add a flat category structure to workspaces so the Open Workspace dialog groups entries as Identity → Category → Workspace instead of a flat list. This lets users organise related workspaces (e.g. Research, Personal, Work) under named categories per identity.
Categories are a local-only preference — stored in binding.json per workspace and in the identity's info.json — and are never synced through the swarm.
Key design decisions
- Storage:
category: Option<String> added to WorkspaceBinding (binding.json); managed category list (Vec<String>) added to Identity (info.json). Both fields use #[serde(default)] for zero-migration backward compat.
- Logic in core: All category CRUD lives in
IdentityManager in krillnotes-core. Tauri commands are thin wrappers.
- Managed categories: Renaming a category atomically updates all workspace bindings for that identity. Deleting nullifies bindings and prompts confirmation if workspaces are affected.
- UI:
WorkspaceManagerDialog becomes a collapsible tree; inline category assignment per workspace row; "Manage Categories" panel per identity for rename/delete; optional category field on first workspace open/create.
- Identity filter dropdown in the current dialog is removed (redundant with tree grouping).
Spec
Full design: docs/superpowers/specs/2026-05-22-workspace-categories-design.md
Scope
krillnotes-core: 5 new IdentityManager methods + extended WorkspaceBindingInfo
src-tauri: 5 new thin Tauri command wrappers
- Frontend:
WorkspaceManagerDialog restructure + i18n keys in all 7 locales
- No DB schema changes, no sync/swarm changes
Overview
Add a flat category structure to workspaces so the Open Workspace dialog groups entries as Identity → Category → Workspace instead of a flat list. This lets users organise related workspaces (e.g. Research, Personal, Work) under named categories per identity.
Categories are a local-only preference — stored in
binding.jsonper workspace and in the identity'sinfo.json— and are never synced through the swarm.Key design decisions
category: Option<String>added toWorkspaceBinding(binding.json); managed category list (Vec<String>) added toIdentity(info.json). Both fields use#[serde(default)]for zero-migration backward compat.IdentityManagerinkrillnotes-core. Tauri commands are thin wrappers.WorkspaceManagerDialogbecomes a collapsible tree; inline category assignment per workspace row; "Manage Categories" panel per identity for rename/delete; optional category field on first workspace open/create.Spec
Full design:
docs/superpowers/specs/2026-05-22-workspace-categories-design.mdScope
krillnotes-core: 5 newIdentityManagermethods + extendedWorkspaceBindingInfosrc-tauri: 5 new thin Tauri command wrappersWorkspaceManagerDialogrestructure + i18n keys in all 7 locales