forked from Mike/freno-dev
0b128f6639068f55c86da879b11112139091c830
The lifecycle job marked rows with an unconditional UPDATE before sending, so two overlapping invocations (cron tick + manual hit, or retry) both passed the SELECT, both ran the UPDATE — re-writing the same value — and both sent the same email. Real duplicates went out to licensees. Rows are now claimed with a conditional UPDATE (... AND asked_at IS NULL), and the send happens only when the claim reports rowsAffected 1; a racing invocation claims nothing and sends nothing. Tests: lifecycle suite gains a lost-claim case; 36 nook API tests pass. Issue: FRE-11
Description
No description provided
Languages
TypeScript
63.2%
JavaScript
34.9%
CSS
1.2%
HTML
0.4%
Shell
0.3%