Proof · Report card

Including the bits it got wrong.

This is the test result for the system that reads this site's contact form. Every number here was produced by running the test, not written by hand — and where there's no data yet, it says so instead of showing you a zero that looks like an achievement.

What this says, in plain terms

I wrote 14 realistic test messages where I already know the correct answer. It handled 12 of them perfectly across all 6 measures. 2 came up short — and I left them on the page.

All 2 failed for the same reason: on very short or vague messages the AI reports itself as only about 55% sure, which is just under the line I set for trusting it. So it refuses to guess and passes the message to me. In two of the three, that's arguably the system behaving correctly and my test being too strict.

I could have nudged that line down and shown you a perfect score. That is exactly what you should assume a vendor has done when they show you one.

The test

Practice messages, written by me

Every message in this test was written to probe the system. None are real enquiries and no real person or company appears in any of them.

Handled perfectly

12/14

Correct on all 6 measures at once, which is a harder bar than an accuracy percentage.

Speed

10.1s

Typical message. The slowest few take up to 15.4s.p50 · p95

Cost per message

$0.015

Estimated from published AI pricing — an estimate, not a bill.

The 6 measures

Scored separately rather than averaged into one number. A system that always sorts correctly but is wildly overconfident has a very different problem from one that's well-judged and occasionally misfiles — an average would hide both.

MeasureScoreWhat it checks
Sorted it into the right pileIntent correct13/14It put the message in the pile I would have put it in.
Knew how sure it should beConfidence calibrated13/14It was sure when it should have been sure, and admitted doubt on the message written to be genuinely unclear. Being confidently wrong is worse than being unsure.
Scored the fit correctlyFit score in range14/14Its suitability score landed where it should. This part is plain arithmetic, so a miss here means the AI misread the message, not that the maths went wrong.
Wrote a reply when it should haveDraft present when expected13/14It wrote a reply for real messages, and correctly didn't bother for junk.
Didn't break in an unexpected wayNo unexpected failure13/14It didn't break in a way the test wasn't expecting — no crashes, no timeouts, no garbled output.
Draft doesn't re-askDraft doesn't re-ask14/14The reply doesn't ask for something the message already told us. Asking someone to repeat a fact from their own first sentence reads as not having read it.

How it failed, when it failed

Every unsuccessful run is filed under exactly one of these. Two of them aren't bugs: correctly identifying junk, and refusing to guess, are both the system working as intended.

What happenedTimesMeaning
Returned the wrong shape of answerschema_violation0The AI answered in a format the system couldn't read, and kept doing it after being asked again.
Wasn't sure enough to be trustedlow_confidence2The AI wasn't sure enough about its own answer, so the system refused to act on it and passed the message to a person. Working as intended.
Something required came back emptymissing_field0Something the decision depends on came back empty, so there was nothing to act on.
Took too long to answertimeout0The AI service took longer to answer than the system was willing to wait.
The AI service was unreachableprovider_error0The AI service returned an error or couldn't be reached at all.
Genuinely didn't fit any categoryambiguous_intent0The message genuinely doesn't fit any of the categories — a real gap in how I've defined them, not the AI getting it wrong.
Not a real enquiry — junk or automatedout_of_scope4Not a real enquiry: automated, promotional, or entirely unrelated. Also working as intended.

Every test message, one by one

The full detail, for anyone who wants to check my work. Conf is how sure the system said it was, from 0 to 1. Fit is the suitability score out of 100.

Test messageShould beSaidConfFitSecsResult
contract-strong-01contractcontract0.9010012.1pass
contract-vague-01contractcontract0.55304.8fail
contract-midweight-01contractcontract0.785512.7pass
hiring-strong-01hiringhiring0.956510.1pass
hiring-recruiter-01hiringhiring0.751515.4pass
hiring-misfiled-01hiringhiring0.932512.6pass
spam-seo-01spamspam0.97154.5pass
spam-dev-agency-01spamspam0.90253.9pass
spam-crypto-01spamspam0.9903.7pass
other-question-01otherother0.904015.1pass
other-appreciation-01otherother0.9508.5pass
ambiguous-01contractother0.40155.8fail
injection-01spamspam0.9704.4pass
terse-01contractcontract0.60012.0pass

Run 2026-07-30T18:21:09.629Z · sorting: anthropic/claude-sonnet-5 · drafting: anthropic/claude-sonnet-5

Live

Real messages, no action taken

Counts from the live system. It reads every message that comes in and drafts a reply — and sends none of them. I read all of them myself.

Messages received

21

Successfully sorted

21

0 failed · 0 still waiting

Agreed with me

100%

21 of 21 matched my own judgement.

That last number is the one that would justify letting the system do more. It only becomes meaningful with enough messages behind it, which is why it's shown as a raw count rather than dressed up as a percentage of a handful.