Skip to content

feat(studio): global search palette and keyboard-shortcuts reference - #1764

Merged
samuv merged 1 commit into
plan/studio-search-shortcutsfrom
studio/search-shortcuts
Sep 23, 2026
Merged

samuv merged 1 commit into
plan/studio-search-shortcutsfrom
studio/search-shortcuts

Conversation

@samuv

@samuv samuv commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

What lands

Browser-only, no BFF change: the search index (a pure function over already-served inventories plus the static pages), the palette in the top nav with its keycap, the shortcuts reference page over the closed registry with help-feature rows read off the same capability gates the owning components use, /workspace/shortcuts, and the about section's "Keyboard shortcuts" link.

Verification

89 server and 236 web Vitest proofs (8 ACs, 0 missing); task studio:check, task docs pass; apps/contracts unchanged.

Further amendments

Implements the amended search contract (see the plan layer below):

  • The palette runs on the Radix dialog and uses a modal shortcut scope in the provider. Its input and results follow the combobox/listbox pattern, and the highlighted result scrolls into view.

  • IME composition is ignored.

  • Schedule prompts are no longer indexed.

  • The Memory row on the shortcuts page follows the user-model capability.

  • Exact matching. The shortcut matcher now requires exact modifiers. A registry-wide table test checks each binding matches exactly its documented combination.

  • Plan status. This layer's diff moves its acceptance plan to landed (header and index), per the plan lifecycle; the transition is authoritative only when this PR merges, and task ac-trace-strict now gates the plan.

Re-verified on the rebased stack: task studio:check passes (128 server + 295 web Vitest), and task ac-trace-strict passes with every Studio plan gated as landed (141 ACs, 0 failures).

Development stage

  • Plan / Interface
  • Implementation
  • Combined
  • Spike / Routine / Cleanup

Contract linkage

  • Work classification: Bounded
  • Classification rationale: two browser-only surfaces over inventories the BFF already serves; no BFF route, schema, or daemon change
  • Decision record: None — see the plan layer
  • Human waiver of spine: Yes — the directing human chose stacked (gh stack) delivery for the whole Studio series: nothing merges until every layer is reviewed, so the plan's approval-by-merge event is deferred to the end (recorded in each plan's Delivery line), and each implementation layer records the exact plan commit it built against.
  • Acceptance plan: docs/acceptance/studio-search-shortcuts.md
  • Human decisions resolved and recorded: Yes
  • Plan / Interface PR: docs(plan): Mecatl Studio global search and keyboard shortcuts acceptance plan #1763
  • Approved commit baseline: 3412b3b6f32611ab6f347e4d384a6ac22c7a8bbc (the plan layer below; not yet merged — stacking exception above)
  • Combined/exemption rationale: N/A

Interface conformance

  • Matches the plan's contract.

Issue relationship

Relates to #1751 (parent #1736; stack #1766). Non-closing: the step completes when both of its layers merge.

Type of change

  • Behavioral/interface plan
  • Bug fix
  • New feature
  • Refactoring (no behavior change)
  • Dependency update
  • Documentation/process

Test plan

Baseline checks

  • Acceptance-plan checker
  • Linting (task lint)
  • Offline test suite (task test)
  • Offline demo (go run ./cmd/mecademo)
  • Markdown changed: docs generation/link checks (task docs)

Studio gates (this workspace is not covered by task lint / task test, which are Go-only): task studio:check (Biome, typecheck, Vitest, generated-drift), task ac-trace — all pass; see Verification above.

User-facing change

Studio gains a global search palette and a keyboard-shortcuts reference page.

Special notes for reviewers

Part of a fourteen-layer stack; review bottom-up. Nothing merges until the whole series is reviewed.

@samuv
samuv added this pull request to stack #1766 September 22, 2026 08:01
@samuv samuv self-assigned this Sep 22, 2026
@samuv
samuv force-pushed the studio/search-shortcuts branch from 7abe5ee to de383d7 Compare September 22, 2026 09:04
@samuv
samuv force-pushed the studio/search-shortcuts branch from de383d7 to 26c887f Compare September 22, 2026 09:13
@samuv
samuv force-pushed the studio/search-shortcuts branch from 26c887f to 72bad12 Compare September 22, 2026 09:23
@samuv
samuv force-pushed the studio/search-shortcuts branch from 72bad12 to 616e2a6 Compare September 22, 2026 09:59
@samuv
samuv force-pushed the studio/search-shortcuts branch from 616e2a6 to 730fce0 Compare September 23, 2026 08:56
@samuv
samuv force-pushed the studio/search-shortcuts branch from 730fce0 to 646f9c3 Compare September 23, 2026 09:41
@samuv
samuv force-pushed the studio/search-shortcuts branch from 646f9c3 to 97f6d13 Compare September 23, 2026 10:47
@samuv
samuv force-pushed the studio/search-shortcuts branch from 97f6d13 to f3b3639 Compare September 23, 2026 11:54
Implementation layer of docs/acceptance/studio-search-shortcuts.md,
built against plan commit 3412b3b.

Browser-only, no BFF change: the search index (a pure function over the
inventories the BFF already served — chats, schedules, configured and
learned skills, memory keys — plus the static pages; titles, names,
descriptions, and ids only, matched client-side with accent folding),
the palette mounted in the top nav with its keycap, the shortcuts
reference page over the closed registry with help-feature rows read off
the same capability gates the owning components use, /workspace/shortcuts,
and the about section's "Keyboard shortcuts" link. The kbd primitive
returns.

89 server and 236 web Vitest proofs; apps/contracts unchanged.

Tracking: #1736

Signed-off-by: Samuele Verzi <samu@stacklok.com>
@samuv
samuv force-pushed the studio/search-shortcuts branch from f3b3639 to 2de1967 Compare September 23, 2026 12:54
@samuv
samuv merged commit 45a4c87 into main Sep 23, 2026
33 checks passed
@samuv
samuv deleted the studio/search-shortcuts branch September 23, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant