Switchbordswitchbord
v0.15.27

Hardened draft review and idempotency

Campaign responder drafts are now concurrency-safe, with DB-level unique indexes, claim-safe accept, and canonical reject.

Campaign responder drafts now use a DB-level unique index to prevent concurrent runs from creating duplicate drafts.


  • Accept is now claim-safe: two simultaneous operator clicks cannot produce duplicate outbound messages.
  • Dispatch failures attempt a rollback so operators can retry a draft without manual DB intervention.
  • Reject writes reviewer, timestamp, and reason through a single canonical adapter.