Skip to content

fix(web): bare @ in the composer lists workspace files - #36435

Merged
juliusmarminge merged 3 commits into
mainfrom
factory/issue-7557-a23405
Nov 13, 2026
Merged

juliusmarminge merged 3 commits into
mainfrom
factory/issue-7557-a23405

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Nov 13, 2026 •

Copy link
Copy Markdown
Member

No code change this round. PR #36435 at 8eee676 passed all 36 checks (all 8 required ones included). Macroscope approved it with no findings. CodeRabbit posted only a walkthrough: 'No actionable comments were generated', merge risk Minimal, and all four pre-merge checks passed. It left no review comments on lines. Its only notes are about the PR text: the description's before/after Evidence section is still pending, and the fix(web) title leaves out the mobile change. Both belong to the PR and proof steps, so I suggest the title above. The fix itself: web passes allowEmptyQuery to useProjectPathSearch and shows the searching state while a bare-@ search loads. Mobile searches whenever the path query is not null, and normalizeComposerPathSearchQuery keeps null as the inactive state.

Fixes #7557

Reproduction on main

Commit 36f011d (origin/main). Ran T3CODE_DEV_SEED=0 vp run dev in a fresh worktree and paired headless Chromium through Playwright. The dev server opened a thread in a project rooted at the checkout's apps/server folder (hundreds of files). Clicked the composer and typed @, then waited 4s: the menu showed "No matching files or folders." and no projects.searchEntries request went over the WebSocket. Then typed package (so @package): one projects.searchEntries request with query "package" was sent and the menu listed package.json, scripts, WorkspaceEntries.ts and more. So the empty query never leaves the client. Unit repro: adding an empty-query row to the existing path-search table in apps/web/src/state/queries.filesystem.test.ts fails with 0 search requests, and the other 9 tests pass.

Evidence

Open the synthetic mention-demo project's File mentions thread and enter bare @. Capture after four seconds. Both commits use fresh isolated databases and identical project files. Web: Chromium, 1280×800, light theme. Mobile: pooled iPhone 18 Pro, native iOS dev client, 402×874, light theme, software keyboard visible.

The web pending-state capture uses a controlled two-second delay on the real projects.searchEntries send; results still come from the real server. Base shows the empty state, while head shows Searching workspace files... before listing files.

Evidence Before After
Commit 36f011dfb7 8eee67657e
Web pending Before: empty state After: searching workspace files
Web settled Before: no matching files or folders After: files and folder listed
Web recording Before recording After recording
iOS settled Before: bare @ has no file entries After: bare @ lists files and folder
iOS recording Before recording After recording

Web scenario · iOS scenario · Mobile runner setup adjustments

Web scenarios:prove exited 0: failed on base, passed on head. Mobile captures come from successive runs with the same corrected steps: base reached and failed the package.json assertion; head reached and passed it. The final mobile comparison was interrupted during head preparation, so the successful preceding head capture is used. Mobile recordings exclude pairing details.

Tests

No new runs this round; CI on 8eee676: 36/36 checks passed. Earlier rounds: web and mobile queries.filesystem tests, the mobile debounce and composer-menu tests (23/23), and vp run check:changed all passed.

Not in this change

  • The PR description's before/after evidence is still pending, which CodeRabbit flagged; screenshots are the proof step's job.

Who did the work

  • Written by Claude Opus 5.5, in Claude Code
  • Reviewed by GPT-6.1 Sol, in Codex, and by Claude Opus 5.5, each on its own
  • Proof captured by GPT-6.1 Sol and checked by Claude Opus 5.5

Run by the t3code factory in T3 Code.

juliusmarminge and others added 3 commits November 13, 2026 22:35
Repro for #7557: useComposerPathSearch drops an empty query, so a bare @
never requests workspace entries.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The composer's path search dropped an empty query, so a bare @ never
asked the server for entries and showed "No matching files or folders."
Allow the empty query like the file picker does, and show the searching
state while it loads.

Fixes #7557

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Mobile keeps its own composer path search, which also dropped an empty
query, so a bare @ never requested workspace entries on iOS or Android.
Search whenever a path trigger is active, keeping a null query as the
inactive state.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Nov 13, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 8eee676

Macroscope's review found this PR approvable — Bare @ now lists workspace files in the composer, with loading feedback on web. Existing filesystem access checks, debouncing, and result limits remain in place; the change only affects file suggestions.

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

@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

Composer path search now accepts an empty query on mobile and web. The web path-trigger loading state follows the pending search, and filesystem query tests cover empty-query requests.

Changes: Composer path search

Layer / File(s) Summary
Allow empty composer path searches
apps/mobile/src/state/queryTargets.ts, apps/mobile/src/state/queries.ts, apps/mobile/src/state/queries.filesystem.test.ts, apps/web/src/state/queries.ts, apps/web/src/state/queries.filesystem.test.ts, apps/web/src/components/chat/useComposerMenuItems.ts
Mobile query normalization preserves null and permits an empty query. Web composer searches enable empty queries, and path-trigger loading reflects pending searches. Tests cover empty-query search requests.

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: t3dotgg

Merge Risk: Minimal · up to 8eee6

Typing a bare @ in the composer now searches workspace files on web and mobile, as the linked issue requests. The change is small and tested, and no merge-blocking risk was found.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title "fix(web): bare @ in the composer lists workspace files" matches the main change. The linked issue #7557 asks that typing a bare @ list project files and folders. The PR also changes the mob…
Linked Issues check Passed Issue #7557 requires a bare @ in the apps/web composer to list project files and folders instead of showing "No matching files or folders." The reviewed head implements this in apps/web: `useCompose…
Out of Scope Changes check Passed The web changes (apps/web/src/state/queries.ts, apps/web/src/components/chat/useComposerMenuItems.ts, apps/web/src/state/queries.filesystem.test.ts) directly implement #7557. The mobile changes (apps/…
Description check Passed The description is detailed and covers the problem (bare @ in the composer shows no files on web and mobile), the change (web passes allowEmptyQuery, mobile searches when the query is not null, and no…
Full details: Title check

Explanation

The title "fix(web): bare @ in the composer lists workspace files" matches the main change. The linked issue #7557 asks that typing a bare @ list project files and folders. The PR also changes the mobile composer hook, which the title does not mention. The title is still a specific, conventional-commit summary of the primary fix.

Full details: Linked Issues check

Explanation

Issue #7557 requires a bare @ in the apps/web composer to list project files and folders instead of showing "No matching files or folders." The reviewed head implements this in apps/web: useComposerPathSearch in apps/web/src/state/queries.ts passes allowEmptyQuery: true to useProjectPathSearch, and apps/web/src/components/chat/useComposerMenuItems.ts treats path loading as workspaceEntries.isPending regardless of query emptiness. The unit test table in apps/web/src/state/queries.filesystem.test.ts gains an empty-query row that expects the search request to receive an empty query. The PR description reports that this row fails on main with 0 search requests and passes with the change. Caveats: the summary does not show the server response for an empty query, and the real-app before/after evidence section is still pending. The code path that the issue describes is covered by the change and its unit test. No coding requirement from #7557 is unmet on the evidence available.

Full details: Out of Scope Changes check

Explanation

The web changes (apps/web/src/state/queries.ts, apps/web/src/components/chat/useComposerMenuItems.ts, apps/web/src/state/queries.filesystem.test.ts) directly implement #7557. The mobile changes (apps/mobile/src/state/queries.ts, apps/mobile/src/state/queryTargets.ts, apps/mobile/src/state/queries.filesystem.test.ts) address the same bare-@ symptom in the mobile composer search hook, which has its own query.length &gt; 0 guard. The issue names apps/web as its area, so the mobile work extends the fix beyond the stated area. It shares the same root cause and the same trigger, so a concrete link exists. The normalizeComposerPathSearchQuery change preserves null as the inactive state, which the existing debounce tests in apps/mobile/src/state/queries.debounce.test.tsx require. The mobile test asserts the same bare-@ behavior. No unrelated change is demonstrated.

Full details: Description check

Explanation

The description is detailed and covers the problem (bare @ in the composer shows no files on web and mobile), the change (web passes allowEmptyQuery, mobile searches when the query is not null, and normalizeComposerPathSearchQuery keeps null as inactive), the scope (links issue #7557 and notes the mobile change), and verification (reproduction on main, unit repro, and before/after evidence). It does not follow the repository template headings, and it has no '## Problem' or '## Scope' sections as named. The template asks for a conventional commit title, but the title is not in the description; the author proposes one, so the title remains a point to fix. The evidence section is marked pending by the author. Overall the description is mostly complete, so it passes.

Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between aaa3dba and 8eee676.

Files selected for processing: 6

  • apps/mobile/src/state/queries.filesystem.test.ts
  • apps/mobile/src/state/queries.ts
  • apps/mobile/src/state/queryTargets.ts
  • apps/web/src/components/chat/useComposerMenuItems.ts
  • apps/web/src/state/queries.filesystem.test.ts
  • apps/web/src/state/queries.ts

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

@juliusmarminge
juliusmarminge merged commit 2d68968 into main Nov 13, 2026
37 checks passed
@juliusmarminge
juliusmarminge deleted the factory/issue-7557-a23405 branch November 13, 2026 23:44
amv146 added a commit to amv146/t3code that referenced this pull request Nov 14, 2026
* fix(server): Claude can show the user mid-turn text in full (pingdotgg#36384)

* fix(cli): tagged source builds report the release version (pingdotgg#36350)

Co-authored-by: Lakshmi Tanmay <[email protected]>

* fix(server): storage cleanup prunes idle No project folders under ~/.t3/scratch (pingdotgg#36369)

* fix(terminal): trimmed history no longer replays half of a control sequence (pingdotgg#36368)

* fix(usage): a re-emitted Codex snapshot is no longer billed as a counter rewind (pingdotgg#36367)

Co-authored-by: rihanaws <[email protected]>

* fix(server): a Claude Monitor line no longer wakes a delegated child's parent (pingdotgg#36339)

* fix(opencode): a lost subagent report no longer leaves a resumed call running (pingdotgg#36386)

* fix(web): a new worktree thread opened during a clone bases on the real default branch (pingdotgg#36379)

* fix(server): unauthenticated token requests no longer write DPoP replay markers (pingdotgg#36393)

* fix(server): other sites can no longer frame the web app (pingdotgg#36395)

* fix(server): a server browser tab survives a renderer crash, and a service worker badge call no longer causes one (pingdotgg#36389)

* fix(web): T3 Connect sign-in offers Retry after Clerk fails to load (pingdotgg#23620)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(ci): macOS PR previews no longer run the PR's bundle next to signing secrets (pingdotgg#36407)

* fix(mobile): a new thread's first message no longer returns to the composer after a lost launch reply (pingdotgg#32330)

* fix(web): size markdown media whose width and height carry a px unit (pingdotgg#32108)

* fix(web): file links the agent cited from a checkout it cd'd into open that file (pingdotgg#36364)

* ci(mobile): iOS jobs run on macos-27, store builds require the final Xcode 27.1 (pingdotgg#36421)

* fix(server): Claude context meter no longer shows an auto-compact point when auto-compaction is off (pingdotgg#36417)

* fix(web): a run waiting on foreground subagents says so instead of Thinking (pingdotgg#36334)

* fix(server): a follow-up to a delegated child waits for its awaited background work (pingdotgg#36411)

* fix(provider-grok): Grok follow-ups queue instead of cancelling the running tool (pingdotgg#36422)

* fix(server): thread list builds metadata only for the page it returns (pingdotgg#36434)

* fix(web): middle-clicking empty chat space on Linux no longer pastes into the composer (pingdotgg#36436)

* fix(web): closing Settings no longer leaves it as a back/forward stop (pingdotgg#36437)

* fix(opencode): OpenCode 1.x threads report context-window usage (pingdotgg#36430)

* fix(web): bare @ in the composer lists workspace files (pingdotgg#36435)

* fix(mobile): thread list project filter lists recently active projects first (pingdotgg#36433)

* fix(clients): live working timers count on the host's clock (pingdotgg#36420)

* perf(relay): lighter Postgres load and PS-160 cluster (pingdotgg#36442)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): mobile:install --session works on pooled devices (pingdotgg#36447)

* fix(native): KDE SnapShot no longer loses the first reply from KWin (pingdotgg#36218)

Co-authored-by: Claude Fable 5.2 <[email protected]>

* fix(server): t3 connect status no longer reports a publish-only link as exposed (pingdotgg#33967)

* fix(web): don't label Windows paths outside the workspace as relative (pingdotgg#28469)

Co-authored-by: Julius Marminge <[email protected]>

* fix(server): multi-line guest messages are no longer refused or stored with CRLF (pingdotgg#26542)

* perf(desktop): provider checks no longer compete with server startup (pingdotgg#35712)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web,mobile): explain missing file access for host videos (pingdotgg#24637)

* fix(scripts): iOS scenarios prepare the dev client before leasing a device (pingdotgg#36456)

* perf(server): a new thread's first turn starts sooner (pingdotgg#35710)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(provider-pi): running shell output no longer stores a snapshot row per update (pingdotgg#36429)

* fix(web): NVDA browse mode reads the current thread's branch, not the previous one (pingdotgg#34446)

Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* fix(server): T3 Connect clients are named "T3 Connect", not "T3 Connect connect" (pingdotgg#27887)

* fix(web): screen readers read the Update everything machine list as a table (pingdotgg#36445)

* feat: agents can restyle T3 Code with theme colors and CSS (pingdotgg#35247)

Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Claude Fable 5.2 <[email protected]>

* fix(mobile): long-pressed iOS blockquotes no longer draw over the thread (pingdotgg#36461)

* fix(cli): npm launcher no longer leaves a runtime running after a stop signal (pingdotgg#30487)

* feat(connect): require approval for new T3 Connect devices (pingdotgg#36419)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): run the Azure CLI in UTF-8 on Windows (pingdotgg#25801)

Co-authored-by: Julius Marminge <[email protected]>

* fix(server): preview navigation leaves a page whose script never yields (pingdotgg#36365)

* fix(server): the auto-settle sweep no longer rereads every idle branch every few minutes (pingdotgg#36371)

* fix(web): rewind no longer offers file restore in project-folder threads (pingdotgg#36467)

* fix(server): stop the relay client a crashed server left running (pingdotgg#36465)

* fix(server): read Azure DevOps pull request templates (pingdotgg#22881)

* perf(azure-devops): PR Code tab loads a page's files in one az run instead of two per file (pingdotgg#35295)

Co-authored-by: Julius Marminge <[email protected]>

* fix(web): copying a file preview selection returns the selected lines after scrolling (pingdotgg#36466)

* fix(mobile): push-token failures no longer report notifications as enabled (pingdotgg#26557)

* fix(provider-core): mise updates a tool configured by its backend name (pingdotgg#36472)

* fix(server): parent turns no longer duplicate delegated task thread items (pingdotgg#36473)

* fix(server): Windows drive paths open under WSL (pingdotgg#26030)

* fix(client-runtime): new T3 Connect machines appear without signing in again (pingdotgg#29788)

* fix(azure-devops): local pull request checkout no longer fails on --detect (pingdotgg#31170)

Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* fix(usage): count shared Windows and WSL transcripts once (pingdotgg#24319)

* fix(azure-devops): pull requests report build validation as checks (pingdotgg#31146)

Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* fix(desktop): WSL backend starts in distros without automounted drives (pingdotgg#25734)

* fix(server): t3 browser setup reloads an AppArmor profile that is on disk but not loaded (pingdotgg#36490)

* Initial plan

* fix(azure-devops): finish reconciling nightly diff tests

Remove retired files-diff code and update mocks for iteration changes and blob reads. Preserve bounded paging, cache, and error-path coverage.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: rihanaws <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: ValeraZSD <[email protected]>
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Pedro Henrique <[email protected]>
Co-authored-by: Kieren-Foenander <[email protected]>
Co-authored-by: Pavel Kroupa <[email protected]>
Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: Alex Vallone <[email protected]>
Co-authored-by: Copilot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: @ file/folder picker shows no matching files or folders even with an open project

1 participant