Agent chat: remove the duplicate floating copy button
The transcript now has one message Copy action. The redundant floating row Copy is removed, along with the received-message header's obsolete 28px reservation. Tool-output Wrap and Copy occupy their own grid column so they cannot cover text.
Leo: "But why do you still have this duplicate unnecessary copy button on the top right here? Like, if this... why? Why even bother with this, really? Like when you're just hovering over it, like it shouldn't be necessary to do this."
Message actions, code-block Copy, output-only Copy and keyboard transcript-range copying remain available. This also checks the adjacent code/output surfaces for duplicate controls and text overlap.
Takes back #24729: removes its generic floating transcript Copy and reserved slot as requested; the existing message and block actions provide the copy controls.
Validation
- Final head
4090430a674ae8604423e9f08de63c84ab49b989, rebased onto3bea08c56d5bfd2d09978affe405adf8e63a1a64. Final treee56a1faeaac92b8019118357102d1137b9f448caequals both final fleet snapshots. - Fleet run 40806853592: full web check, 25 focused copy/range/output/turn tests, and 2 browser overlap/copy cases pass. Focused run 40806591394 also passes both browser cases.
- The earlier post-rebase browser failure was a fixture hover target: hovering the tool header left output actions hidden. A DOM diagnostic found exactly one output Copy; the final regression hovers the actual output box, matching its CSS reveal selector. Product code did not change in that repair.
- Scoped pre-push and whitespace checks pass. The release note includes its required documentation link; prior digest recovery 40801645968 passed all five highlight tests.
- The original red regression fails before removal: run 40481290901.
- Risk: keyboard focus moves to the row article and output text has a separate grid column. Range-copy and real-browser checks cover both paths. Existing continuation-footer spacing and all unrelated base code are preserved.
Review (independent Codex gpt-6-astra high, review_copy_final_26096): SHIP at 4090430a674ae8604423e9f08de63c84ab49b989
The independent read-only reviewer inspected the whole eight-file final diff and relevant callers from the bare mirror. No blocker found; primary inspection agrees. This was a different-model subagent review, not a fleet review-box run. No verdict from an older head is transferred.
Visual evidence
Real gallery captures from the Linux/Chromium harness, using demo content only. The before is from cmux-ci 35c6c33242de447ffa68867f; the after is from 8f59592aeb4ad6a58dbe01f8. These are implementation captures, while the exact final-head regression run is linked above. The published files are byte-identical to the retrieved capture artifacts (SHA-256 before 9734277289dd515237a7862e1801164c68b9c531bcae000c1ed3e7e857c0a7d0, after 86bcc8a18d55752e4c79e40ff15abdb6b93d78200a3ecbf238dfd2542440a9ae). No private reference screenshots are published.
| Before | After |
|---|---|
![]() | ![]() |
Gallery: agent-pane.copy-controls, tool output and code fence.
Agent session: agent session

