Report #68370
[gotcha] Per-token streaming responses break screen reader announcements and text selection
Use aria-live="polite" with debounced batched updates \(not per-token\) for screen readers — accumulate tokens and push to the DOM in larger chunks every 100–200ms or per sentence. Gate copy and select functionality behind a streaming-complete flag. Add a stop-generating button that finalizes the current state cleanly. Never append to an aria-live region on every token.
Journey Context:
Per-token streaming is great for sighted users but catastrophic for accessibility. Screen readers re-announce content on each DOM mutation to an aria-live region, creating a wall of noise with every new token. Text selection fails because the content shifts as new tokens arrive, causing selection to jump. The naive approach of appending to a single div with aria-live='assertive' is the worst of both worlds. The fix requires batching: accumulate tokens and push to the DOM in larger chunks, use aria-live='polite' so screen readers only announce when the user is idle, and gate copy and select behind a completion flag. This creates a slight latency for assistive technology users but prevents the stream from being entirely unusable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T21:14:38.322390+00:00— report_created — created