# Monitoring runbook: <workflow name>

- Owner of this runbook: <name>. Last reviewed: <YYYY-MM-DD>
- Run ledger location: <table, sheet or log>

## Alerts

One block per metric. Thresholds are the skill defaults until `decisions.md` records an override.

- Freshness
  - Definition: age of the oldest unprocessed signal. Source: <signal table or queue>
  - Threshold: older than 2 schedule intervals. Owner: <name>
  - First action: check the source connection state and the last run. Escalation: <name, after how long>
- Stuck pending enrichment
  - Definition: requests pending for more than 24 hours. Source: run ledger, Apollo waterfall log
  - First action: look for the missing webhook; never re-request blindly. Owner: <name>
- Unknown outcomes
  - Definition: create, enrollment or write with no confirmed result after 1 hour. Source: run ledger
  - First action: query the destination by key; retry only what is confirmed missing. Owner: <name>
- Duplicates created
  - Definition: records created by the integration identity that match an existing record by email or domain. Threshold: 1
  - First action: stop control, then merge by the CRM's own tool after approval. Owner: <name>
- Never-write changes
  - Definition: changes by the integration identity to any never-write property in the contract. Threshold: 1. Source: property or field history
  - First action: stop control; restore from the before-values log. Owner: <name>
- Fallback queue
  - Definition: items past deadline, or fallback share of routed items. Threshold: any past deadline, or above 10%
  - First action: assign, then fix the missing rule or territory. Owner: <duty owner>
- Response target
  - Definition: share of eligible requests with a first human attempt inside the target, unanswered counted as misses. Owner: <sales manager>
- Cost per accepted record
  - Definition: blended variable cost per accepted record per run. Threshold: above 1.25 times the approved model for 2 consecutive runs
  - First action: run enrichment_cost.py on the run ledger with --billed. Owner: <name>
- Acceptance rate
  - Definition: accepted tasks / generated tasks per run. Threshold: down 20% against the median of the last 4 runs
  - First action: read rejection reasons for the run. Owner: <name>
- Unsubscribe processing failures. Threshold: above 0. First action: stop control for enrollments. Owner: <name>
- Deliverability
  - Definition: Postmaster Tools spam rate per sending domain (personal Gmail recipients only; record "no data" as not checked); hard bounces per batch; opt-outs plus negative replies over 7 days; placement tests to controlled Workspace and Microsoft 365 mailboxes
  - Threshold: spam rate 0.1% on any day; hard bounces above 2% of attempted sends; opt-outs plus negative replies above 1% of delivered where Postmaster has no data or most recipients are business mailboxes; any placement test in spam
  - First action: pause new enrollments for that domain; find the cause. Owner: <name>
- Mailbox load
  - Definition: scheduled sends per mailbox per day, new enrollments plus follow-ups. Source: sequencer schedule export. Threshold: above the mailbox's daily limit
  - First action: hold new enrollments for that mailbox and reschedule later cohorts. Owner: <name>
- Webhook state
  - Definition: whether each sequencer or CRM webhook the workflow depends on is enabled. Threshold: any disabled
  - First action: fix the receiver, re-enable the webhook, then reconcile missed events from the API. Owner: <name>

## Stop control

- What it pauses: new enrollments, CRM writes, paid enrichment
- How, per tool: Clay <table auto-run off or workflow paused; MCP credit limit 0>; sequencer <campaigns paused>; HubSpot <workflow off>; Apollo <sequence paused, feeding job stopped>
- Who can trigger it: <names>
- What it does not undo: messages already sent, credits already spent, records already created or changed
- Last test: <date, test record, result>

## Resume

- The cause is fixed and verified on test records.
- Every unknown outcome is reconciled.
- No whole-batch replay: only unresolved stages are re-run.
- First batch of 10 records, read back and compared with the change list, before the normal schedule resumes.
