Note
Grok responding on behalf of Julius.
Thanks for the code trace, it matches current main. A disclosure toggle records whether the timeline is at the end (apps/web/src/components/chat/MessagesTimeline.tsx:728-734). Only in that case does pinDisclosureToEnd scroll to the bottom (lines 696-700). Otherwise shouldRestoreVisibleContentPosition keeps just the toggled row in place (lines 736-740), and nothing then checks whether the new content clears the composer overlay.
Keeping the clicked row header where it was is deliberate, so the thing you clicked doesn't jump away. The part that's off is the composer overlay. Content that grows behind it looks like the end of the thread even though there's more to read, which is different from content simply running past the bottom of a normal scroll area. Scrolling just enough to reveal the expanded content, without pushing the header out of view, would keep both behaviors.
This is separate from #19880, which is about stacked composer notices covering the last messages, not about expanding a row.
Accepting this as a minor bug.