Repository navigation
Render the real Chat composer on the Conversation audit plate - #629
Merged
Merged
Conversation
MaggieAppleton
force-pushed
the
audit-split-plates
branch
from
October 15, 2026 10:17
6bc3284 to
4585d35
Compare
MaggieAppleton
force-pushed
the
audit-chat-composer
branch
from
October 15, 2026 10:19
1b1549d to
7e901db
Compare
Chat keeps the wire, draft, pickers and key routing and renders a new presentational ChatComposer (chat/composer.tsx) with the same markup, classes and aria. The Conversation plate now renders that composer inside the real workspace wrappers in each live state, and the Errors plate shows the real send-failed composer notice instead of an invented retry row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The field and Stop/Resume markers moved with the composer markup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaggieAppleton
force-pushed
the
audit-chat-composer
branch
from
October 15, 2026 10:49
7e901db to
4c6ea05
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was fake
.chat-composerwith a bare<textarea>, invented hint text ("Use # to reference a document") and aTerminalAlertbeneath it ("Message could not be sent. Try again."). None of that exists in the app. Its.design-audit-chatCSS imitated the Chat pane.data-mode, "Message…" placeholder). The plate also shows the realParticipationtoggle above the transcript ("Chopin participates") and its paused state, with an offline wire stub so pressing it does nothing.What it renders now
ChatComposer(apps/web/src/chat/composer.tsx, importscomposer.css).Chatkeeps all logic (wire, draft, pickers, key routing) and rendersChatComposerwith props:notice {tone,text,action},unavailable,references,run(stop/resume),connectionLabel/onReconnect,sending,sendDisabled,pickersandattachmentslots, andinput(draft value, handlers including main's typing reporteronChange/onBlur, combobox aria).composer.cssis now imported once, fromcomposer.tsx. Markup, classes and aria are unchanged; Stop and Resume stay two separate elements.DraftInput's props type is now exported asDraftInputProps..workspace-root/.workspace-chat-panel/.workspace-chat-bodywrappers, then the composer in each live state: empty, mentioning Chopin, sending, send failed (composer-notice + Retry, copy fromboundedChatError), reconnecting, offline + Reconnect, Chopin working (Stop), read-only, archived.data-mode, "Message…" placeholder). The plate also shows the realParticipationtoggle above the transcript ("Chopin participates") and its paused state, with an offline wire stub so pressing it does nothing.[role="alert"]rule is now scoped to direct children so it doesn't restyle the notice.CSS removed
.design-audit-chat,.design-audit-chat .chat-composer textarea,.design-audit-composer-actions,.design-audit-chat-error,.design-audit-recoverable-error. What's left is plate framing only (stage height and border, states grid).Before / after
Conversation before:



Conversation after:
Errors before:
Errors after:
I didn't capture a live-app screenshot: the live Chat needs a signed-in server session. The plate now mounts the same component, so the two can't drift apart.
Risks
chat.tsxis the highest-risk file in the audit. The diff moves the composer JSX intoChatComposerwithout changing it;cueId,connectionIdandinstructionsIdare now generated insideChatComposer(opaqueuseIdvalues, samearia-describedbyorder). Chat e2e suites (e2e/chat*.e2e.ts) weren't run locally because the ports are shared, so CI is the check.e2e/design/specimens.e2e.tsbaselines for the Conversation and Errors plates will change; that's expected.Checks
bun run typesok;bun test apps/web/src/design-audit apps/web/src/chat219 pass, including the newchat/composer.test.tsx(5 tests);check-design-contractok (no spreads into style sinks);check-tokensok; oxlint 0 warnings and 0 errors on changed files; dprint clean.🤖 Generated with Claude Code