Generative UI in chat · demoSynthetic data · illustrative

The chat renders the screen. The server decides the click.

An accounts payable assistant answers with a working invoice view instead of paragraphs. The reviewer clicks Approve, the checks run in the open, and a stale record stops the request. Nothing is approved on version 7.

APPayables assistantSynthetic demo · invented data
Ask about an invoiceBlocked payments, suppliers, purchase orders.
Why is INV-104 blocked?
get_invoiceINV-104 RunningDone

It bills 400 units, but only 380 were received.PO-7781GRN-2210

INV-104
Halvorsen Industrial Supply
EUR 18,420.00
Version 7Version 7 · outdated
DocumentQty
PO-7781 ordered400
GRN-2210 received380
INV-104 billed20 not received400
Generated view · approved components
approve_invoiceINV-104 · seen v7 CheckingStopped
  • Identity m.okafor, AP reviewer, from the session
  • Permission approve up to EUR 25,000 in cost centre 4410
  • Version view built on v7, record is now v8

Nothing was approved. INV-104 changed after this view was generated, so here is version 8.

INV-104 · version 8
Changed 10:42 by supplier portal
Fieldv7v8
Amount18,420.0019,060.00
Freight linenone640.00
Qty billed400400
Version 8 is open for review. Approving it needs a new decision.
Ask about an invoice…Why is INV-104 blocked?

How the server decided

  • The model chose the view from approved components. That limits what can render. It does not give anyone permission.
  • Approve exception sends a request with the version the view was built on. Identity comes from the session, not from the generated view.
  • Permission and record version are checked when the request arrives. Version 8 had replaced version 7, so the call stopped before any approval.
  • The person gets the changes and a fresh decision. Nothing retries silently.
See the architecture plate (secondary)

The same path drawn as a systems diagram: PNG.

Architecture plate: the proposal side renders INV-104 at version 7; below a trust boundary the server checks identity, permission and version, finds version 8, does not execute, and returns the reviewer to a refreshed view.

Exports

Play the square social cut

Synthetic demo with invented names and amounts. No real backend runs here, and the checks are proposed application logic, not features of OpenUI, json-render or AI Elements. The chat parts follow the AI Elements component anatomy in static HTML so they can be swapped for the real components. Read the article.