Why
Several v0.3 features need to apply a specific tag: "pin this note" → #pinned, "archive" → #archived, "voice capture default" → #captured, "text capture default" → #quick. Hardcoding tag names forces Aaron's (or anyone's) vault conventions on other users, and conflicts with tags they already use.
Aaron's feedback: "If the notes frontend does use specific tags though it does need to support customizing them."
Proposal
Introduce per-vault "tag role" settings. Stored per-vault in localStorage (same pattern as scribe settings and vault tokens). One JSON object keyed by role:
type TagRoles = {
pinned: string; // default: "pinned"
archived: string; // default: "archived"
captureVoice: string; // default: "voice" (replace current hardcoded "captured")
captureText: string; // default: "quick"
};
UX
- First connection to a vault: if vault has zero notes, use defaults. If vault already has notes, scan existing tags and suggest sane mappings (e.g., if
#pinned already exists, map the pinned role to it; same for #archived, #todo, etc.). Let user accept or override.
- Settings page: a "Tag roles" section lists each role, shows the current tag, has an edit affordance that autocompletes against the vault's existing tags.
- When a role is remapped: existing notes aren't retagged. Role just points at the new tag going forward. Document this explicitly in the settings UI.
Dependencies
Everything else in the v0.3 arc that uses a specific tag:
Scope
- New
TagRolesStore (per-vault, analogous to ScribeStore)
- New settings section rendering the role table
- Refactor
/capture (both voice and text) to use captureVoice / captureText role from settings instead of hardcoded "captured" / "quick"
- Document the pattern in CLAUDE.md so future role-bearing features land on this primitive
Out of scope
- Role-bearing features (pinned/archived) — separate issues
- Automatic retagging on role change — explicit non-goal; costly and user-destructive
Priority
Keystone. Land before pinned/archived views.
Why
Several v0.3 features need to apply a specific tag: "pin this note" →
#pinned, "archive" →#archived, "voice capture default" →#captured, "text capture default" →#quick. Hardcoding tag names forces Aaron's (or anyone's) vault conventions on other users, and conflicts with tags they already use.Aaron's feedback: "If the notes frontend does use specific tags though it does need to support customizing them."
Proposal
Introduce per-vault "tag role" settings. Stored per-vault in localStorage (same pattern as scribe settings and vault tokens). One JSON object keyed by role:
UX
#pinnedalready exists, map the pinned role to it; same for#archived,#todo, etc.). Let user accept or override.Dependencies
Everything else in the v0.3 arc that uses a specific tag:
Scope
TagRolesStore(per-vault, analogous toScribeStore)/capture(both voice and text) to usecaptureVoice/captureTextrole from settings instead of hardcoded"captured"/"quick"Out of scope
Priority
Keystone. Land before pinned/archived views.