A chargeback is a one-shot, irreversible filing against a deadline. Rebuttal assembles the evidence Stripe cannot see, across the order ledger, the email thread and a phone call to the customer, qualifies it under Visa Compelling Evidence 3.0, waits for a human click in Slack, and refuses to file when the packet would lose.
The model writes prose. Everything with a consequence is a table, a rule, a counterparty's answer, or a human's click.
The reason-code checklist is complete and every claim cites a record. Staged first, then Stripe's own CE 3.0 validator is read, then filed, once.
Something is missing, the customer said no on the phone, or the human did not click. The missing items are named in Slack. Nothing is filed.
Filing would lose anyway: already refunded, or a fraud claim with no CE 3.0 path. Losing also costs the fee and the dispute ratio.
For a fraud dispute on Visa, the only way to win and remove the fraud record is CE 3.0: two prior undisputed transactions on the same card, 120 to 365 days old, with two of four identifiers matching across all three, one of them IP or device. That evidence is scattered across the processor, the checkout and the shipping record by construction. Stripe's built-in Smart Disputes cannot assemble it. Rebuttal can, and Stripe grades the result: eligibility moves from requires_action to qualified only when the submitted identifiers actually match. A real rule engine as ground truth, not our own scorer marking its own homework.
Stripe dispute ├── gather · 3 sub-agents, concurrent Stripe · Sheets · Gmail ├── CALL-E · if the thread is silent one call: received? recognises charge? → cited evidence ├── assess · deterministic delivered · signed · refunded · CE3.0 priors · identifiers match ├── decide · policy table SUBMIT / HOLD / CONCEDE ├── write · GPT-6 Astra cited claims; uncited ones dropped and counted ├── review · detector Instruction Violation · Hallucination ├── Slack · Approve & file / Hold nothing is filed without the click ├── Stripe · stage (submit=false) read Stripe's CE3.0 validator → submit only if qualified ├── Photon · one text to the customer Gmail only if no phone or no thread ├── Sheets · outcome row amount · recovered · fee · CE3.0 · run id └── Slack · summary → detector post-run Skipped Work · Out of Scope · Communication Failure