# The readiness check before outreach

Outreach passes a series of gates, ordered so that the ones which stop everything are asked before the ones that cost work. Channel and runtime first, then whether this is even a prospect, then compliance, then whether there is an evidenced address, then the sending mailbox, then the allowance, then autonomy. Only after all of those does anything reach a provider.

- **Status:** Available
- **Audience:** both
- **In the app:** #/prospects, #/needs-you, #/mailboxes, #/autonomy
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/workflows/sender-readiness-check/

## The chain, stage by stage

1. Trigger — a prospect is due its first outreach, or a person releases one that was waiting.
2. User or external event — nothing external. The prospect has not asked to hear from you, which is exactly why this list of gates exists.
3. Authentication and workspace resolution — the workspace decides the mailboxes, the compliance lists, the allowance and the autonomy rules that apply. All of them are per workspace.
4. Request — the message is prepared as a record before any gate is asked about sending it, so a refusal has something concrete to be a refusal about.
5. Canonical record — the draft, the prospect and the evidence behind the address are all on the record and readable together.
6. Reasoning — the message is written against the research, so the reason this organisation is being approached is legible in the message itself rather than generic.
7. Knowledge, memory and rules — compliance is checked in one place: suppression, unsubscribe, complaints and do-not-contact. A contact-level block held as a `block:<channel>` tag stops it here too.
8. Autonomy and approval — the mode at the narrowest applicable scope decides: send, ask a person, or prepare and stop.
9. Action through a provider — `outbound` is the single send boundary, the same one a person's own message uses. There is no separate outreach sender.
10. Result — sent, failed, or uncertain. Uncertain is shown as uncertain, because sending again to be sure is how a cold approach becomes two cold approaches.
11. Relationship, timeline and memory — the first outreach is recorded against the prospect. A relationship begins when they engage, not when you write.
12. Audit, usage and Needs You — the send is metered, the decision and any refusal are recorded, and anything held is ranked into Needs You with its reason.

## The gates, in order

| # | Gate | Refused when | What you see |
|---|---|---|---|
| 1 | Connect is running | The workspace has been switched off | Nothing is attempted at all; the runtime control says so |
| 2 | The channel is enabled | Autonomy for that channel is `off` | The channel is disabled, not merely quiet |
| 3 | This is a prospect, not a customer | Identity resolution matches an existing relationship | The prospect is refused rather than approached — a customer receiving cold outreach is the failure this prevents |
| 4 | Compliance | Suppression, an unsubscribe, a complaint, a do-not-contact entry, or a `block:<channel>` tag | A refusal naming the kind of block; a do-not-contact entry is not cleared casually, and the Assistant cannot clear one at all |
| 5 | There is an address, with evidence | No source ever stated one | The prospect is researched and not contactable — nothing is constructed to fill the gap |
| 6 | A mailbox can send | No connected mailbox with a suitable role, or its health verdicts say otherwise | Mailbox health on the Mailboxes screen; note that a mailbox which authenticates and returns nothing is quiet rather than broken |
| 7 | The allowance | The daily allowance is spent | The work is held rather than dropped, and the refusal appears in Needs You |
| 8 | Autonomy mode and scope | `ask_before_send` or `draft_only` applies at the narrowest scope | An approval waiting for you, or a prepared message that deliberately queues nothing |
| 9 | The content itself | A commercial term Knowledge does not support | The claim is refused and escalated rather than softened |

The ordering principle is worth more than the list. Gates that stop everything, and cost nothing to ask, come first; gates that require work or spend come last. Compliance sits ahead of address discovery for the same reason a door is checked before the shoes are cleaned: there is no point finding a way to write to somebody who has asked you not to.

## Where the surprises usually are

**A prospect that is already a customer** — The most damaging failure on this list and the reason gate three sits so high. It gets past identity resolution when a duplicate record exists, or when a won deal never moved the lifecycle stage.
**Nothing in Needs You and nothing sent** — `draft_only` prepares the message and deliberately does not ask anyone. It is not a fault; it is the mode whose purpose is watching what Connect *would* say.
**The allowance stopped the run halfway** — Work is held rather than discarded. Nothing is lost, and the refusal is visible instead of the run simply appearing to have finished.
**A quiet mailbox read as a broken one** — Authenticating and returning nothing is a health signal in its own right. Treating it as an outage sends people looking for the wrong fault.
**SMS** — Outbound SMS depends entirely on the configured provider, and the live carrier carries none. Readiness says so rather than presenting a thread that cannot send. In India, commercial SMS additionally requires DLT registration with the operators, which is a process with them rather than a setting here.

> **Note** Outreach and a reply from someone who wrote to you are two different paths with different gates, and they are never merged. Somebody answering your message is not subject to the cold-outreach conditions on this page, which is why a conversation can continue after an allowance has stopped a run.

## Reading a refusal

1. Read the refusal reason before changing any setting.
   - Result: Each gate refuses for its own reason, and the reason names the gate. Turning autonomy up to fix a compliance refusal changes nothing except your exposure.
2. If it is compliance, leave it. Confirm which kind it is and stop.
   - Result: Suppression, unsubscribe, complaints and do-not-contact exist to be honoured. A do-not-contact entry in particular is not something to route around, and the Assistant has no power over one.
3. If it is the allowance, decide whether the run should continue at all today.
   - Result: Held work resumes when the allowance does. Nothing needs to be rebuilt.
4. If it is autonomy, decide at the scope you mean.
   - Result: Scopes are contact, endpoint, channel and workspace, and the narrowest wins. Loosening the workspace to fix one contact is the most common over-correction on this whole path.

## Questions

### Why is compliance checked before an address is found?

Because it is the gate that can refuse absolutely and costs nothing to ask. Spending research on how to reach somebody who has asked not to be contacted is wasted work at best, and at worst it is how a suppressed contact ends up being written to anyway.

### Can I skip a gate for one important prospect?

You can change autonomy at contact scope so an approval reaches you instead of a send, and you can supply an address yourself. You cannot skip compliance, and nothing here will construct an address for you.

### Nothing was sent and nothing is waiting. What happened?

Almost always `draft_only`, which prepares a message and asks nobody by design, or the channel being `off` rather than merely inactive. Both look identical from a list of prospects and are different settings.

### Does this apply to SMS?

The gates apply, but outbound SMS depends on the configured provider and the live carrier carries none, so readiness reports that instead of offering a send that cannot happen. Commercial SMS in India also needs DLT registration with the operators before anything can go out.

## Related

- [Sender readiness](https://connectbyjbrh.com/docs/prospects/sender-readiness/)
- [The compliance check before outreach](https://connectbyjbrh.com/docs/prospects/compliance-check/)
- [First outreach to a prospect, end to end](https://connectbyjbrh.com/docs/workflows/prospect-outreach/)
- [First outreach](https://connectbyjbrh.com/docs/prospects/first-outreach/)
- [Outreach was blocked](https://connectbyjbrh.com/docs/troubleshooting/outreach-blocked/)
- [The prospecting allowance is spent](https://connectbyjbrh.com/docs/troubleshooting/prospect-allowance/)
- [The four autonomy modes](https://connectbyjbrh.com/docs/autonomy/modes/)
- [SMS in Connect](https://connectbyjbrh.com/docs/sms/)

## What this page is based on

- `docs-source/sources/CHANNELS.md` §1 — compliance checked in one place, mailbox health, the daily allowance holding work rather than dropping it, and the single send boundary with its three result states
- `docs-source/sources/CHANNELS.md` §3 — outbound SMS being provider-dependent, the live carrier carrying none, and DLT registration in India
- `docs-source/sources/GENERAL.md` §5 — autonomy modes and scopes, Needs You, and the audit trail recording refusals
- Connect capability registry (`docs-source/facts.py`) — `suppression_dnc`, `daily_quota_refusal`, `sms_outbound` (foundation)
