- Shipped
- September 12, 2026 at 11:35 PM UTC
- Author
- Kamo
- Commit
- 4125272
Counts: - Every status change moves a campaign's counts by exactly what it changed: a send +1 sent, a later bounce report -1 sent +1 bounced, an add +n, a removal by what its DELETE returned. Nothing counts the list on the way; before, every send recounted every status of the campaign. - Queued is derived from the total. Cancelled is a Redis counter, rebuilt from the rows if it is lost. Each finished run recounts once, which puts right anything a running count missed. - Completion, "can it send" and the audience top-up ask whether a row exists, or count to a cap, instead of counting the list. Send to latest: - Recipients can be added, and the All boxes changed, in any status (PUT /campaigns/{id}/audience). - POST /campaigns/{id}/send-latest sends a campaign that has gone out to whoever it should reach and has not yet. That is the addresses added since, and the records its All boxes reach that were added since: every source is walked again, and addresses already on the list are skipped. - The late suppression and the preference page's pull from a waiting send count only a row that actually moved.