Grounded Claims

Updated Aug 15, 2026 · DECIDED: Option B (Fede, 2026-08-14) — claims ledger now, escalation family first; C adopted selectively for the highest-stakes sentences · build under way

In plain terms

Every fabrication incident we've had is the same event: Clara states something about the system's state — "it's booked," "the team has it," "we have openings today" — that no record backs. Prompt rules can't stop this; the model writes plausible text, and plausible isn't the same as true. The fix that works is structural: a claim about system state doesn't reach a customer unless a record backs it. We already built this for bookings. This page decides how far to take it.

The evidence, one day's worth

Adversarial verification, 2026-08-14: three attack passes over two harness runs plus a production sweep. Most claimed defects fell as grader error; these survived.

Decision: how do we kill the class?

The options are a ladder, not rivals — the question is how far to commit.

Recommendation

B now, with A as its first shipped increment (escalations are actively unguarded and observed failing). Adopt C selectively where the stakes are highest — confirmations and handoff promises — as claim families migrate. The harness validity fixes land in parallel so every step is measurable against the replayed real-caller corpus.

Notes for the decision

Production sweep results (appended after the decision)

All real conversations since Jul 15 (237 threads, 1,266 outbound Clara messages, cross-checked against tool traces): 25 escalation-status claims — 21 fully backed by records, 2 ungrounded, 2 borderline.

Correction — Aug 15 evening

Everything in the section below was reverted the same day. The booking guard (PR #5731) rewrote three real Camellia customers' correct replies with canned text; replay over real history showed 0 true positives. Both it and increment 1 of this architecture (#5769) are out of production (PRs #5790, #5791). Decision on what replaces them is deliberately paused for analysis first. Full account: RCA — Aug 15.

Shipped overnight (Aug 15) — where this stood at 1 AM (superseded, kept as history)

Plain English

Two things are live in production this morning. First, the booking-honesty guard stopped rewriting real tour confirmations (it was eating 42 good replies a day, one to a real caller) — since the fix went live at 8:23 PM MT it has fired zero times. Second, the first slice of the "grounded claims" design is live for texts and emails: when Clara tells someone "the team has this" and nothing is on record, the system now creates the handoff for real and lets her sentence stand; only if that fails does it correct her out loud. No promise ships without a record behind it. Phone calls are untouched (by design — nothing new runs mid-call).

How we know it is safe. Rather than trust unit tests, we replayed the new check over every text/email reply Clara sent in the last month — 2,594 real turns — with the exact code that shipped, no AI involved.

Also fixed: the test bench itself. Last night's "Clara invented a signed lease" verdicts on the tour stage were the bench's fault (it re-used an identity that genuinely had signed a lease in an earlier run), not Clara's. The bench can now start a stage on a fresh identity.

What is next (in order): make the old booking guard's fallback text create the handoff it promises (or stop promising) · the phone-call lane — pre-call grounding, prompt rails, and an after-call auditor that creates any handoff the agent promised, with zero added mid-call latency · re-run the tour stage on the fixed bench for the honest before/after number (this morning's attempt was blocked by production API rate limits — being retried).

Context: booking-guard fix PR #5767 (merged) · ledger PR #5769 (merged) · bench fix PR #5771 (merged) · fake-escalation card fnUGgrf8 · availability card 0nBHa43P · scope-erasure card efGLobwt · harness validity card 7VKa0hXH.

PropFlow Docs