Self-audit finding: the idempotency row is written before processing, so a handler exception/500 followed by Stripe's retry would be suppressed as a duplicate and the event silently dropped. On the error path, delete the dedupe row so the retry reprocesses. (Bad-signature/ config 400s and the non-unique insert-error 500 never wrote the row, so those were already clean.)