refactor(composer): unify session and creator inputs - #766
Merged
Conversation
Pre-commit hook ran. Total eslint: 0, total circular: 0
beruro
approved these changes
Aug 10, 2026
beruro
left a comment
Collaborator
There was a problem hiding this comment.
Reviewed the final two-commit diff. Compact composer state and its dead callback/config paths are fully removed, shared layout tokens are consumed by both surfaces, the Launchpad placeholder does not mount workstation subscriptions, accessibility regression coverage is included, and all required CI checks pass.
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.
Problem
Session inputs used a compact-versus-expanded layout while Session Creator/Launchpad used a separate full-height composer. Their editor bounds, toolbar structure, control gaps, padding, and width were defined along different paths, so the two surfaces did not align or look identical. Focused Launchpad also lacked the empty workstation-track space used by focused sessions.
Solution
Remove the compact session composer state and always render the full-height editor. Share the 60–140px editor bounds, editor presentation class, and mode/model control spacing through input-area tokens. Collapse
ComposerBarto one toolbar layout for session and creator surfaces, cap the creator composer at the shared 900px content width, and reserve the collapsed 44px workstation track in focused Launchpad without mounting workstation controls or subscriptions.The review follow-up removes the obsolete newline-expansion callback chain and fixed editor-height constant, and gives the recording-state add-content control an accessible name with regression coverage.
Session navigation, autofocus, and per-session draft persistence are intentionally unchanged.
Potential risks
Short session prompts now occupy the taller full-height composer instead of the former compact capsule. The empty Launchpad workstation track appears only under the existing focused-chat
1100pxcontainer breakpoint, matching session behavior; narrower layouts retain zero track width. Automated checks cover layout tokens, mount policy, composer behavior, and the reviewed accessibility fix, but visual theme/viewport screenshots were not captured because desktop UI control was not authorized.Verification
npx vitest run src/components/ComposerBar/index.test.ts src/components/ComposerSurface/index.test.ts src/components/ComposerInput/__tests__ src/config/inputAreaTokens.test.ts src/engines/ChatPanel/focusedChatWorkstationLayout.test.ts— 83 tests passed.npx vitest run src/components/Voice/VoiceRecordingBar.test.ts— 1 test passed.npm run typecheck— passed.npx eslintover all changed TypeScript files — passed.git diff --check origin/develop...HEAD— passed.Audit
docs/frontend-ui-audit-2026-08-10/ComposerUnification.mdrecords 1 resolved fix, 12 keep-with-reason findings, and 0 abstraction candidates.SessionWorkstationRailstays unmounted, so no timer, listener, cache, request, or subscription is created for the placeholder. Pure mount-policy tests cover focused session, focused Launchpad, and inactive states. Performance verdict: pass.