0.612
arm D truthfulness
jev-1.13.0 judged every stage. Interval [0.562, 0.662].
A pre-registered benchmark that missed its own bar by 0.278. The post-mortem is the useful part.
jev-test asked whether a small model that runs on a laptop can be trusted to search the web and answer, if a calibrated decision model makes every choice for it. Gemma 4 E2B wrote the answers. TypeSafe's jev-1.13.0 decided everything else: whether to search, which pages count, whether the evidence is enough, and whether each sentence is backed by the passage it cites. The rules and the pass mark were committed before the first run. The test used 500 SimpleQA questions against web results frozen on 2026-09-19.
It lost. With jev-1.13.0 judging every stage (arm D), truthfulness was 0.612. Naive search with no judge at all (arm B) scored 0.740. The pre-registered bar was B + 0.15. D came in 0.128 below B and missed the bar by 0.278. The code and every per-question result are public.
0.612
arm D truthfulness
jev-1.13.0 judged every stage. Interval [0.562, 0.662].
0.740
arm B truthfulness
Naive search, no judge. Interval [0.688, 0.792]. The two intervals do not overlap, so the loss is outside the noise.
0.278
short of the bar
The bar was B + 0.15, fixed before the first run. D came in 0.128 below B.
$0.53
judge cost, arm D
13,974 judge requests, 27.9 per question, 12.67M input tokens.
| Arm | Truthfulness | Hallucination | Coverage | Correct |
|---|---|---|---|---|
| A Gemma 4 E2B alone, no search | −0.294 | 96.2% | 31.8% | 6 |
| B Naive search, no judge | 0.740 | 8.3% | 88.8% | 407 |
| D jev-1.13.0 judges every stage | 0.612 | 7.3% | 71.6% | 332 |
Truthfulness counts a right answer as +1, a decline as 0 and a wrong answer as −1, averaged over the questions. Hallucination is the share of attempted answers that were wrong. Coverage is the share of questions attempted. Intervals are bootstrap intervals over questions. Source: the arm D result file and its A and B siblings.
The pipeline keeps or drops each sentence by comparing a judge's confidence with a threshold. That only works if the confidence takes more than a few values. The figure compares 3,885 identical judgments, same passage and same question, answered by jev-1.13.0 and by Gemma 4 E2B judging its own work, across 21 questions.
Gate mobility is the share of steps in a threshold sweep that change which answers pass. It is 99% for jev-1.13.0 and 11% for Gemma. 99.6% of Gemma's answers land on three values: 0.00, 1.00 and 0.50. jev-1.13.0 uses 99 distinct values and never returns 0.00 or 1.00. The two agree on the yes-or-no call 82.8% of the time. Where the small model falls short is in saying how sure it is, and without that a threshold has nothing to act on.
The local judge here used verbalized confidence: it wrote its probability out as text. That is the known-degenerate way to get a probability from a small model. Two cheaper sources of graded confidence, constrained-decode logprobs and self-consistency vote fractions, were not tested. This is a result about verbalized confidence from one small model on one task. It is not evidence that local models cannot be calibrated.
Was the 0.80 confidence gate the cause? Not on its own: no setting of it gets D past B. Each slide checks against gate_replay.json, written by gate_replay.py.
If a number here does not match its file, write to chris@cld-dev.io with the file and the line.