fix(clients): align placeholders with conversation state - #6379
fix(clients): align placeholders with conversation state#6379serge-the-hedge wants to merge 5 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit c60bd52. Configure here.
ApprovabilityVerdict: Approved c24b879 This PR consolidates composer placeholder text into a shared utility and adds context-aware selection (new vs existing conversation). Changes are limited to UI copy in input fields with no business logic impact. Unit test coverage included. You can customize Macroscope's approvability policy. Learn more. |
Dismissing prior approval to re-evaluate c900bcc
c900bcc to
c24b879
Compare

Input placeholders on desktop/web seemed incoherent with what's going on, and the copy wasn't great too.
Turned out they were following "connected / disconnected" state instead of more obvious "new / existing conversation" state that was already used on mobile. I was annoyed more than I probably should've been, so here we go.
What Changed
Now there is canonical copy for new and continuing conversation states that lives in the shared client runtime. Web, desktop, and mobile, all invoke the same copy.
The new copy:
a. Provides a more meaningful tooltip for native
b. Stylistically more consistent than the old desktop one
Web/desktop selects between the two from the rendered conversation, including optimistic messages; mobile explicitly selects the appropriate copy for its new-task and existing-thread composers.
Why
Web/desktop previously selected its ordinary placeholder from session phase. A new draft has no session and was treated as disconnected, so it showed follow-up guidance. Once a session existed, continued conversations showed the basic starter instructions – the opposite of the intended behavior.
UI Changes
The composer placeholder copy changes on web, desktop, and mobile.
Verification
vp run --filter @t3tools/client-runtime typecheckvp run --filter @t3tools/web typecheckvp run --filter @t3tools/mobile typecheck.cjsscript was collected without tests and the Ghostty ABI suite could not import its vendoredwasm?inlineassetChecklist
Implemented with GPT-5.6 Sol via Codex in the T3 Code harness.
Note
Standardize composer placeholder text based on conversation state
conversationComposerPlaceholderfunction in composer.ts that maps aComposerConversationKind("new"or"existing") to a shared guidance string.resolveComposerConversationKindin ChatView.logic.ts to derive the kind from message count, loading state, andlatestUserMessageAt.ChatComposerand mobile composers (NewTaskDraftScreen,ThreadDetailScreen) now use these shared helpers instead of hardcoded or interpolated placeholder strings.Macroscope summarized c24b879.
Note
Low Risk
Copy and lightweight UI classification only; no auth, data, or send-path changes.
Overview
Composer placeholders now follow new vs existing conversation instead of web/desktop session connected/disconnected, with one shared copy path for web, mobile, and settings previews.
A new
@t3tools/client-runtime/composerexport definesconversationComposerPlaceholderfor'new'and'existing'strings. Web derives kind viaresolveComposerConversationKind(timeline message count, thread detail loading, and shelllatestUserMessageAtso loading threads still get follow-up copy) and passesconversationKindintoChatComposer, replacing the old phase-based default placeholder. Mobile new-task and thread composers and the settings font preview call the same helper with explicit'new'/'existing'.Reviewed by Cursor Bugbot for commit c24b879. Bugbot is set up for automated code reviews on this repo. Configure here.