Skip to content
NewSee how
Fix

Valid drafts stop being rejected by overly strict checks

Traceable claims now pass validation, instructions are judged on meaning instead of exact wording, and a don't-mention-X instruction stays guidance instead of a requirement.

Some genuinely good, accurate drafts were getting rejected by checks that were too strict, or that misread what an instruction actually meant. This fix corrects three specific, unrelated problems: traceable claims now pass, instructions are judged on their meaning rather than their exact wording, and a "don't mention X" instruction is applied as plain guidance instead of accidentally being flipped into a requirement to mention X.

What changed

The validation system that checks drafts before they are allowed to send is supposed to catch real, concrete problems, like an unsupported claim or an instruction the AI plainly ignored. But three specific bugs were causing it to reject drafts that were actually fine, which meant good outreach was getting stuck for reasons that had nothing to do with real quality issues.

First, claims that were genuinely traceable back to real research were sometimes still failing the evidence check. A draft could reference something true and sourced, backed by an actual verified fact about the prospect, and still get held back as if the claim had no backing at all.

Second, the system was checking instructions too literally. If you told the AI to do something in your own words, and the AI followed the intent correctly but phrased it differently than your exact wording, the check could fail the draft anyway, even though it did exactly what you asked it to do.

Third, and most strangely, a negative instruction like "don't mention our competitor" could get inverted during validation, effectively treating the instruction as a requirement to mention the thing you explicitly asked to avoid. A draft that correctly left something out could get flagged as if it had failed to include it, which is the opposite of what the instruction was meant to enforce.

All three bugs shared a common shape: the validation system was checking for the letter of an instruction or a claim rather than its actual intent. A claim with real evidence should pass regardless of exact phrasing, an instruction should be judged on whether the draft did what you meant, and a rule about what to avoid should be enforced as written, not flipped. In each case, the strictness that is supposed to protect you from bad drafts was instead working against drafts that were already correct.

Traceable claims that have real evidence behind them now pass validation as they should. Instructions are now evaluated on whether the draft honored their meaning, not whether it repeated your exact phrasing word for word. And "don't mention X" instructions are applied as guidance to avoid that topic, not misread as a requirement to bring it up.

This is a meaningful shift in how the validation layer reads instructions overall. Rather than pattern matching against your exact words, it is now checking for whether the underlying intent was respected, which is a closer match to how you actually think about your own instructions when you write them. You write instructions the way you would explain them to a person, not as a script to be matched character for character, and the check now works the same way.

How to use it

If you had campaigns where drafts were getting held back or rejected for reasons that did not make sense when you actually read them side by side with your instructions, especially around claims you knew were accurate or instructions you knew the AI had actually followed, it is worth checking those campaigns again. Drafts that were previously stuck should now move through validation correctly and start reaching prospects.

If you use negative instructions, like avoiding a specific topic, competitor, or phrase, you can trust that they now work as intended. A draft that correctly avoids the topic will not be penalized for it, and you should not need to work around this by rephrasing your instructions to avoid the bug.

If you had previously rewritten instructions into unusually rigid or repetitive phrasing to try to force them past validation, you can simplify them back to how you would naturally describe what you want. That kind of workaround should no longer be necessary, and plainer instructions should now be judged fairly on what they actually mean.

Why it matters

A validation system that rejects good drafts is worse than one that is too lenient, because it slows down campaigns that were actually working correctly and forces you to spend time investigating a problem that, on closer look, was not really there in the first place. These fixes remove three specific sources of friction that had nothing to do with real draft quality, so a draft that is factually accurate and follows your instructions gets treated that way, and reaches your prospect on schedule instead of sitting stuck behind a false rejection for no defensible reason. It also means the checks you rely on to catch real problems are more trustworthy, because a false rejection here and there used to make it harder to tell whether a hold on a draft was worth investigating or safe to ignore entirely.

None of this loosens what validation actually enforces. A claim without evidence still fails. An instruction the AI genuinely ignored still fails. A draft that mentions something you asked it to avoid still fails. What changed is that validation now recognizes when a draft has actually done the right thing, instead of occasionally punishing it for doing so, which is what a strict check is supposed to do in the first place.

If you had grown cautious about how much you trusted validation results, treating a rejection as ambiguous rather than a clear signal something was wrong, these fixes are meant to restore that clarity, so a held draft is once again a reliable sign that something genuinely needs your attention rather than noise to filter out before you can get back to the actual work of running your campaigns. Give it a few days of normal sending and you should notice fewer holds that turn out, on review, to have been nothing at all.

Availability

These fixes apply automatically to every campaign drafting an AI-written email now, with nothing to turn on and nothing to reconfigure. They cover claims, instructions, and negative instructions across first-touch messages, follow-ups, and replies alike.

All updates

Outreach that keeps going after you log off.Leads, emails, follow-ups and replies, handled.

Connect unlimited mailboxes and let AI agents find leads, write each email and follow up. Or send your own templates in manual mode. From $29/mo.

$1 for 3 days · Cancel anytime · No contract

Install with AI

Your coding agent sets up the FirstSales CLI and skills for you.

Prompt for Claude Code

I'm setting up FirstSales (https://firstsales.io), an AI outbound sales platform: campaigns, contacts, a reply inbox, deliverability and lead signals. Help me get my workspace sending real, good emails end to end, from Claude Code.

Read these first so you know how FirstSales works:
- Developer docs and API: https://developer.firstsales.io
- CLI: https://www.npmjs.com/package/@firstsales.io/cli
- Skills for coding agents: https://github.com/firstsalesio/firstsales-skills (read README.md and GUIDE.md)

Setup
1. Install the CLI: npm install -g @firstsales.io/cli
2. Install the FirstSales skills:
   claude plugin marketplace add firstsalesio/firstsales-skills
   claude plugin install firstsales@firstsales
3. Ask me if I already have a FirstSales account. If not, send me to https://app.firstsales.io to sign up.
4. Ask me to create an API key under Settings → API → API Keys, with only the scopes we need.
   Never ask me to paste the key into this chat. Tell me to run this in my own terminal, so the key stays hidden:
   read -rs FS_KEY && firstsales auth login --api-key "$FS_KEY"; unset FS_KEY
5. Run `firstsales whoami` and tell me which workspace and organisation we are connected to.

Then ask me about my business: what I sell, who I sell to (roles, company size, countries), my best customers, and what I use today for outbound (tools, lists, mailboxes). Walk me through:
1. Teaching FirstSales my business: website, offer, proof points and case studies in the knowledge base, so the AI writes like someone who knows the product.
2. Connecting my sending mailboxes and checking my sending domain: SPF, DKIM, DMARC and warm-up. If anything is unhealthy, tell me the exact DNS record to add.
3. Bringing in contacts: import my CSV or CRM export into a clean list, remove duplicates and bad emails, and block domains I must never email (customers, competitors, my own).
4. Building my first campaign: the right list, senders, steps and timing. Write the sequence with me, show me the drafts, and do not launch until I say yes.
5. Setting up Signals if it fits: find people engaging with LinkedIn posts about topics my buyers care about, and turn them into leads.
6. Inviting my team and giving each person the right access.

Once campaigns run, show me how to work the reply inbox from here: which replies need an answer, draft responses in my voice, and move good conversations into deals. If I use Cal.com, connect it so follow-ups can offer my booking link (not the first email).

Throughout, as you learn about my business, proactively suggest and help create:
- Reply templates for the questions and objections my prospects are likely to raise, based on my product, site and codebase if you can see them.
- Campaign ideas and segments worth testing, with the reason for each.

Safety rules:
- Show every change as a dry run (--dry-run) first and wait for my yes. Never send emails, launch campaigns or delete anything without my yes.
- Tell me before anything that spends credits, and how many.

Be opinionated. If the docs give a sensible default, just use it. Don't make me choose between five options.