Skip to content
~/miran

03/Evaluation · Testing · AI Engineering·3 min read

Evaluation as a Release Gate for AI Systems

“It seemed to work” is not a release decision. Repeatable evaluations turn AI behaviour into something you can regress-test.

two different kinds of confidence

Demo confidence is easy to manufacture. You ask a favourable question, the model answers fluently, and everyone nods. Release confidence is harder. It asks whether the system still upholds specific behaviours after a change — retrieval quality, citation discipline, abstention, authorization, and security-sensitive paths.

Those are different questions. Conflating them is how teams ship regressions wrapped in a good anecdote.

Evaluation as a release gate means important guarantees can fail the build. Not every subjective quality issue needs a hard gate. The guarantees that define the product contract do.

deterministic paths and expected behaviour

Deterministic evaluation paths use fixed inputs and expected outcomes so CI does not depend on a live provider’s mood. A deterministic test provider lets you assert that weak evidence abstains, that citations stay inside the packet, that unauthorized contexts fail closed, and that expected answers match for known fixtures.

Backend tests and AI evaluations play different roles. Backend tests protect APIs, database policy, auth flows, and service invariants. AI evaluations protect grounded behaviour and security-sensitive conversational paths that sit above those services. You need both.

Real-provider testing still matters, but it should be separate from the gate that blocks every merge. Live providers are useful for spot checks and release candidates. They are a poor sole dependency for “did authorization still work.”

what belongs in the gate

A useful gate covers retrieval quality signals for fixture corpora, evidence and citation checks, abstention cases, and security regressions such as injection-style prompts or attempts to cross a permission boundary through natural language.

It should also stay honest about scope. Passing deterministic evaluations does not prove production scale, customer satisfaction, or that every provider configuration is perfect. It proves the checked behaviours did not regress under the harness you trust.

When those behaviours regress, the release should stop. Fixing the gate by deleting the case is just deleting the guarantee.

verified project numbers as examples

These figures are project verification numbers from my own systems — not industry benchmarks and not claims of large-scale production deployment.

For AtlasCore UI v2, verification included 717 backend tests passed, 46/46 deterministic evaluations passed, and 216 targeted workspace / RLS / provider / knowledge database tests passed, with Ruff clean, strict mypy clean across 90 source files, and frontend lint, type-check, Vitest, and production build passed.

For VaaniDesk, verification included 206 backend tests, 113 deterministic evaluations, 40 security-critical tests with 0 security failures, and 14 Playwright end-to-end tests.

The point of listing them is methodological: release decisions were tied to suites that can be re-run, not to a single happy-path chat transcript.

Those suites also encode product language. “46/46 deterministic evaluations” is only meaningful if you know the cases cover abstention, citation discipline, and related grounded behaviours. Otherwise the number becomes a vanity metric. Pair the count with the contract it protects.

make the gate visible in the product narrative

Recruiters and collaborators can understand “tests passed” as theatre unless you explain what the suites protect. Connecting evaluations to product contracts — abstention, isolation, controlled actions — makes the numbers meaningful.

Evaluation will not remove judgment from shipping. It gives judgment better evidence. That is the difference between hoping an AI system still works and knowing which guarantees still hold.

A practical habit is to keep a short list of “must never regress” behaviours next to the suite: abstain on empty evidence, refuse cross-tenant retrieval, require confirmation for destructive actions, keep citations inside the packet. When a change touches those paths, the gate is not bureaucracy — it is how you avoid learning about the regression from a user.

Related: AtlasCore case study