/p/2026-08-23 · explainer
Paper explainer · 2608.19861 · Kang, Yu & Hwang

The step your guardrail can't see.

A runtime guardrail asks one question: is this action allowed? That catches the agent approving an ineligible refund. It cannot catch the agent that never verified who it was talking to, or confirmed nothing before making the change — and in the three customer-service domains tested, procedural requirements like those cover 67% to 100% of tasks. Compile the written policy into a graph, keep the position in code rather than in the conversation, and have a separate checker walk it at every user turn: mean pass-on-all-four-attempts goes 0.42 → 0.62, and the domain where the steps have a mandatory order goes 0.25 → 0.675.

01 · Two failure modes

Doing the wrong thing, and not doing the right thing first

Compliance breaks in two shapes. The agent takes an action policy forbids — approving a change on a ticket that is not eligible. Or the action itself is fine and the procedure around it is not: identity never verified, eligibility never checked, no confirmation before a charge. Step through four transcripts and watch which shape an action-level guardrail catches.

Interactive · step through the transcriptsaction-level guardrail versus a checker walking the whole procedure

      
action-level guardrail
checker walking the procedure
0%50%100%

The share of tasks carrying a procedural requirement is 67.4% in the airline domain, essentially all of them in retail, and 98.0% in telecom. What separates telecom is order: 54.0% of its tasks have steps that must happen in a fixed sequence, against 4.7% and 3.6% in the other two — which is exactly where the baseline agent collapses.

02 · The mechanism

Position in the procedure lives in code, not in the conversation

The policy is compiled offline into a graph of typed nodes — read-only tool calls, mutating calls that need authorisation, required user confirmations, decision branches, reusable subflows — and each node carries the condition that satisfies it. At every user turn a separate verifier reconciles open requests against stored state, walks the graph from the position it recorded last turn, stops at the first node the conversation has not satisfied, and hands that step back as the agent's next instruction. Advance the turns and watch the walk.

Interactive · advance the conversationone telecom request · verifier fires at each user-turn boundary
remediation injected before the agent acts
mutation gate

The design decision that matters is where the position is kept. The agent's memory of "I already verified them two turns ago" is a claim about a transcript; the verifier's record is a row in a store, reconciled each turn against what actually happened. That is why the next section's ablation — the same graph, pasted into the agent's own prompt — recovers so little of the gain.

03 · The results

Where the steps have an order, the gain triples

Three customer-service domains, four trials per task, scored on how many tasks pass on all four. The comparison is a plain agent loop, an action-level guardrail that blocks unauthorised mutations, and the graph-walking verifier. Pick a domain and a slice — the tasks that test forbidden actions, the tasks that test whether the right change was made, or all of them.

Interactive · pick a domain and a slicepass on all four attempts · GPT 5.4 as the agent · one graph per domain, reused across systems
0.00.51.0
gain over the plain agent loop
tasks in this domain with ordered steps

Note what the action-level guardrail does in retail: it takes the plain loop from 0.575 down to 0.360. Blocking is not free — a guard that intercepts a mutating call without telling the agent what to do instead can leave it stuck mid-procedure. Guidance and blocking are different interventions, and only one of them is monotone.

04 · The ablations

Giving the agent the graph is not the same as walking it

Two ablations isolate the two halves of the method. Put the compiled graph in the agent's own system prompt and remove the external verifier: the agent has the whole procedure written down and still cannot hold its place. Keep the verifier but give it raw policy text instead of the graph: it can judge, but it has no position to resume from. Step through the arms.

Interactive · pick an armtest splits · pass on all four attempts
0.00.40.8

Chart · what compliance looks like step by steptelecom · four trials per task
0%50%100%

The step-level number barely moves — 86.4% to 94.5% — while the whole-trace number nearly doubles. That is the signature of an ordering problem: individual steps were mostly being done, and the runs were failing on sequence. Reading only step-level compliance would have told you this system was already fine.

05 · Your policy

What a verifier costs against what it catches illustrative

The shape in production: an agent handling support conversations against a written policy, some fraction of which carry ordered steps — verify, then check eligibility, then confirm, then charge. Set your volume and the share of conversations with an ordered procedure. The verifier price and the compliance rates are the paper's; the traffic is yours.

Interactive · scale it to your trafficcompliance rates and per-conversation cost measured · volumes illustrative
procedurally valid conversations, plain loop
procedurally valid with the verifier

Forty cents a conversation is not nothing, and the paper is explicit that the verifier fires at user-turn boundaries rather than before every policy-relevant action, so coverage has gaps and enforcement stays probabilistic. If your rule is hard — money moved, data deleted, an account closed — you still want a deterministic check on the action itself. This buys you the procedure around it.

The numbers

What the paper actually reports

What this does not show

In practice