- Shipped
- August 20, 2026 at 11:01 PM UTC
- Author
- Kamo
- Commit
- 2468fcd
The trigger fires every minute and each run claims work by selecting payloads still in RECEIVED. A backlog that takes longer than a minute therefore still had RECEIVED rows when the next tick started, so a second execution picked up the same payloads and created every lead a second time. This path has no vendorLeadID dedup to catch it: a 789-row backlog produced 1389 leads, 600 of them duplicates that had to be deleted by hand. @DisallowConcurrentExecution, as the sibling jobs in this package (email sweep, training and legal-package reminders) already carry. Quartz then queues the next fire instead of running it alongside. This is the root cause; persisting each payload's outcome as it happens (29fdf8a) narrowed the window but could not close it.