## TL;DR
An agent is only as current as the file you hand it. A cancellation export taken hours or days earlier cannot know about this mornings saves, payments, and reactivations, and an agent sending at machine speed turns that small staleness into a large, embarrassing blast radius. Check every recipients live status at send time, expire exports aggressively, clean up the wrongly mailed accounts with their owners, and the same agent becomes safe to run daily.

```text
churn agent sent save-play emails to already-cancelled accounts: agent used a stale cancellation export
```

## Use this when
- Save-play or win-back emails reached accounts that had already cancelled, renewed, or been saved before the send
- The agent worked from an exported file or a cached list rather than live account status
- Recipients replied in confusion or anger, or CSMs reported the sends after the fact

## Not for this skill when
- The accounts were correctly cancelled at send time and the complaint is about email content or tone
- The agent sent to the right accounts but duplicated sends, a separate idempotency problem

## Steps
1. Freeze the agent and preserve evidence. Pause the sending job, keep the exact export file, run logs, and recipient list it used, and record the export timestamp against the send timestamp, because the size of the staleness gap and the exact population sent are the two facts every later conversation will need. Verify: the agent is paused and the export, logs, and recipient list are preserved
2. Quantify the harm precisely. Join the recipient list against live billing and CRM status as of the send moment, using status history where available, and classify each wrongly mailed account, already cancelled, already renewed, or already in an active save with a CSM, then assign each a human owner for follow-up before any system work continues. Verify: every wrongly mailed account is classified with a named follow-up owner
3. Handle the customer impact with people, not automation. Owners contact affected accounts with a brief apology and correction, check whether any offer in the email conflicts with the customers current terms, and log every contact in the CRM, because an automated apology from the same agent that caused the problem deepens the trust damage. Verify: follow-up contacts are completed and logged for all affected accounts
4. Rebuild the send path around live status. Replace the file based audience with an API or warehouse query executed at send time, and add a per recipient status recheck immediately before each send that skips any account whose status changed since the run started, logging every skip with its reason so the protection is auditable. Verify: a test run skips a seeded account whose status changed mid-run and logs the skip
5. Expire and label any export that must still exist for other steps. Stamp exports with their creation time, enforce a maximum age in the agent configuration measured in hours, and have the agent refuse to send from an expired file rather than warning and continuing, because warnings get acknowledged and forgotten while refusals get fixed. Verify: the agent refuses a deliberately aged export in a test run
6. Restart in stages with review. Run the agent in draft mode for several cycles with a human approving the recipient list and the skip list, compare its choices against live status, and only restore full automation once the skip mechanism has demonstrably caught real changes, keeping the send-time check permanently rather than as a launch scaffold. Verify: draft mode cycles are reviewed and the staged restart decision is recorded

## Why it happens
Agents act on the world as described by their inputs, and a static export describes a world that no longer exists by the time sends happen. Humans unconsciously compensate, they notice a familiar account saved yesterday and skip it, while an agent executes the list faithfully and fast. The failure is therefore architectural, status must be revalidated at the moment of action, and every hour of input age multiplies the number of accounts whose truth changed in between.

Compatibility: Agent sending workflows, live account status from billing and CRM systems such as Stripe, Salesforce, or HubSpot, and export handling, in current agent framework versions.

## Variants and edge cases
### agent sent emails to cancelled accounts stale export
['The direct phrasing. Live status at send time is the control, export freshness alone will always eventually fail.']

### save-play agent wrong recipients status changed
['The blast radius variant. Quantify and apologise account by account, the incident is a customer trust event first and a pipeline bug second.']

### churn agent audience file too old automation
['The process variant. Any file an agent sends from needs an age limit enforced in code, not a naming convention people are asked to respect.']

Edge cases to work through before you close the incident:
- A live query at run start is not a send-time check. Long runs drift too, so recheck per recipient or in small batches through the run.
- Skipped recipients need review, not silence. A daily skip digest to the agent owner shows the control working and catches accounts stuck in odd states.
- Keep a global suppression list for accounts in sensitive situations, legal disputes, escalations, recent complaints, that no campaign style agent may mail regardless of billing status.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_iAoHmGlhXAf9h0zaC9ekeg
