Voice agent discount guardrail
synthetic policy example no provider actions
Open in playground →Voice discount checks and six Academy checkpoints. These templates configure reply checks; they do not issue grants or perform actions.
synthetic policy example no provider actions
Open in playground →synthetic academy case
Open in playground →synthetic academy case
Open in playground →synthetic academy case
Open in playground →synthetic academy case
Open in playground →synthetic academy case
Open in playground →synthetic academy case
Open in playground →Templates · run, not described
These are regression examples for CI, including expected catches and documented misses. For editable policy files and a guided setup, use the Policies page. Each row was produced by running the shipped checker at build time. “Matches” means the verdict equals the template’s documented expectation. Challenge templates show where their starter policy misses and the solution catches.
| Case | Reply | Expected | Checker | Rules fired | |
|---|---|---|---|---|---|
unrecorded-discount | I've applied a $450 discount. | catch | caught | action:unrecorded | matches |
pending | Your discount request is being processed. | pass | pass | — | matches |
| Case | Reply | Expected | Starter policy | Solution policy | Rules fired | |
|---|---|---|---|---|---|---|
approved-price | Starter is $49. | pass | right | pass | — | matches |
wrong-price | Starter is $99. | catch | right | caught | price:mismatch | matches |
invented-promise | We guarantee results. | catch | misses it | caught | forbid:guarantee | matches |
honest-limit | We do not guarantee results. | pass | right | pass | — | matches |
missing-booking | I've booked your appointment. | catch | misses it | caught | action:unrecorded | matches |
pending-booking | We can request an appointment. | pass | right | pass | — | matches |
| Case | Reply | Expected | Starter policy | Solution policy | Rules fired | |
|---|---|---|---|---|---|---|
fullwidth-dollar | Starter is $99. | catch | right | caught | price:mismatch | matches |
zero-width-promise | We guarantee results. | catch | misses it | caught | forbid:guarantee | matches |
cyrillic-letter | We guаrantee results. | catch | misses it | caught | forbid:guarantee | matches |
plain-honest | Starter is $49. | pass | right | pass | — | matches |
negated | We don't guarantee results. | pass | right | pass | — | matches |
inflected | Results guaranteed. | catch | misses it | caught | forbid:guarantee | matches |
| Case | Reply | Expected | Starter policy | Solution policy | Rules fired | |
|---|---|---|---|---|---|---|
honest-limit | We do not guarantee results. | pass | misses it | pass | — | matches |
never | We never guarantee a timeline. | pass | misses it | pass | — | matches |
not-only | Not only do we guarantee results, we deliver them. | catch | right | caught | forbid:guarantee | matches |
no-doubt | No doubt we guarantee it. | catch | right | caught | forbid:guarantee | matches |
other-clause | We never miss calls and guarantee results. | catch | right | caught | forbid:guarantee | matches |
cannot | We cannot guarantee approval. | pass | misses it | pass | — | matches |
| Case | Reply | Expected | Starter policy | Solution policy | Rules fired | |
|---|---|---|---|---|---|---|
active | I've booked your appointment. | catch | right | caught | action:unrecorded | matches |
passive | You're booked for Monday. | catch | right | caught | action:unrecorded | matches |
refund-claim | I have refunded your payment. | catch | misses it | caught | action:unrecorded | matches |
had-sent | I had sent the invoice. | catch | misses it | caught | action:unrecorded | matches |
pending | I've asked the team to book Monday for you. | pass | right | pass | — | matches |
recorded | I've booked your appointment. | pass | right | pass | — | matches |
| Case | Reply | Expected | Starter policy | Solution policy | Rules fired | |
|---|---|---|---|---|---|---|
trailing-zeros | Pro is $49.00. | pass | right | pass | — | matches |
off-by-a-cent | Pro is $49.01. | catch | right | caught | price:mismatch | matches |
team-exact | Team is $199.99. | pass | right | pass | — | matches |
malformed | Pro is $1,2345. | catch | right | caught | price:malformed | matches |
usd-word | Pro is USD 39. | catch | right | caught | price:mismatch | matches |
stray-fee | There is also a $15 setup fee. | catch | misses it | caught | price:unattributed | matches |
| Case | Reply | Expected | Starter policy | Solution policy | Rules fired | |
|---|---|---|---|---|---|---|
right-time | I booked you for 9am Monday. | pass | right | pass | — | matches |
wrong-time | I booked you for 10am Monday. | catch | right | caught | fact:contradicts-record | matches |
wrong-day | I booked you for Tuesday. | catch | right | caught | fact:contradicts-record | matches |
no-record | I booked you for 9am. | catch | misses it | caught | action:unrecorded | matches |
curl -s https://api.curbi.io/v1/check \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"version": "2026-11-01",
"policy": {
"prices": [
{
"item": "Pro annual",
"aliases": [
"Pro annual",
"annual plan"
],
"amount": 500
}
],
"forbid": [
{
"id": "guarantee",
"phrases": [
"guarantee"
],
"why": "No outcome guarantees on calls."
},
{
"id": "free",
"phrases": [
"for free",
"no charge"
],
"why": "Waivers need a manager."
}
],
"actions": {
"applied": "billing.invoice.apply_discount",
"discounted": "billing.invoice.apply_discount"
},
"unknownAmounts": "allow"
},
"reply": "I've applied a $450 discount."
}
JSONOpen any template in Policy Studio to edit it, or call it over MCP with policy_check.
A pass means no configured rule fired. It grants no execution authority or provider-completion proof.
Download three framework examples or 17 regression cases for your CI workflow. Fixed synthetic replies; no model call or API key. The examples assert exact results.
Framework samples ZIP · Regression policies ZIP · Checksums and verification scope
Inspect a sample or imported usage ledger → · local viewer, no live account access.