@a2ui/voice one payload · two renderers
web-speech

Visual renderer DOM

Voice renderer speaker

The four moments

  1. Mid-turn switch. Ask for a charging station, then tap a row while it is still speaking. The speech stops mid-word and the same action fires that "the second one" would have sent.
  2. Kill the screen. Turn off Screen available, then ask again. The turn still completes — until you ask for the parking layout, where requiresVisual makes the renderer decline instead of inventing a description.
  3. The gate. Say "pay for the charge" and pick the line. stakes: readback holds the action, reads back the amount, and waits for an explicit yes — whether you tapped or spoke. Note the card number renders on screen and is never spoken: spokenSensitive.
  4. Swap the engine. One line in demo/index.html changes the adapter to Deepgram. Nothing else in the renderer moves — which is the difference between a framework and an integration.