fix(next): keep composer drafts on whole lines

Closed
TE
11d ago
+140-70

Leo asked:

“also this bottom area still has fades? idk odd or even numbered lines when it goes down it doesn't do it proper or whatnot”

The composer draft now keeps its scroll offset and eight-line cap on whole line boxes, including the field padding. The prompt no longer applies an edge fade that can cut through the caret's line; the attachment strip keeps its horizontal fade. The line-grid rules live in a dedicated stylesheet so the shared composer CSS lanes stay isolated.

The test matrix covers 1–12 wrapped and unwrapped lines at 300px and 760px, including the capped state. The implementation matches the cmux-design-references composer notes and long-draft gallery state.

Validation:

  • bun test test/composer-draft-wrap.test.ts — Chromium: 17 passed, 360 assertions; local WebKit unavailable.
  • bun run typecheck — passed.
  • bun run fmt -- --check — passed.
  • prepush-gate.py --base origin/feat-cmux-next — no new violations.
  • Exact-head fleet focused browser lane: d094680d57010abb8a077331 (queued).
  • Exact-head fleet compile: 113461e4064436e3af1b7cb2 stopped with the same compile-lane red as base 563a31c0be54f99c0c7632a8; both receipts contain only existing Swift warnings before the fleet verdict.
  • GitHub gallery health rendered the composer long-draft state on the head; its five red states are existing gallery health/base reds (three allowlisted). A gallery compare trigger is unavailable because the gallery controller SSH route cannot be resolved from this host.

agent-identity footer