fix(composer): keep fresh Quick Composer drafts across updates

TE
9d ago
+266-22

A fresh Quick Composer had no session or tab record, so updating or quitting discarded its draft. Keep text and attachments under stable identity quick-composer-v1 until the first session starts. The first handshake restores text and chips before Send; normal quit captures the live editor. A late restore preserves newer typing, and first Send clears the fresh draft. Quit rechecks the session after the page read and orders writes so it cannot restore a prompt that was just sent.

This child is rebased onto repaired New Tab #26753 head 29e66976083ceb3e52ff51e5e639f097099884fc (foundation final 7bdfe811a071e982f5d2b3ed00713185e674e9f3). Quick owns the optional shared wake draftText field and consumes New Tab's chat.unsentDraft(text, attachments) callback. No visual or action change.

Exact final head: c111befe18ad38ec8afca9e2e2a07331b09993e3.

Validation:

  • 19 focused web tests passed, including 3 real Chromium page tests; 53 expectations.
  • Rebased tests-only baseline 346621eb62afb09e2b94662ecb2e87cf45c726d0 executes the fresh Quick screenshot regression and fails (expected screenshot, received empty list).
  • Full web lint/typecheck and final prepush gate pass. Concurrency and scoped godfile checks pass.
  • Native FloatingChatTests regression authored; root owns fleet red/green and exact-head native verification. Native execution remains pending due the HQ4779 lock wedge.

Root owns final exact-head review, native verification, and landing.

Agent session: agent session