Root cause: failures are silent, which is the worst mode for a screen-reader user
Many error and edge paths end at console.log/console.error or drop work with no user-visible signal. For a blind user, a client that silently does nothing is worse than one that reports an error, because it forces guessing.
Instances already filed
Other observed
- Transport-layer errors (ICE failures, peer errors) end at
console.log with no UI surface.
output.tsx:527-536 announces every line via an aria-live region unconditionally, while client.ts also speaks via speechSynthesis when autoread is on — the same line can be spoken twice, and neither path is gated on the other.
Suggested direction
Route transport/transfer failures to a user-visible surface (the output/error store), and make the announce path and the speechSynthesis path mutually aware so a line is spoken once.
Root cause: failures are silent, which is the worst mode for a screen-reader user
Many error and edge paths end at
console.log/console.erroror drop work with no user-visible signal. For a blind user, a client that silently does nothing is worse than one that reports an error, because it forces guessing.Instances already filed
sendDataflow-control wait can hang with no timeout/rejectionOther observed
console.logwith no UI surface.output.tsx:527-536announces every line via an aria-live region unconditionally, whileclient.tsalso speaks viaspeechSynthesiswhen autoread is on — the same line can be spoken twice, and neither path is gated on the other.Suggested direction
Route transport/transfer failures to a user-visible surface (the output/error store), and make the announce path and the speechSynthesis path mutually aware so a line is spoken once.