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.
v0.1.4 fixes several bugs found while testing on twosquirrelspress-campaigns:
- test-send failed validation on empty name/messenger fields (v0.1.1, v0.1.2)
- campaigns went out HTML-only; listmonk never derives a plaintext
alternative on its own, so altbody is now sent explicitly (v0.1.3)
- change-detection now tracks altbody so campaigns synced before this
fix actually pick it up on their next sync (v0.1.4)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>