Everyone says AI features ship with evaluation, guardrails and an audit trail. Here is
what those three words have to mean before a customer sees it.
One page, the whole gate list.
Why the usual definition breaks
A normal definition of done assumes a feature that passes today will pass tomorrow. Three
things break that assumption once a model is involved.
The gates
An evaluation set existsReal inputs with known-correct outputs, written before the build finished, so it describes the requirement rather than the behaviour of what got built. Include the awkward cases your domain expert can name, and the cases where the right answer is to refuse.
Blocks
Graded on outputs, and the grader is calibratedIt asserts on what the feature produced, not that it produced something. And the grader has been proven to fail a wrong answer.
Blocks
Run more than once, spread recordedPass rate and consistency. A feature that alternates on the same input is not ready even when the average looks fine, and the average is what hides it.
Blocks
Every guardrail has a test that attempts the thingSee the distinction below. An untested guardrail is a hope.
Blocks
The failure path is built and exercisedWhat the user sees, whether work falls back to a person, whether partial output is worse than none. Test it by making the dependency fail.
Blocks
It leaves a recordInput by reference, model and version, the decision, any confidence, whether a person was involved. This cannot be added retrospectively for work already done.
Blocks
The ordinary bar still appliesTests on every commit, release gates that block regressions, accessibility, observability. Our own GST Co-Pilot ships with 162 tests and 88 percent coverage, and the AI parts did not get an exemption.
Blocks
Cost and latency measured at peakAt the volume it will actually see once live. Rarely stops a launch, often changes a plan.
Advisory
Refusal and escalation cases coveredBlocking wherever a wrong answer has consequences.
Advisory
Control or preference
A control
Enforced outside the model, in code around it. There is a test that attempts the thing and shows it refused.
A preference
Expressed only as an instruction to the model. It is a request, and it holds until it does not.
Know which of your guardrails are which, and never describe a preference to a customer as a
control.
After launch
Re-run the set on a schedule, and always before a model version changes. Keep the baseline: a
case that used to pass and now fails is a regression whatever the average says.
Related
The verification machinery behind this, including calibrating a grader and reading a
distribution, is in Harness and verification.