Aglet

Triage an out-of-order webhook state update

Valid events can arrive in a different order than they were created. Freeze one resource that moved backward and record event IDs, timestamps, local version, receipt order, and applied result. Separate network reordering, retry, equal timestamps, and missing version guards.

Establish what is happening

  1. Capture competing events

    Record resource key, event IDs, event and receipt times, source labels, local version, state before each write, and final state. Redact payload. Keep the two deliveries together so a single event cannot explain the reversal.

  2. Compare ordering signals

    Check sequence, version, timestamp precision, receipt order, and handler decision for both events. A newer receipt may contain an older state. Note whether the contract guarantees order for this resource or leaves it unspecified.

  3. Bound stale writes

    Group reversals by resource, event type, endpoint, worker, version evidence, and state transition. Separate stale snapshot, duplicate, equal-time event, and local race. Preserve any state that was overwritten for reconciliation.

What to carry forward

Triage ends with competing event identity, ordering evidence, first stale write, affected resource cohort, and contract gap. Hold destructive transitions when order is unknown. Route event contract, version guard, and reconciliation separately. Keep the older state from becoming authoritative during state review.

Technical background: Stripe documentation.

Keep the decision with the work.

Use a Work Item in Aglet to record the problem, the evidence you have, and the next decision. Add an owner and priority, then keep updates in the discussion so the next person can follow the reasoning.

Create an account See the product workflow