A campaign.md is meant to stay around after it's sent as a record of what went out and when. Treating any non-draft campaign as a hard rejection forced deleting it just to keep CI green, and there was no way to fail on resolving a stale list/attachment reference either -- an archived campaign has nothing left to resolve, so check status before doing any of that work. Non-draft campaigns now report as a distinct, non-error "skipped" bucket instead of "rejected".
This commit is contained in:
@@ -101,11 +101,14 @@ Each file in `attachments:` is uploaded to listmonk's media library under a synt
|
||||
|
||||
Every `sync` that actually creates or changes a campaign auto-sends a preview via listmonk's test-send endpoint, to `preview_emails` if set, otherwise `CAMPAIGNS_PREVIEW_EMAIL`. `campaigns test` is for an on-demand re-preview without touching content.
|
||||
|
||||
## Sent campaigns stay in the repo
|
||||
|
||||
A campaign's `campaign.md` is meant to stick around after it's sent — a record of what went out and when, not something to delete once it's live. Once a campaign is anything other than `draft` in listmonk (`scheduled`/`running`/`paused`/`cancelled`/`finished`), sync leaves it alone entirely — no write, no re-preview, and (as of v0.1.6) no failure either. It's reported as **skipped**, a distinct, non-error bucket from rejected.
|
||||
|
||||
## Sync guardrails
|
||||
|
||||
A rejected campaign is usually one of these, all deliberate:
|
||||
|
||||
- **Anything other than `draft` in listmonk** (`scheduled`/`running`/`paused`/`cancelled`/`finished`) — sync refuses to touch it once it's live or sent.
|
||||
- **A `lists:` name matches zero or more than one listmonk list** — sync never guesses.
|
||||
- **An invalid `segment_query`** — listmonk's own error is surfaced verbatim.
|
||||
- **Missing `subject`/`from_email`/a target audience, or `type: optin`.**
|
||||
|
||||
Reference in New Issue
Block a user