spec: Tab Configs in Command Palette and keyboard shortcuts (#9176)#10023
spec: Tab Configs in Command Palette and keyboard shortcuts (#9176)#10023lonexreb wants to merge 1 commit intowarpdotdev:masterfrom
Conversation
…ev#9176) Adds product.md and tech.md for issue warpdotdev#9176: surface Tab Configs in the Command Palette so they're keyboard-accessible, matching the affordances Launch Configurations already have. Reporter explicitly calls this out as a regression from migrating to Tab Configs (loses Cmd+P search, dedicated shortcut, and menu-bar entry). V1 scope: - New palette source under app/src/search/command_palette/tab_config/ mirroring the existing launch_config/ siblings (data_source.rs, search_item.rs, renderer.rs) - Register the source in the existing data_sources.rs aggregator - Selection dispatch reuses the existing launch_with_config entry point used by the + button — same parameter modal, same pane spawn - Error-state rows for malformed TOML files; selecting opens in editor - Distinct row icon for visual differentiation from Launch Configurations - New TabConfigPaletteSelected telemetry event Out of V1 (tracked as follow-ups): - Per-Tab-Config keyboard shortcut bindings (the reporter's "ideally") - Menu-bar entry for Tab Configs - Folding Launch Configurations + Tab Configs into one source once Launch Configs are deprecated - A "tab config:" filter prefix - Filesystem watcher to avoid per-open directory walk if profiling shows it's a hot path 8 testable behavior invariants. Implementation surface is genuinely small: clone the launch_config palette source structure, swap loader calls. No new infrastructure, no new mixer logic.
|
I'm starting a first review of this spec-only pull request. You can view the conversation on Warp. I completed the review and no human review was requested for this pull request. Comment Powered by Oz |
There was a problem hiding this comment.
Overview
This PR adds product and tech specs for exposing Tab Configs in the Command Palette. The scope is aligned with the linked issue, but the implementation plan has several gaps that would make the delivered behavior diverge from the stated requirements.
Concerns
- The tech spec does not make the documented
tab configquery match all Tab Config rows. - The proposed data source bypasses the existing Tab Config loader/menu source, risking inconsistent inventory, sorting, refresh, and error behavior versus the
+menu.
Security
- The proposed telemetry payload includes user-authored Tab Config names without specifying redaction/UGC handling, which can leak project or customer names.
Verdict
Found: 0 critical, 3 important, 0 suggestions
Request changes
Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
| /// dropped (invariant 5). | ||
| pub fn results(ctx: &AppContext) -> Vec<TabConfigSearchItem> { | ||
| let dir = warp_managed_paths::tab_configs_dir(); // existing helper | ||
| let entries = std::fs::read_dir(&dir).ok().into_iter().flatten(); |
There was a problem hiding this comment.
read_dir path can diverge from the existing Tab Config loader used by the + menu, so the spec should require reusing the same loaded config/error source or explicitly preserve identical inventory, sorting, refresh, and parse-error semantics.
| impl SearchItem for TabConfigSearchItem { | ||
| fn match_against(&self) -> &str { | ||
| match self { | ||
| Self::Loaded { config, .. } => config.name.as_str(), |
There was a problem hiding this comment.
tab config filters to all configs, but this match string only indexes the config name; add a type token/search alias to the indexed text or remove that UX guarantee.
|
|
||
| ```rust | ||
| TabConfigPaletteSelected { | ||
| config_name: String, |
There was a problem hiding this comment.
config_name is user-authored and can contain sensitive project/customer names; the spec should either omit it from telemetry or require UGC marking/redaction/hashing before emission.
Adds a product+tech spec for #9176: expose Tab Configs in the Command Palette so they're keyboard-accessible, matching the affordances Launch Configurations have today.
Files
Total: 302 insertions, 0 deletions. No code changes — this is a spec PR.
Why this matters
Per the issue: Tab Configs are positioned as the recommended replacement for Launch Configurations, but the new system loses every keyboard-driven entry point the legacy system had:
The reporter's stated workaround is to "continue using the legacy Launch Configurations (YAML) to get keyboard access" — which defeats the purpose of the migration. Importance: 4/5.
V1 scope
The implementation surface is genuinely small: clone the existing `app/src/search/command_palette/launch_config/` source's three files (`data_source.rs`, `search_item.rs`, `renderer.rs`), point them at the existing `app/src/tab_configs/` loader, register in the palette mixer.
Out of V1 (tracked as follow-ups)
Why this spec is high-leverage
Open questions for maintainers
Happy to iterate on the design or tighten the V1 scope further.