Only the campaign(s) whose files changed in this push get resolved and
diffed against listmonk now, instead of every campaign every time --
falls back to a full scan automatically if the before-commit can't be
determined. fetch-depth: 0 so that commit is always available to diff
against locally.
Sent/running campaigns are now skipped (not rejected) during sync, so a
finished campaign like 2026-07-23-iron-rose-proof-approved no longer has
to be deleted just to keep sync green.
Fixes a spurious "changed" flag on any campaign without an explicit
template_id, which was re-syncing and re-previewing campaigns like
welcome/campaign.md on every unrelated push.