The outcome vocabulary
Eight terminal states, and none of them is a shrug.
The same table drives the API, the console, the audit record and the billing ledger. A state never quietly becomes a different one to make a dashboard look tidier.
✓SENTOutcome: sentDispatch authorized and accepted by the provider.
—HOLD · TerminalOutcome: terminal hold, not sentTerminal hold · no dispatch. Future outreach requires a new customer-triggered request.
⊘SUPPRESSEDOutcome: suppressed, not sentSuppression active for this subject and intent. It ends only on a trigger-fingerprint change, an authorized clear, or TTL expiry.
⚠ESCALATEDOutcome: escalated to a named human, not sentOutreach blocked. The named human escalation target was alerted.
⏸DEFERREDOutcome: deferred, customer re-push required, not queuedOperation ended · no queue · customer re-push required.
✕PROVIDER REJECTEDOutcome: rejected by the provider, not deliveredThe provider rejected the dispatch. Retry behaviour follows the declared retry class.
?SEND UNCONFIRMEDOutcome: send unconfirmed, provider acceptance unresolvedProvider acceptance unresolved · no blind retry · investigation required.
!ERROROutcome: error, controlled failureA controlled failure inside the decision path. Recorded, not billed, not silently retried.