Feature
Single-use voucher redemption: exactly-once under concurrency, idempotent per (voucher, user).
The invariant / gate
Concurrent redeems of one voucher → counted once; the rest get a clean 409. Zero 5xx.
Acceptance criteria (the bar)
Multiple people may claim this — the strongest implementation gets merged; everyone gets feedback. Comment "claiming" to take it.
Feature
Single-use voucher redemption: exactly-once under concurrency, idempotent per (voucher, user).
The invariant / gate
Concurrent redeems of one voucher → counted once; the rest get a clean 409. Zero 5xx.
Acceptance criteria (the bar)
Multiple people may claim this — the strongest implementation gets merged; everyone gets feedback. Comment "claiming" to take it.