Resume day burst, then the slice
Resume re-pushes the full lifetime envelope. The pacer must null paced_lifetime_budget_cents so the next tick writes the slice. Leave the stale value in place and the campaign can burn the day in one hour.
Published 2026-09-09 · Search job: campaign resume overspend
Campaign resume overspend, when it happens on this path, is a stale pacer throttle plus a full envelope. Resume re-pushes the full multi-day lifetime. The pacer must forget what it last wrote, or it may skip the next slice and leave the day wide open.
The product-side pacer only PATCHes Beeswax when its target differs from campaigns.paced_lifetime_budget_cents by more than a small threshold. That column records what the pacer last pushed. It stops describing Beeswax the moment resume re-pushes the full envelope. If the pacer's next target then lands inside the throttle band of the stale value, it skips the write. The exchange keeps the wide-open envelope. The campaign can burn its whole daily budget in one hour. That is the behaviour the pacer exists to prevent. No error is raised. Concentrated spend is the only symptom.
Null the throttle on resume
The resume path nulls paced_lifetime_budget_cents and paced_lifetime_pushed_at. The next tick is a first push and writes unconditionally.
That is also why the pacer is dispatched immediately after the production spend supervisor in the same tick, not a minute later. The supervisor's resume path re-pushes the full envelope. Running the pacer next replaces it with the correct slice in the same tick.
The remaining exposure is one tick of eligibility at the buyer's own authorized daily budget. That gap is deliberate. Having resume push the paced slice itself would leave a campaign holding a tiny slice if the pacer is later switched off. A silent stop is worse than a bounded burst.
What this is not
This is not a prepaid-wallet overspend story. The daily cap and the impression ledger still exist. The risk is intra-day concentration after a resume, not a wallet debit that exceeds the buyer's authorized day.
It is also not "pace twice." If exchange_paces_delivery is true, the product-side pacer must not own the lifetime field. See Two things pacing at once stops delivery. Resume still re-pushes the envelope. Exchange daily pacing then spreads that day. Nulling the product-side throttle still matters so a later flag flip cannot inherit a stale slice.
If you change resume, write the revert first and keep the null. The burst-then-slice sequence is the contract: one tick open, then the slice, not an hour of yesterday's envelope. A resume that leaves paced_lifetime_budget_cents populated is a resume that can skip the next write. That skip is the overspend path.