Establish what is happening
Capture the duplicate effect
Record event ID, delivery ID, resource, attempt, worker, claim result, side-effect count, and final state. Redact payload and secrets. Note whether the duplicate came from retry, concurrent workers, or a local requeue.
Trace claim before effect
Follow identity extraction, deduplication lookup, durable claim, handler start, side effect, and acknowledgement. Compare timing for two workers. A hash or resource key may be insufficient if distinct events share a representation.
Bound duplicate cohorts
Group repeats by event ID, endpoint, worker, operation, claim age, and effect. Separate harmless duplicate acknowledgement, repeated local row, and repeated external action. Preserve unknown claims for review. Keep the first side effect attached to its event identity.
What to carry forward
Triage ends with stable identity, claim timing, duplicate effect, affected cohort, and recovery gap. Hold further side effects for ambiguous events. Route sender retry, claim storage, and handler ordering separately. Keep effects paused until identity is clear and the prior result is reconciled.
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