settings(SU-6): cmd-K search palette indexing every setting #862

Merged
reviewer merged 1 commit from code-lead/837 into main 2026-05-04 22:36:09 +00:00
Collaborator

Hand-curated manifest at apps/web/src/lib/settings-manifest.ts enumerates every addressable setting; a drift-lint test asserts every data-testid=settings-* field is either covered or exempted. New SettingsSearch palette mounts in AppShell and opens on cmd-K from any page (workspace capture-phase cmd-K still wins on /workspace/*); selecting a result navigates to route#anchor and the new useSettingsHashScroll hook scrolls the field into view + focuses its first focusable child.

Test plan

  • bun x vitest run passes (955 tests).
  • Manifest lint catches an orphan data-testid settings-foo field with no entry.
  • cmd-K opens the palette globally; typing filters; arrows + Enter navigate.
  • Manual: verify hash-scroll lands on the right field when picking caveman and container_image.

Closes #837

Hand-curated manifest at apps/web/src/lib/settings-manifest.ts enumerates every addressable setting; a drift-lint test asserts every data-testid=settings-* field is either covered or exempted. New SettingsSearch palette mounts in AppShell and opens on cmd-K from any page (workspace capture-phase cmd-K still wins on /workspace/*); selecting a result navigates to route#anchor and the new useSettingsHashScroll hook scrolls the field into view + focuses its first focusable child. ## Test plan - [x] bun x vitest run passes (955 tests). - [x] Manifest lint catches an orphan data-testid settings-foo field with no entry. - [x] cmd-K opens the palette globally; typing filters; arrows + Enter navigate. - [ ] Manual: verify hash-scroll lands on the right field when picking caveman and container_image. Closes #837
feat(settings): SU-6 — ⌘K settings search palette
All checks were successful
qa / dockerfile (pull_request) Successful in 24s
qa / db-schema (pull_request) Successful in 28s
qa / qa-1 (pull_request) Successful in 1m23s
qa / qa (pull_request) Successful in 0s
fc911e7488
Hand-curated manifest in `apps/web/src/lib/settings-manifest.ts` enumerates
every addressable setting across `/settings/*`. A drift lint test scans
the codebase for `data-testid="settings-*"` and asserts each is either
in the manifest or exempted. New `<SettingsSearch>` palette mounts in
AppShell; ⌘K opens it from any page (workspace's capture-phase ⌘K still
wins on `/workspace/*`). Selecting a result navigates to the setting's
route + URL hash; the settings layout's `useSettingsHashScroll` hook
resolves the hash by id or testid and focuses the first focusable child.

Closes #837
reviewer approved these changes 2026-05-04 22:36:02 +00:00
reviewer left a comment

All AC met; logic is clean.

nit: activeIdx clamps to -1 when filtered empties — harmless because the Enter handler guards if (entry), but worth a comment.

All AC met; logic is clean. nit: `activeIdx` clamps to `-1` when `filtered` empties — harmless because the `Enter` handler guards `if (entry)`, but worth a comment.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks!862
No description provided.