Establish what is happening
Define the logical operation identity
Record the public operation or event identifier, input shape, actor or workflow, attempt identifiers, start and completion times, retry or replay reason, and final records. Link effects by stable business identity and redact sensitive values. Distinguish intentional repeated actions from accidental duplicates.
Map attempts to each effect
Align request or event receipt, queue claim, handler start, transaction, external call, commit, response, retry, and final state. Count effects by stable identifier and compare values and timestamps. Mark effects with unclear ownership instead of assuming the first or last attempt was correct.
Compare with a single execution
Use the same route, input structure, account or dataset class, and expected effect in a controlled single-attempt case. Compare keys, uniqueness checks, transaction boundaries, and final records. Note whether duplicates require concurrency, timeout, replay, or a plain repeated submission.
What to carry forward
Return a scope statement naming the logical operation, duplicate trigger, effect boundary, affected state, and uncertainty. Route the next work to idempotency, concurrency, replay handling, or client behavior. Stop when one controlled comparison can distinguish intentional repetition from duplicate processing.
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