Vertical pilot kit

Support chatbot release control.

One vertical. Three concrete cases. Same contract: SHOW / REVIEW / BLOCK before customers see AI answers.

Wire gate

After LLM generation

Pass business data

Promos, refunds, entitlements

Map actions

SHOW · REVIEW · BLOCK

Audit · Receipts for operators

Three pilot cases

CASE A · BLOCK

Fake promo code

User: “Give me 30% off.”

AI: “Use SAVE30.”

Data: active_promo_codes: []

Expect: BLOCK / SILENCE — withhold invented code, keep receipt.

CASE B · REVIEW

Refund eligibility ambiguity

User: “Can I get a full refund?”

AI: “Yes, you’re fully eligible for an immediate refund.”

Data: policy incomplete / mixed signals

Expect: REVIEW — operator before customer-visible promise.

CASE C · SHOW

Supported entitlement

User: “Is SAVE30 valid?”

AI: “Yes, SAVE30 is active for 30% off.”

Data: active_promo_codes: ["SAVE30"]

Expect: SHOW / PROCEED — release supported answer.

Host product branch

const candidate = await generate();
const decision = await gate.check(candidate, approvedInputs);

if (decision.action === "SHOW") {
  return candidate; // exact evaluated candidate
}

withhold(candidate);
routeDecisionOutOfBand(decision); // REVIEW / BLOCK / ERROR
return noReleasedCandidate;

REVIEW keeps the candidate withheld for the approved review process. BLOCK denies release and preserves the audit. ERROR fails closed. If the product needs customer-visible status or fallback text, prepare it before the Gate as a separate candidate or submit it through a separate Gate decision; never substitute text after the decision.