Why does my LinkedIn campaign say 'paused' with no reason?
This was a real bug — fixed Apr 30, 2026 (LL#252). Earlier, four code paths could write status='paused' on a LinkedIn campaign row without also writing the paused_at timestamp and paused_reason columns. Campaigns paused that way were invisible to the auto-resume sweeper and stayed paused forever, even after the underlying issue (account disconnect, high failure rate, etc.) cleared.
The fix introduces a canonical pauseLinkedinCampaign helper that flips all three columns atomically under a same-transaction audit row, plus a Postgres CHECK constraint that rejects any future regression at the DB layer.
What you should see now:
- Open the campaign detail page and look at the new paused_reason field — it now always tells you why the pause happened (e.g. linkedin_account_disconnected, linkedin_high_failure_rate, subscription_canceled, manual_pause).
- If your campaign predates the fix and the field is still empty, click Resume once and the system will re-evaluate the row through the canonical helper, populate paused_reason if there is a real cause, or move it back to running if not.
- Your prospects, sequences, and analytics are completely untouched by the fix — it is pure metadata hygiene.
If Resume immediately re-pauses with a populated reason, the underlying issue is real (e.g. account is genuinely disconnected) — fix that root cause and Resume again.