Mise Engine · Conversions · Testing Playbook

Testing the Conversion Engine with a Live LLM

← back to the engine cheat sheet

The one rule everything hangs on: the LLM generates the chaos and phrases the experience; deterministic code and reference data render every verdict. No model — not the chef-simulator, not any reviewer — ever asserts a conversion truth. If a transcript shows the model computing grams "to check the engine," that session is contaminated and the fix is the prompt.

01The setup — four pieces

1 · engine as a toolThe mise convert CLI

The LLM talks to the engine exactly the way the future production agent will — through a tool call, never through code access.

2 · the chef simulatorA Sonnet session with personas

Generates realistic asks in rotation: line cook ("#10 can", "a quart of pickle"), pastry chef (baker's %, grams), old-school ("a glug", "two handfuls"), invoice-speak ("4/1gal case", "CS"). Works against a coverage checklist so probing is systematic, not wandering.

3 · the tool proxyAuto-checking wrapper

Every call is logged and every response is invariant-checked automatically. The agent doesn't have to notice a failure — the proxy catches it.

4 · real seedsScenarios from real data

The top-200 ConvMissing failures (what real kitchens actually got stuck on), the fixture site's 21K conversion facts, and recipe lines from the beta kitchen's book. The LLM dresses these in chef language — invention is the garnish, not the base.

02How we know results are accurate — five layers, five judges

"Accurate" means three different things depending on the case — a number can be checked, a reference can be matched, or the right answer is a behavior (ask, or confess an assumption). Each layer below has its own judge; none of them is a model.

1

Invariants catches math bugs · every call · free

True regardless of input — no answer key needed:

2

Independent recomputation catches lookup & chaining bugs

For any answer built from stored facts, the harness recomputes the expected value with separate, deliberately dumb code — walk the same facts, multiply the factors, no engine involved — and diffs. Agreement by two different routes is strong evidence; disagreement localizes the bug to a specific hop.

3

Reference truth catches constant errors

A frozen table of known answers: exact constants (1 lb = 453.59237 g), the master-list facts, curated chef-verified conversions. Ordinary spec tests. (Reminder of why even "known" truths get checked once: our own docs shipped an inverted fl-oz constant.)

4

Behavioral expectations catches the trust bugs — the layer most teams skip

For ambiguous or unanswerable inputs, the correct result is not a number:

The check is "did the ledger confess correctly" — not "was the number right."

5

Human sample audit catches what the machines share as a blind spot

Weekly: review a small, dollar-weighted sample of transcripts end-to-end. Every disagreement becomes a permanent fixture. The only layer that can catch "the engine and the checker are wrong the same way."

The headline metric — silent-assumption rate: of the ambiguous inputs thrown, how many produced a confident answer with no confession in the ledger? This number's job is to reach zero and stay there. It is, in miniature, the product's entire trust proposition.

03One example, both outcomes

✓ pass

"Two 750ml bottles of Sauv Blanc, batches take 180ml — how many full batches?"

Engine: 8 batches, 60ml left. Layer 1: conservation holds (8×180+60 = 1500 ✓). Layer 2: independent recompute agrees ✓. Ledger carries the bottle-size source.

✗ fail — highest severity

Same question, but "two bottles of wine."

Engine answers "8 batches" with no assumption entry. The arithmetic is flawless — and it's a Layer-4 failure: a silent assumption. The number was right; the behavior was wrong. That distinction is the reason this harness exists.

04Session scorecard & how findings compound

Every session ends with a report:

Two trends prove the system is healthy: findings per session fall on old territory (it's all fixtures now) and coverage climbs. When a full persona rotation of fresh chef-chaos produces zero new math bugs and zero silent assumptions, the engine isn't "probably fine" — it has survived a measured, adversarial, physics-checked interrogation, and we can say so to a chef in September and an investor after that.

05Finding triage — every result lands in exactly one bucket