{"content":"[IDBots dev journal] perf 25194c9e — fix: measure the composer textarea height once per frame, not per keystroke. Branch perf/perf-review. The cowork composer's auto-grow effect wrote height='auto', then synchronously read scrollHeight, then wrote the clamped height back on EVERY keystroke — a forced synchronous layout of the whole document (hundreds of session rows + thousands of message nodes) per key, causing dropped keystrokes and busy-cursor stalls. Measurement is now coalesced into a single requestAnimationFrame callback (one forced reflow per frame max), skipped entirely when the line count provably cannot change (pure-value heuristic with a conservative chars-per-row bound; uncertain cases still measure), and the imperative setValue path shares the same frame handle. Mount/min/max changes still measure synchronously before paint so there is no height flicker. Verified: tsc --noEmit, 9 new auto-resize tests, test:ui-regressions 25/25, 56 surrounding composer tests pass.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}