Repository navigation
Chat: a bot's reply arrives whole, with a smooth entrance - #88
Merged
abhaypadmanabhan merged 6 commits intoNov 1, 2026
Merged
Conversation
A bot's reply landed whole in one frame. Now each word (a code span, bold run, link, heading, table or code block as one) fades in from a soft blur 200ms, a step after the one before: 50ms apart, closer for a long reply so it's all there in about a second; over 400 words it just appears. Only a reply that arrived while the chat was open, never history; none with Reduce motion. Modelled on Grok Bot's flowing replies. scripts/test-flowing-reply.mjs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review: a paragraph moved the count on by its words, but Inline gives a code span, bold run or link and the punctuation next to it steps of their own, so "Use `git`, `ls`, and `pwd`." took 8 steps where 5 were kept and the heading after it started early. Both now count with one function on the same split Inline draws from; across code blocks a reply keeps, line by line, at least the steps a block can take. Exact delays in the test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review: with steps counted for positions, the cutoff counted steps too, so a 401-word bold run (one step) still flowed. The cutoff counts words, as it says; the pacing still counts steps, which is what keeps the reveal to about a second. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Abhay: Grok Bot's chat replies don't flow in word by word (that code is its voice transcript); they arrive whole, with a smooth entrance. The next commit does that instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A reply that came in while the chat was open rose 6px and landed in one frame. It now comes in all at once, up from 94% and a 4px blur, opaque by halfway and settling fast: 320ms on cubic-bezier(.23, 1, .32, 1), the values of Grok Bot's message rows. The chat's own smooth scroll to the newest message carries the rest up. Only a bot's reply that arrived while the chat was open; yours, history and everything else as before; none with Reduce motion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
A bot's reply lands as a block in one frame (a 6px rise), which reads as a jump, most of all for a teammate whose copy of the chat updates every few seconds.
A reply that comes in while its chat is open now arrives whole with a smooth entrance: up from 94% and a 4px blur, opaque by halfway, 320 ms on
cubic-bezier(.23, 1, .32, 1)so it settles fast. These are the values of Grok Bot's message rows. The chat's own smooth scroll to the newest message carries the rest up. Only a bot's reply that arrived while the chat was open; your own messages, history and everything else as before; none with Reduce motion. Two lines of code (MessageRow's entrance) and one animation inapp/globals.css.(The branch first tried a word-by-word reveal; it's reverted in full in the fourth commit, so the net diff is only the entrance.)
Proof
reply-in0.32scubic-bezier(0.23, 1, 0.32, 1); earlier messages don't move; it settles to opacity 1, no blur, no transform. With Reduce motion: no animation. On origin/main there is noreply-in, so the check fails there.next build,next start) of origin/main plus this and the other six PRs from the same review, with a local, uncommitted guard so the server never signs in or answers a call; a headless browser played a made-up copy of a shared workspace as a teammate with Write sees it.npx tsc --noEmit -p .and eslint on the touched files: clean.Review: Reviewed with sol-loop: 1 round with gpt-6.1-sol on high. Sol verdict: approved (on the net change, after the revert; the earlier word-by-word version had its own 3 rounds).
secscan: VERDICT: PASS. The npm audit's 1 critical and 8 high are already on main (package-lock.json unchanged).
One of seven small PRs from a review of Bops as BrandLord's staff would use it in a shared workspace; each stands alone.
🤖 Generated with Claude Code