01 · Premise

"Human-in-the-loop" is often just theater.

Most AI products that claim "human approval" mean: a modal popup with an "Approve" button, no view of the source data, no edit affordance, and a 200-item daily backlog that no one reviews seriously by Wednesday. That's not approval. That's a rubber stamp with extra steps.

Real approval has a shape. The approver can see what the draft was made from. The latency to review one item is under 30 seconds for routine drafts. The audit trail captures intent, not just outcomes. And the system has rules — explicit, named rules — about which classes of drafts can ship without an approver at all.

Diagram · 01 The approval surface, in detail
APPROVAL QUEUE 5 drafts · sorted by impact CSM SARAH · ASSIGNED HIGH RISK · SCORE 8.2 Northwind Bank Usage down 38% w/w. Two P0 tickets unresolved. Exec sponsor last contact: 47 days. SRC: usage_daily SRC: zendesk #142 SRC: sfdc.Activity Approve · send Edit Reject Open in CRM AUDIT Draft generated 2026-05-22 09:14:03 Sources read 3 tables · 47 rows Approver sarah@example.com SLA 11 min remaining

Citation chips are clickable. Audit is always-on. The approver can see the work in roughly 20 seconds before deciding.

02 · The interface

Six things the approval screen must show.

  1. The draft itself, exactly as it would be sent / posted / saved. No "preview" mode that drifts from production output.
  2. Source citations, clickable to the raw row or document. If the draft says "$1.2M", the click opens the GL entry that adds to $1.2M.
  3. The trigger — what scheduled run or upstream event caused this draft to exist. Useful for spotting runaway loops early.
  4. Edit-in-place affordance. Approvers fix tone, not facts — but they need the surface to do so without an export/import dance.
  5. Approve / Reject / Edit-then-Approve, with the keyboard shortcuts most teams burn into muscle memory by day three.
  6. SLA hint. The approver should know how long they have before the draft auto-escalates or expires.

Most "approval UI" gets shipped without #2, #3, or #6 — and then nobody approves anything carefully after week two. The interface is where trust actually lives.

03 · Latency budget

The 30-second test.

How long should it take to approve one draft? For routine cases, < 30 seconds end-to-end. That budget breaks down roughly as:

  • 5 seconds: read the headline + the key claim.
  • 10 seconds: glance at one or two citations to confirm the claim is grounded.
  • 5 seconds: decide (approve, edit, reject).
  • 10 seconds: any inline edit if needed.

If routine approvals take longer than that, the draft contains too much — or the citation surface is too far away. A 30-second budget forces the upstream agent to be terse and well-cited. Both are good things.

Non-routine drafts (high impact, low confidence, novel source) get a longer budget — usually 2–5 minutes — and a different visual treatment so the approver knows to slow down.

04 · Audit trail anatomy

What gets logged, for how long.

Every approval event captures, at minimum:

FieldCapturedRetention
Draft contentExact draft as shown7 years (or your retention policy)
Sources readTable/file IDs + row countsSame as draft
ApproverSSO identity + roleSame as draft
ActionApprove / edit / reject + diffSame as draft
TimingDraft created, approved, dispatchedSame as draft
TriggerScheduled run ID or user promptSame as draft

The log is in your environment, exportable as Parquet, queryable as a normal warehouse table. No vendor-locked viewer. If you need to answer "show me every draft we approved against Customer X in the last 90 days," it's one SQL query.

"The audit log is not a compliance feature. It's the only product surface that survives the team that built the co-worker leaving."

05 · When can it skip?

Rules, named explicitly, written down.

Some classes of drafts can ship without an approver. Saying "the model is good enough now" is not a class. The classes that work look like this:

  • Confidence above threshold + impact below threshold. If the draft is a low-stakes acknowledgement reply and the model's self-reported confidence is high, auto-send. Re-check both numbers monthly.
  • Routing-only drafts. Assigning a ticket to a queue, tagging an email, labelling a document — reversible and easy to undo. Auto-action, log everything.
  • Approver-pre-authorised classes. The approver has explicitly opted in to "I no longer need to review weekly stale-opp lists; just send and log." Reversible by the same approver in one click.

None of these classes are inferred — they're written down, named, and explicitly toggled on. The default is human review. Auto-ship is an exception, not a regression to the mean.

06 · The rules engine

Where the policy lives.

The approval rules engine is a small piece of declarative config — not a model. It's a YAML-like document that names:

  • Each draft type the co-worker can produce.
  • Which named role is the default approver.
  • Any auto-ship classes (with their explicit thresholds).
  • The SLA — how long a draft can wait before it escalates or expires.
  • The escalation path — who hears about it next.

Version-controlled. Reviewed by the team that owns the workflow. Changes show up in the audit log too. That last bit matters — "who relaxed the approval threshold on Tuesday at 3pm" should be as queryable as "who approved this draft."

Related · from the library

Approval is the product, not a checkbox.

If your team is debating "AI safety policy" but hasn't designed the approval UI yet, you're solving the wrong problem in the wrong order. Talk to us first.

Back to resources