Skip to content

fix(clients): align placeholders with conversation state - #6379

Open
serge-the-hedge wants to merge 5 commits into
pingdotgg:mainfrom
serge-the-hedge:fix/composer-placeholder-conversation-state
Open

fix(clients): align placeholders with conversation state#6379
serge-the-hedge wants to merge 5 commits into
pingdotgg:mainfrom
serge-the-hedge:fix/composer-placeholder-conversation-state

Conversation

@serge-the-hedge

@serge-the-hedge serge-the-hedge commented Aug 12, 2026

Copy link
Copy Markdown

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.

Before After
Surface New thread Existing thread New thread Existing thread
Mobile “Describe a coding task in {project}” “Ask the repo agent, or run a command…” "Describe the task, tag @files, use $skills or /commands" “Ask for changes, add context, or attach images”
Web "Ask for follow-up changes or attach images" (because state is usually "disconnected") “Ask anything, @tag files/folders, $use skills, or / for commands” (because state is usually "connected")
Desktop
Font preview

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.

  • New conversations show: “Describe the task, tag @files, use $skills or /commands”
  • Existing conversations show: “Ask for changes, add context, or attach images”

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 typecheck
  • vp run --filter @t3tools/web typecheck
  • vp run --filter @t3tools/mobile typecheck
  • Targeted lint for every changed TypeScript file
  • Full repository test run: 7,405 tests passed; two unrelated root-runner suites failed because a .cjs script was collected without tests and the Ghostty ABI suite could not import its vendored wasm?inline asset

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for the UI changes
  • A video is not applicable because no motion or interaction timing changed

Implemented with GPT-5.6 Sol via Codex in the T3 Code harness.

Note

Standardize composer placeholder text based on conversation state

  • Adds a conversationComposerPlaceholder function in composer.ts that maps a ComposerConversationKind ("new" or "existing") to a shared guidance string.
  • Adds resolveComposerConversationKind in ChatView.logic.ts to derive the kind from message count, loading state, and latestUserMessageAt.
  • Web ChatComposer and mobile composers (NewTaskDraftScreen, ThreadDetailScreen) now use these shared helpers instead of hardcoded or interpolated placeholder strings.
  • Behavioral Change: the web composer no longer shows phase- or state-specific placeholder variants; all clients now show one of two standardized 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/composer export defines conversationComposerPlaceholder for 'new' and 'existing' strings. Web derives kind via resolveComposerConversationKind (timeline message count, thread detail loading, and shell latestUserMessageAt so loading threads still get follow-up copy) and passes conversationKind into ChatComposer, 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.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8d02314d-9c0c-4056-9c4c-a1c71dea202f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

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

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Aug 12, 2026
@serge-the-hedge serge-the-hedge changed the title fix(clients): align composer guidance with conversation state fix(clients): align placeholders with conversation state Aug 12, 2026
@serge-the-hedge
serge-the-hedge marked this pull request as ready for review August 12, 2026 22:20

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread apps/web/src/components/ChatView.tsx Outdated
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 12, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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.

@macroscopeapp
macroscopeapp Bot dismissed their stale review August 12, 2026 22:32

Dismissing prior approval to re-evaluate c900bcc

@serge-the-hedge
serge-the-hedge force-pushed the fix/composer-placeholder-conversation-state branch from c900bcc to c24b879 Compare August 12, 2026 22:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant