Skip to content

fix(web): going back in the command palette keeps the search that led there - #15940

Merged
juliusmarminge merged 7 commits into
pingdotgg:mainfrom
saphid:fix/palette-back-keeps-query
Oct 19, 2026
Merged

juliusmarminge merged 7 commits into
pingdotgg:mainfrom
saphid:fix/palette-back-keeps-query

Conversation

@saphid

@saphid saphid commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Going back from a command-palette picker clears the search that opened it. Escape from file or content search also loses the parent palette query. Fixes #15936.

Keep each nested view's parent query with its view stack, and retain the query and linked-thread results while a child search replaces the palette. Back restores that context. Closing, fresh shortcuts and direct intents reset it. Direct-intent resets are centralized so add-project also starts with a clean stack.

Maintainer takeover of @saphid's implementation in #15940. The author's commits are preserved; current main was merged without rebasing or force-pushing. Removed duplicate reset blocks and forwarding helpers. Reduced the existing logic suite from 46 to 40 tests (PR-added cases: 13 to 7).

Verification on f8592d6d20:

  • node_modules/.bin/vp test run apps/web/src/components/CommandPalette.logic.test.ts: 40 passed. Disabling restoration causes three behavioral failures; using main's logic also fails the new regression selection.
  • Targeted lint, format check, web-package tsc-rs --noEmit, and git diff --check passed.
  • Fresh independent full-diff reviews by Claude Opus 5.5 and GPT-6-Sol: no blockers in round 1.
  • Real Chromium web client at 1280×800 with isolated worktree state: visible Back and Backspace restore theme; Escape from file search restores go to file; Escape from content search restores >search; close/reopen and a fresh content-search shortcut start clean. No agent turns were sent.

Before, runtime code from 5307c233b1: Back clears the input.

Before: Back clears the palette search

After, the same project, viewport and flow on this head: Back restores theme.

After: Back restores the palette search

Before recording · After recording: visible Back and Backspace

Limits: linked-thread result restoration and multiple nesting levels were verified by focused tests, not live fixtures. macOS, Windows, iOS, Android and Electron desktop were not exercised. Desktop uses this web component; mobile has its own unchanged palette. No provider, server, wire-contract or connection-mode changes. The live database could not be migrated into this checkout because its migration history differs, so the client used fresh isolated state with a project and thread.

Tests: GPT-6-Astra; implementation: GPT-6.1-Sol; independent reviews: Claude Opus 5.5 and GPT-6-Sol. Integration and publication: GPT-6.1-Sol, Codex harness through T3 Code.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 5, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 5, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at f8592d6

Macroscope's review found this PR approvable — This is a localized command-palette bug fix that preserves search context across nested navigation and explicitly resets stale state when starting fresh. The production changes remain self-contained and are accompanied by focused reducer tests, with no schema, infrastructure, security, billing, or static-analysis configuration impact.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

Only developers with an assigned seat can use this organization's usage-based review budget, and seats here are assigned manually. Ask an admin to assign a seat, or change the review continuation mode in Billing.

Next included review available in 1 minute.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f1a27c86-f4f7-4ed1-a702-52472e69b107
📥 Commits

Reviewing files that changed from the base of the PR and between b0dd057 and f8592d6.

📒 Files selected for processing: 3
  • apps/web/src/components/CommandPalette.logic.test.ts
  • apps/web/src/components/CommandPalette.logic.ts
  • apps/web/src/components/CommandPalette.tsx

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f003b82a-91d0-4761-aff2-49e69cd5d5c3
📥 Commits

Reviewing files that changed from the base of the PR and between 250e052 and b0dd057.

📒 Files selected for processing (3)
  • apps/web/src/components/CommandPalette.logic.test.ts
  • apps/web/src/components/CommandPalette.logic.ts
  • apps/web/src/components/CommandPalette.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

📝 Walkthrough
📝 Walkthrough

Walkthrough

The command palette now preserves search context when opening nested pickers and restores it when returning. Search queries and nested views use a reducer, and the palette passes saved query and linked-thread context to file and content search.

Changes

Command palette search restoration

Layer / File(s) Summary
Search state and restoration
apps/web/src/components/CommandPalette.logic.ts, apps/web/src/components/CommandPalette.logic.test.ts
Search state records parent queries for nested views. Back restores the saved query. UI-state handling also restores saved search context and clears it in the tested close, reopen, fresh-mode, and direct-intent cases.
Palette navigation wiring
apps/web/src/components/CommandPalette.tsx
The palette uses the search reducer for view navigation and resets search state for specified intents. Opening file or content search passes the current query and linked-thread context; Back and Escape return through the context-restoration path.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Low

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to b0dd0

The change makes Back, the Back button, and Escape restore the previous palette query, and closing or starting a fresh intent still starts clean. No merge-blocking risk is evident. Desktop and real-client content-search restoration were not verified.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Linked Issues check Passed The description links the relevant issue #15936 and explains why this pull request replaces #12873. The linked issue matches the reported behavior and scope.
Out of Scope Changes check Passed The changes are limited to the web command-palette component, its logic, and focused tests. The description states that mobile remains unchanged and identifies unverified desktop coverage.
Title check Passed The title clearly and concisely describes the main fix: restoring the search when navigating back in the command palette.
Description check Passed The description covers the problem, implementation, issue scope, verification results, screenshots, recordings, limitations, and agent attribution. It provides sufficient detail for review and matches…
Full details: Description check

Explanation

The description covers the problem, implementation, issue scope, verification results, screenshots, recordings, limitations, and agent attribution. It provides sufficient detail for review and matches the repository template requirements.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@saphid

saphid commented Oct 6, 2026

Copy link
Copy Markdown
Contributor Author

Review requested

Date (UTC) Reviewer Where
2026-10-06 Maria Discord DM

Logged so this PR shows when a maintainer was asked to review it.

… there

Back from a nested picker (Backspace or the Back button) and Escape from
file or content search now restore the palette query, and linked-thread
results, that were showing before. Closing the palette, a fresh shortcut,
or a direct intent still starts clean.

Fixes pingdotgg#15936. Replaces pingdotgg#12873.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@saphid
saphid force-pushed the fix/palette-back-keeps-query branch from b0dd057 to 9b13008 Compare October 11, 2026 23:00
saphid and others added 2 commits October 14, 2026 03:55
Direct intents (add project, new thread, change theme, search) all drop the
query a child search would return to, a second Back in the same keypress keeps
the restored query, and linked-thread results survive repeated trips into
file and content search.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 14, 2026 04:01

Dismissing prior approval to re-evaluate 8087eff

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 14, 2026
…d palette keeps the search that led there

Preserve the scoped contribution against upstream 70d60e0.
Focused checks and read-only integration review recorded in the PR.

GPT-6.1 Sol (high), Codex harness through T3 Code.
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 17, 2026 03:06

Dismissing prior approval to re-evaluate af778a1

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 17, 2026
@juliusmarminge juliusmarminge self-assigned this Oct 19, 2026
@juliusmarminge

Copy link
Copy Markdown
Member

Taking over this one as maintainer for batch web-misc-07. I will preserve your commits, merge current main, simplify the tests and implementation, and run independent reviews. Nothing will be merged as part of this takeover.

@macroscopeapp
macroscopeapp Bot dismissed their stale review October 19, 2026 15:15

Dismissing prior approval to re-evaluate f8592d6

@juliusmarminge
juliusmarminge merged commit 6567ffd into pingdotgg:main Oct 19, 2026
45 of 48 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 19, 2026
## What's Changed
* fix(mobile): settings no longer tell you to update when you're up to date by @shivamhwp in pingdotgg/t3code#21688
* test(web): fix the workflow script test that times out on busy CI runners by @shivamhwp in pingdotgg/t3code#21699
* fix(mobile): a file shared into a new task shows in the composer before you send by @shivamhwp in pingdotgg/t3code#21659
* fix(desktop): a cold WSL distro gets 30 seconds to boot instead of 10 by @SunkenInTime in pingdotgg/t3code#21070
* fix(web): detect software keyboard before handling composer Enter by @Yash-Singh1 in pingdotgg/t3code#21763
* fix(mobile): the Git sheet uses the standard list rows by @juliusmarminge in pingdotgg/t3code#21785
* fix(server): changed files keep their real paths for renames and non-ASCII names by @Atharvsinh-codez in pingdotgg/t3code#20175
* fix(server): a message promoted into a stopping run stays queued by @lbgos in pingdotgg/t3code#16926
* perf(mobile): streaming re-renders less on the open thread screen by @juliusmarminge in pingdotgg/t3code#20963
* feat(usage): show even-pace marks on Limits bars by @flamboh in pingdotgg/t3code#14477
* fix(web): Usage hourly labels follow the Time format setting by @mInrOz in pingdotgg/t3code#15575
* fix(web): stop repeating the subagent name in the waiting banner by @saphid in pingdotgg/t3code#16022
* fix(web): Cmd+O no longer opens the editor more than once by @5knnbdwm in pingdotgg/t3code#18983
* fix(web): hoist favorited legacy models to the top of the model picker by @TonybynMp4 in pingdotgg/t3code#11933
* fix(server): a rollback blocked by Git's index lock says so instead of a generic error by @shivamhwp in pingdotgg/t3code#11340
* fix(mobile): expanded tool-call groups keep following new calls by @nekohasekai in pingdotgg/t3code#15747
* fix(web): going back in the command palette keeps the search that led there by @saphid in pingdotgg/t3code#15940
* fix(web): changing a project's model no longer keeps the old model's options by @yaacovcorcos in pingdotgg/t3code#16581
* fix(web): preserve snapshot thumbnail context and detail by @maria-rcks in pingdotgg/t3code#18440
* fix(web): keep expanded tool actions usable from the keyboard by @saphid in pingdotgg/t3code#18831
* fix(usage): Claude usage no longer lists a `<synthetic>` model by @tris203 in pingdotgg/t3code#14672
* fix(server): release webhook claims when acceptance fails by @saphid in pingdotgg/t3code#18820
* fix(desktop): make the annotation editor border and shadow actually render by @PollyGlot in pingdotgg/t3code#9406
* fix(server): Claude follow-ups no longer fail in Auto on models without Auto by @Gigioxx in pingdotgg/t3code#15687
* fix(web): reopening Connections picks up new network addresses by @lnieuwenhuis in pingdotgg/t3code#15840
* fix(client): MCP apps can no longer trap you in full screen; it opens only after a tap by @shivamhwp in pingdotgg/t3code#18548
* fix(web,mobile): disabled provider instances no longer badge their siblings by @tris203 in pingdotgg/t3code#14545
* fix(web): threads open at the newest message, not thousands of pixels above it by @t3dotgg in pingdotgg/t3code#19663
* fix(mobile): report rejected shared settings writes by @juliusmarminge in pingdotgg/t3code#9356
* fix(claude): show automatic compaction while it runs by @maria-rcks in pingdotgg/t3code#15631
* fix(web): keep the parent thread highlighted while viewing its subagent by @saphid in pingdotgg/t3code#15163
* fix(web): show pull request checkout error detail by @saphid in pingdotgg/t3code#15007
* fix(server): mark unvisited thread completions unread by @maria-rcks in pingdotgg/t3code#15607
* fix(web): started threads no longer offer a machine picker that does nothing by @tris203 in pingdotgg/t3code#19900
* fix(web): provider model names no longer get cut off by their slug by @ilyaliao in pingdotgg/t3code#16522
* fix(claude): mid-sentence skill chips keep the full request by @ScottN-PV in pingdotgg/t3code#15253
* fix(web): preserve unsaved keybinding edits when saving another binding by @pnupu in pingdotgg/t3code#11109
* fix(connections): retry unsupported saved direct connections by @none23 in pingdotgg/t3code#15107
* fix(web): show readable messages for structured thread errors by @juliusmarminge in pingdotgg/t3code#21483
* fix(web): custom shortcuts work when Local environment is off by @Mnigos in pingdotgg/t3code#15825
* fix(web): keep thread notification tags within the Windows toast limit by @satyalyadav in pingdotgg/t3code#12289
* fix(web): pinned thread marker stays put when hovering the row by @flamboh in pingdotgg/t3code#11122
* fix(web): keep a typed question answer when you open a new thread by @Gigioxx in pingdotgg/t3code#13865
* fix(web): renumber following items when continuing a plain-Markdown numbered list by @saphid in pingdotgg/t3code#14332
* fix(web): clicking a logged request route no longer opens it in the editor by @lnieuwenhuis in pingdotgg/t3code#15838
* fix(desktop): reject offscreen annotation screenshot crops by @maria-rcks in pingdotgg/t3code#18441
* fix(web): NVDA browse mode reaches the new-thread project picker again by @akj in pingdotgg/t3code#17877
* fix(web): stop composer banner glass overlap by @t3-code[bot] in pingdotgg/t3code#8034
* fix(web): keep pasted decorators as text by @Gigioxx in pingdotgg/t3code#8415
* fix(shell): avoid interactive job control in environment probes by @LouisDeconinck in pingdotgg/t3code#11275
* fix(web): a closed proactive diff stays closed when you return to a thread by @ilyaliao in pingdotgg/t3code#14705
* fix(web): render powerline separators at cell edges by @SadriG91 in pingdotgg/t3code#5607
* fix(server): provider failures say why a turn could not start by @saphid in pingdotgg/t3code#16303

## New Contributors
* @Atharvsinh-codez made their first contribution in pingdotgg/t3code#20175
* @lbgos made their first contribution in pingdotgg/t3code#16926
* @yaacovcorcos made their first contribution in pingdotgg/t3code#16581
* @pnupu made their first contribution in pingdotgg/t3code#11109
* @LouisDeconinck made their first contribution in pingdotgg/t3code#11275
* @SadriG91 made their first contribution in pingdotgg/t3code#5607

**Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261019.3360...v0.1.1-nightly.20261019.3373

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261019.3373
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 19, 2026
## What's Changed
* fix(mobile): settings no longer tell you to update when you're up to date by @shivamhwp in pingdotgg/t3code#21688
* test(web): fix the workflow script test that times out on busy CI runners by @shivamhwp in pingdotgg/t3code#21699
* fix(mobile): a file shared into a new task shows in the composer before you send by @shivamhwp in pingdotgg/t3code#21659
* fix(desktop): a cold WSL distro gets 30 seconds to boot instead of 10 by @SunkenInTime in pingdotgg/t3code#21070
* fix(web): detect software keyboard before handling composer Enter by @Yash-Singh1 in pingdotgg/t3code#21763
* fix(mobile): the Git sheet uses the standard list rows by @juliusmarminge in pingdotgg/t3code#21785
* fix(server): changed files keep their real paths for renames and non-ASCII names by @Atharvsinh-codez in pingdotgg/t3code#20175
* fix(server): a message promoted into a stopping run stays queued by @lbgos in pingdotgg/t3code#16926
* perf(mobile): streaming re-renders less on the open thread screen by @juliusmarminge in pingdotgg/t3code#20963
* feat(usage): show even-pace marks on Limits bars by @flamboh in pingdotgg/t3code#14477
* fix(web): Usage hourly labels follow the Time format setting by @mInrOz in pingdotgg/t3code#15575
* fix(web): stop repeating the subagent name in the waiting banner by @saphid in pingdotgg/t3code#16022
* fix(web): Cmd+O no longer opens the editor more than once by @5knnbdwm in pingdotgg/t3code#18983
* fix(web): hoist favorited legacy models to the top of the model picker by @TonybynMp4 in pingdotgg/t3code#11933
* fix(server): a rollback blocked by Git's index lock says so instead of a generic error by @shivamhwp in pingdotgg/t3code#11340
* fix(mobile): expanded tool-call groups keep following new calls by @nekohasekai in pingdotgg/t3code#15747
* fix(web): going back in the command palette keeps the search that led there by @saphid in pingdotgg/t3code#15940
* fix(web): changing a project's model no longer keeps the old model's options by @yaacovcorcos in pingdotgg/t3code#16581
* fix(web): preserve snapshot thumbnail context and detail by @maria-rcks in pingdotgg/t3code#18440
* fix(web): keep expanded tool actions usable from the keyboard by @saphid in pingdotgg/t3code#18831
* fix(usage): Claude usage no longer lists a `<synthetic>` model by @tris203 in pingdotgg/t3code#14672
* fix(server): release webhook claims when acceptance fails by @saphid in pingdotgg/t3code#18820
* fix(desktop): make the annotation editor border and shadow actually render by @PollyGlot in pingdotgg/t3code#9406
* fix(server): Claude follow-ups no longer fail in Auto on models without Auto by @Gigioxx in pingdotgg/t3code#15687
* fix(web): reopening Connections picks up new network addresses by @lnieuwenhuis in pingdotgg/t3code#15840
* fix(client): MCP apps can no longer trap you in full screen; it opens only after a tap by @shivamhwp in pingdotgg/t3code#18548
* fix(web,mobile): disabled provider instances no longer badge their siblings by @tris203 in pingdotgg/t3code#14545
* fix(web): threads open at the newest message, not thousands of pixels above it by @t3dotgg in pingdotgg/t3code#19663
* fix(mobile): report rejected shared settings writes by @juliusmarminge in pingdotgg/t3code#9356
* fix(claude): show automatic compaction while it runs by @maria-rcks in pingdotgg/t3code#15631
* fix(web): keep the parent thread highlighted while viewing its subagent by @saphid in pingdotgg/t3code#15163
* fix(web): show pull request checkout error detail by @saphid in pingdotgg/t3code#15007
* fix(server): mark unvisited thread completions unread by @maria-rcks in pingdotgg/t3code#15607
* fix(web): started threads no longer offer a machine picker that does nothing by @tris203 in pingdotgg/t3code#19900
* fix(web): provider model names no longer get cut off by their slug by @ilyaliao in pingdotgg/t3code#16522
* fix(claude): mid-sentence skill chips keep the full request by @ScottN-PV in pingdotgg/t3code#15253
* fix(web): preserve unsaved keybinding edits when saving another binding by @pnupu in pingdotgg/t3code#11109
* fix(connections): retry unsupported saved direct connections by @none23 in pingdotgg/t3code#15107
* fix(web): show readable messages for structured thread errors by @juliusmarminge in pingdotgg/t3code#21483
* fix(web): custom shortcuts work when Local environment is off by @Mnigos in pingdotgg/t3code#15825
* fix(web): keep thread notification tags within the Windows toast limit by @satyalyadav in pingdotgg/t3code#12289
* fix(web): pinned thread marker stays put when hovering the row by @flamboh in pingdotgg/t3code#11122
* fix(web): keep a typed question answer when you open a new thread by @Gigioxx in pingdotgg/t3code#13865
* fix(web): renumber following items when continuing a plain-Markdown numbered list by @saphid in pingdotgg/t3code#14332
* fix(web): clicking a logged request route no longer opens it in the editor by @lnieuwenhuis in pingdotgg/t3code#15838
* fix(desktop): reject offscreen annotation screenshot crops by @maria-rcks in pingdotgg/t3code#18441
* fix(web): NVDA browse mode reaches the new-thread project picker again by @akj in pingdotgg/t3code#17877
* fix(web): stop composer banner glass overlap by @t3-code[bot] in pingdotgg/t3code#8034
* fix(web): keep pasted decorators as text by @Gigioxx in pingdotgg/t3code#8415
* fix(shell): avoid interactive job control in environment probes by @LouisDeconinck in pingdotgg/t3code#11275
* fix(web): a closed proactive diff stays closed when you return to a thread by @ilyaliao in pingdotgg/t3code#14705
* fix(web): render powerline separators at cell edges by @SadriG91 in pingdotgg/t3code#5607
* fix(server): provider failures say why a turn could not start by @saphid in pingdotgg/t3code#16303

## New Contributors
* @Atharvsinh-codez made their first contribution in pingdotgg/t3code#20175
* @lbgos made their first contribution in pingdotgg/t3code#16926
* @yaacovcorcos made their first contribution in pingdotgg/t3code#16581
* @pnupu made their first contribution in pingdotgg/t3code#11109
* @LouisDeconinck made their first contribution in pingdotgg/t3code#11275
* @SadriG91 made their first contribution in pingdotgg/t3code#5607

**Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261019.3360...v0.1.1-nightly.20261019.3373

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261019.3373
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Going back in the command palette clears the search that led into a picker

2 participants