An AI Eval Pipeline That Can Say NOT-EVALUABLE
A quality number for an AI feature means little when nobody can say who checked the judge, how many cases it rests on or how sure it is. Five questions to ask of any setup, and the route ai-eval takes from traces to a scorecard that can say NOT-EVALUABLE.
Key takeaways
- A quality number from an AI feature is a guess unless you know who checked the judge, how many cases it rests on and how sure the number is.
- Ask five questions of any AI-evaluation setup: were real traces read, was the judge calibrated, does the gate read an interval, is change judged per failure mode, can it say it cannot tell.
- ai-eval takes your traces and one profile file through seven steps, scope to report, and outputs a scorecard with one verdict per suite.
- A suite has three verdicts, PASS, FAIL and NOT-EVALUABLE, and the seed suite returns NOT-EVALUABLE with exit code 3 even though 9 of 9 attempts passed.
- ai-eval measures only: defects and sign-off stay in the QA bundle, and production monitoring is specified but not built.
Contents
FAQ
Does ai-eval fix the failures it finds?
No. It measures. Defect lifecycle, quarantine and release sign-off stay in the QA bundle, and the evidence is handed over with /eval-signoff.
What do I need to run it?
Node 20 or later, Python 3 and Claude Code. The command npx agentic-fx@latest install --bundle eval adds the commands, the .evals workspace with a seed that lints clean and the VS Code board.
Sources
Only you and the owner see your answer and rating. Send private feedback
Enjoyed it? Support fx-blog with a coffee.
Related posts
Read the Scorecard: Intervals, Gates and a Frozen Baseline
A scorecard that says 87% can hide that 60 cases cannot support it. An LLM evaluation scorecard in ai-eval: every rate with its 95% interval, gates on the lower bound, and a regression gate on the largest drop in the total or any failure mode.
Who Checks the AI Judge? Calibrate It Before It Gates
A judge that agrees with your reviewers 60% of the time produces numbers that look like a good one. LLM judge validation in ai-eval: held-out labels, rates computed by calibrate.py, and a lint that fails any gate on an unvalidated judge.
Read 100 Real Traces Before You Write One Test
Most LLM test suites measure failures their author imagined. LLM error analysis in ai-eval: read real traces, name failure modes that need three trace references each, and build a dataset with at least 30% real inputs.
Comments
Oldest firstNo comments yet. Start the conversation.
Your orders support assistant tells a customer that order 881234 is out for delivery. The order tool returned nothing, and the assistant made the id up. You add test prompts, an LLM grades them, the dashboard turns green, and a review quotes the number.
This series, in four parts:
Five questions to ask of any AI-evaluation setup
The usual setup is imagined prompts, a model that grades the answers, and one percentage. Ask these five of it, and of this pipeline:
How ai-eval works: input, process, output
Two things go in: your production traces and one config file,
.claude/EVAL-PROFILE.md. Then seven slash commands run in Claude Code. Each writes a file the next one reads, and each refuses one shortcut./eval-scopesystem-card.md, the rules that must never break/eval-explore/eval-data/eval-judge/eval-validatevalidation.md, the judge scored on unseen labels/eval-run/eval-report--freezefixes a baselineWhat comes out is one verdict per suite, PASS, FAIL or NOT-EVALUABLE, with the gate that decided it. The board in VS Code shows the same thing.
One real run: nine passes, no PASS
The bundle's seed suite,
task-example, has three cases repeated three times on a stub adapter that calls no model. It shows the verdicts, not a model's quality.Every attempt passed. Exit code 3. Nine attempts cannot rule out a true rate near 70%, and nobody declared what the suite must reach. (
pass^1is the rate per attempt,pass^3the rate per case.)I shipped the seed suite with no gates on purpose. A suite earns a gate only once the evaluators that decide it can be trusted, so until then the seed reports numbers and never a PASS. Add a gate to this three-case suite anyway and the runner refuses:
Install it, and what it does not do
You need Node 20+, Python 3 and Claude Code. The installer adds the
.evals/workspace with the seed above, and the VS Code board.Try it
Then fill
.claude/EVAL-PROFILE.md. The assistant invented order 881234 in one trace, but you do not know how often. Part 2, Read 100 Real Traces Before You Write One Test, finds out before a test is written.Read this with your AI