DestinationsDelivery guarantees

Delivery guarantees

Destinations are built for durable, at-least-once export after ledger commit — not for synchronous RPC from inside the commit transaction.


What Causet guarantees

GuaranteeMeaning
Commit before deliverAn event is only eligible for delivery after the intent is durably committed.
At-least-onceA successful consumer/handler may see the same event more than once (retries, lease reclaim, producer timeouts).
Per-destination isolationFailure to deliver to destination A does not undo the ledger or block destination B.
Observable historyDelivery Log records attempts, status, and last error for operations.

What Causet does not guarantee

Non-guaranteeImplication
Exactly-once to your systemYou must dedupe on event id.
Global ordering across entitiesOnly per-entity ordering is a reasonable expectation on Kafka with entity keys.
Delivery inside the commit TXExternal latency never holds entity locks.
Unlimited retention of every attemptDelivery Log retention follows product limits; treat your own store as source of truth for business state.

Retries & leases

The data plane persists delivery jobs, leases workers, and retries with backoff on transient failures (network, 5xx, broker unavailable). Permanent failures (4xx that won’t succeed, invalid config) surface in the Delivery Log and may stop retrying after the policy max.

Pause a destination to stop dispatch without deleting config — useful during consumer outages.


Consumer contract (required)

  1. Treat every delivery as potentially duplicate.
  2. Dedupe on Kafka causet-event-id / webhook X-Causet-Event-Id / body id (export_v1) before side effects.
  3. Make handlers idempotent.
  4. For webhooks, return 2xx only after the event is durably accepted (or safely ignored as duplicate).