Aglet

Learn from duplicate webhook effects

The durable lesson is a claim-before-effect contract tied to stable event identity. Preserve the race or retry that exposed the duplicate and the state it changed. Document how identity, claim retention, and acknowledgement interact without promising exactly-once delivery from a sender.

Keep the lesson for the next incident

  1. Document idempotency ownership

    Record event versus delivery identity, claim timing, storage, retention, concurrent behavior, duplicate acknowledgement, and reconciliation path. State which effects must remain behind review when identity is missing. Record the claim timing and event identity.

  2. Keep race fixtures

    Retain sequential retry, concurrent workers, similar distinct events, missing ID, restart, claim expiry, and prior-effect cases. Store expected claims and side-effect counts. Include the original duplicate trigger for handler or storage changes.

  3. Review duplicate signals

    Watch repeated IDs, claim conflicts, side-effect count mismatches, missing identities, and claim expiry by endpoint and worker revision. Assign an owner and threshold. Close the follow-up only when every effect-bearing handler runs the race fixtures.

What to carry forward

Close learning with identity and claim rules, race fixtures, handler ownership, and duplicate signals. Keep sender delivery limits visible. The useful outcome is a durable no-op or review decision before side effects occur. Review claim retention before changing handler concurrency.

Technical background: Twilio 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