24dd832218
Build a per-target dedup_key (tenant/workspace/article/platform/account) on publish job creation, take an xact advisory lock on the keys, look up already-active publish_records via the payload index, and skip creating duplicate desktop_tasks. Surface created vs existing task ids on CreatePublishJobResponse (and shared-types) so callers can tell the difference, return `desktop_publish_duplicate` on unique-constraint races, and expose desktop_account_id on PublishRecordResponse so the modal can disable already-published accounts. Make the compliance ack consumer accept a nullable job id since the dedup short-circuit no longer creates one. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>