# TODO

## Distributed global cap for phantom users (multi-process safe)

1. Add DB-backed quota as source of truth (`system_quotas` table, row `phantom_users` with `used` and `limit`).
2. Move cap enforcement into one DB transaction:
   - lock quota row with `SELECT ... FOR UPDATE`
   - check `used < limit`
   - create phantom user
   - increment `used`
   - commit (or rollback on failure).
3. Handle same-email races using `UNIQUE(email)`:
   - on duplicate key, do not increment quota
   - return existing user (or unified error response).
4. Add periodic reconciliation job:
   - recalculate phantom count from `users`
   - repair `system_quotas.used` if drift is detected.
5. Move phantom creation rate-limits to shared backend (Redis or DB atomic counters), so all server processes enforce the same limits.
6. Add concurrency tests:
   - multi-process create storm near cap boundary (499/500)
   - duplicate-email storm
   - assert `used <= limit` always holds.
