settings/SU-6: ⌘K search palette indexing every setting #837
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#837
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As an operator, I want to press ⌘K and type a setting name (e.g. "caveman", "container_image"), so that I can jump to it without scrolling 30+ settings across 10+ routes.
Context
After SU-1…SU-5 the settings surface has a clean grouped side-nav, but discovery of individual fields still requires knowing where they live. Linear, Stripe, Tailscale, VSCode all use a search palette as the dominant access pattern.
Acceptance criteria
Manifest
apps/web/src/lib/settings-manifest.ts— static array of{ id, label, description?, route, anchor?, group }covering every settings field/section.data-testid="settings-*"field has a manifest entry, to catch drift.Palette UI
apps/web/src/components/settings-search.tsx— Base UI dialog or popover, opens on ⌘K (Cmd on macOS, Ctrl elsewhere).label+description.route, then on mount scrollsanchor(e.g.#caveman-mode) into view and focuses the field.A11y
role="dialog"+aria-modal+ focus trap + focus return (use Base UI primitive — see<Drawer>baseline inapps/web/CLAUDE.md).role="listbox", itemsrole="option"witharia-selected.Tests
data-testid="settings-foo"field with no entry.Out of scope
References
apps/web/CLAUDE.md— drawer / dialog primitive baseline.apps/web/src/components/drawer.tsx— focus-trap reference.🦵 @charles kicked the queue — re-running implement on @dev.