fix(next): keep queued prompts in their sent position

Merged
TE
7d ago
+160-87

Queued prompts previously placed Send now and × beside the bubble, shifting the prompt left until delivery. The queued bubble now stays in the sent prompt's right-aligned position. Send now / × / Copy use the shared footer beneath it; delivery swaps in time / Copy / Retry without moving the bubble or footer. × restores the draft and attachments.

Leo's exact requests:

also why is send now on the right? the whole thing it's weird how it shoots the prompts to the left until it gets sent then it goes to the right...

previously it was just to the left of where the other bottom stuff in sent messages were... the send now or the x which cancels and puts the stuff (the draft incl. attachments) back into the composer

Takes back #27168: Leo clarified that waiting controls belong below the bubble in its sent footer slot; the earlier beside-bubble layout caused the left-to-right jump.

Integrates landed #27252's MessageFooterRow, 24px controls and 16px glyphs, and retains the waiting-message Copy behavior from #27313. Reference: Claude desktop's sent-message footer; private reference captures remain private. Queue ordering, RPCs and steer hint are unchanged.

Validation at 18b80298db781689cfe88cd4b3102c280bbd72d5:

  • Exact-source remote verification: full web check (format, lint, types and protocol), 24 passing tests, 0 failures, 138 assertions.
  • Production App browser coverage: short/wrapping prompts at 360px and 880px, dark/light. All eight cases retain identical bubble left/right/width and footer top/right/gap/height after Send now; footer gap is 4px and height 24px. Delayed acceptance, refusal/retry, and × restoring text plus a decoded image pass.
  • Original red/green proof: base styles produced nine expected alignment failures; fixed styles passed all eleven queued-footer tests.
  • Primary final source and visual review passed. Independent Astra HIGH/FAST exact-head SHIP reassessment passed. The hosted cmux-next red is a base red: same-base guard reproduction fetched actual base 8b110263ad74bd99501eed195adbeda4fe3a9fa2 and returned the same HomeChatColorsPanel.swift and HomeChatColorsView.swift SwiftUI findings (exit 1, 2 findings).

Risk: footer placement only; existing delivery and withdrawal handlers are preserved. No native source changed.

Final integrated queued → sent sequence (production App fixture, final head):

ViewQueuedSent
880px short, darkQueuedSent
880px short, lightQueuedSent
360px wrapping, darkQueuedSent
360px wrapping, lightQueuedSent

Agent session: agent session