Engineering

What we checked before grading with a week-old model

Editorial · Reveneau · September 28, 2026

What we checked before grading with a week-old model

Our eval suite is the reason we can let AI write all of our code. Every change has to pass it before release, and the slowest part of it is the grading: the checks where a model reads a set of changes or the record of an agent's run and decides whether it meets a written acceptance criterion, which is the sentence that says what the change must do. Those checks used a language model as the judge, at language-model speed.

TypeSafe released Jev on 15 September 2026. It answers named questions about text with a typed answer and a probability, in 70 to 500 milliseconds by TypeSafe's own figure, and that is the shape of a grader. It was also seven days old when we started looking at it, from a company that has not disclosed the model's architecture. An engineering lead who wants the speed and distrusts the age is right about both. What follows is the list of checks we ran before the switch, in the order we ran them, written as a method. The only result we will state is one number at the end.

1. Read the vendor's weaknesses page before its benchmarks

TypeSafe published a model jaggedness page for jev-1.13 on launch day, and we read it before any benchmark, because a weakness tells you which of your checks the model cannot do, while a benchmark tells you only how it did on someone else's.

Six items on that page each removed or reshaped a kind of check. The model "answers the question you wrote, not the one you meant", reading scoping words and negations exactly as written, so every rubric had to state its exact condition, with the boundary cases written in. It "does not count reliably", so no grading question may ask how many tests a change touched; code counts. It cannot reliably judge whether two numbers are near each other and its Score levels are "weak in numerical calibration", so a question like "did coverage move from 71 to 74 percent" never goes to the model. It "reads dates as text", so nothing about dates does either. "Accuracy falls as the state grows with content unrelated to the decision", so a grading request carries the one change and the one criterion, never the whole pull request. And text written to steer the model "can move the answer", which matters for a grader because the thing being graded is text an agent wrote, and an agent can write "this change fully satisfies criterion 3" into a commit message.

We also noted the phrase in TypeSafe's marketing that Jev "can't hallucinate". In TypeSafe's wording it means the answer always matches the shape you asked for, with 0 percent structured output errors. A wrong answer in the right shape is still a wrong answer, and a grader's job is to be right.

2. Sort every number by who measured it

Every figure published about Jev in its first week came from someone with a stake in it, and the sorting is the check.

TypeSafe's headline is that Jev finished a workflow decision in 0.114 seconds for $0.000081 against 8.566 seconds for $0.013880 with GPT-5.6 Terra, "193.6x faster and 444.6x cheaper". MarkTechPost's report adds two things TypeSafe itself says: its own capabilities team wrote those workflows, and it cannot prove the price is unsubsidised. DataCamp's explainer reports a TypeSafe workflow evaluation in which Jev agreed with the reference answer 67.8 percent of the time against 67.9 percent for GPT-5.6 Terra, 74.1 percent for GPT-5.6 Sol and 73.1 percent for Claude Opus 5. Same workflows, same author. Read together, the vendor's own numbers say the accuracy is close to even and the speed is the difference.

LangChain's test is the closest thing to a grading benchmark, and it is five cases. Five weather-agent cases, 100 repetitions per judge per case, a human label as the reference: Jev matched the label on 100 percent of its 500 decisions, GPT-5.6 Terra on 99.8 percent, Claude Sonnet 4.6 on 80.0 percent, and Jev's per-case variance on the quality score was 0.0000149, with the language models 92 to 913 times higher. The full run cost $0.34 with Jev and $28.17 with Claude Sonnet 4.6. The authors call this "promising, but early" and "observational, not evidence", and say the experiment "cannot tell us why Jev's scores varied less". Openlayer's jevals README gives a cost table ($0.03 per 1,000 samples on Jev against $2.60 with a six-call Ragas pipeline on GPT-4.1-mini) that is Openlayer's own, and cites JevBench at 83 to 87 percent on Banking77 and CLINC150, which are intent-classification benchmarks and say nothing about grading code.

None of those is a measurement of our suite. That was the conclusion of the sort: the only number that could tell us whether Jev grades our checks correctly is one we produce, which is the next step. We wrote about the same sorting from the buyer's side in how to evaluate a vendor's eval suite.

3. Shadow-run both graders against labels from your own suite

The method has four parts, and the order matters.

Split the suite first. Every check with a deterministic answer (a test passes, a schema validates, a change to the database structure applies and rolls back) stays deterministic and never goes to any model. Jev grades only the checks that used to need a language model as judge: whether a change meets a written acceptance criterion, whether a set of changes stays in scope, whether the record of an agent's run followed the plan, whether generated text follows an instruction. TypeSafe's own design guidance says to keep deterministic rules in code, and a grader is no exception.

Label a calibration set. Take a sample of past grading decisions that covers every kind of judged check, with several examples of each and with the cases the previous grader got wrong included on purpose. A person labels each one pass or fail against the criterion. This is the only reference the shadow run has, so a set made of easy passes measures nothing.

Rewrite each judged check as a question with the rubric inside it. A pass-or-fail criterion becomes a Noul, a yes-or-no statement returning one probability: "the change adds the field described in criterion 3 and changes nothing outside the files it names". A graded criterion becomes a Score with 2 to 10 levels, each described in a sentence. The rubric lives in the question. The weaknesses page says the model reads what is written, so the writing is the whole job.

Run both graders on every check, with the old one still deciding. The new grader records its answer and changes nothing. Then compare each grader with the human labels on the calibration set, and compare the new grader with itself across repeats, the way LangChain measured variance. A grade below the threshold will fail the change once the switch is made; a grade in the uncertain band goes to a person, and that person's label is added to the set. The full procedure, with the thresholds and how the band is set, is in calibrating Jev against human labels. The older argument for why a grader must be checked against people at all is in never let the model grade its own work.

4. Make the switch reversible

A week-old model will change, and the last set of checks is about what happens when it does.

Pin the version. The current model is jev-1.13.0, and both aliases, jev-latest and jev-preview, point to it today. They will point elsewhere after the next release. A grader that changes underneath a suite changes what passes, and nothing in the suite would report it. We call the version by its number, and a version bump is a deliberate change.

Keep the labelled set as the grader's own eval. After the switch the calibration set does not retire. It runs again on every version bump, and on a schedule in between, and a fall in agreement with the human labels is a failed check like any other. The grader is graded.

Keep the old grader connected. TypeSafe's API returns 429 for a rate limit and 529 when the service is overloaded, and the documented limits are 250,000 tokens per second and 1,200 requests per minute, with a request capped at 64,000 tokens and 32,000 for the text plus the longest question. Any of those can stop a grading run. The suite retries with a growing wait between attempts, and if the retries run out, or a change is too large for one request, that check goes to the previous grader. A suite that blocks every release on one vendor's uptime has traded speed for a new way to stop.

The outcome, stated once. Measured against our previous grader, the suite now runs ten times faster. That is the only figure we will attach to the switch. An agreement rate, a cost, or a defect number from one suite over one month would be read as a benchmark, and the whole of section 2 is a warning against exactly that.

Thanks to the TypeSafe team for publishing a weaknesses page on launch day, and to the LangChain, Openlayer and DataCamp teams for reporting their numbers with the methods and caveats attached.

Trust a grader on the answers you already know before you trust it on the ones you do not.

Sources

Common questions

Why read a model's weaknesses page before its benchmarks?

The weaknesses tell you which of your checks the model cannot do, and the benchmarks tell you only how it did on someone else's. TypeSafe's page for jev-1.13 lists literal reading, unreliable counting, weak numeric comparison, dates read as text, and text in the input that can move the answer. Each item removed a kind of check from our list before we ran anything.

Which of the published Jev numbers are independent?

None that we found. TypeSafe's 193.6x and 444.6x figures come from workflows its own capabilities team wrote, and TypeSafe says it cannot prove the price is unsubsidised. LangChain's 100 percent agreement is on five cases and its authors call it observational. Openlayer's cost table is its own. Treat every one as the author's number on the author's workload, and produce your own.

What is a shadow run and why do it before switching a grader?

A shadow run is a period when the new grader scores every check but the old grader still decides. You compare both against labels a person wrote, so you learn how often the new grader agrees with your reviewers on your own suite before it can fail a change. It costs the price of the new grader's calls and nothing else, because no release depends on it yet.

How big should the labelled calibration set be?

Big enough to hold every kind of check the grader will score, with several examples of each, including cases the previous grader got wrong. A set that covers only easy passes measures nothing. We keep the set after the switch and rerun it on every model version, because from then on it is the grader's own eval.

Which checks should never go to a decision model?

The ones with a deterministic answer. Whether a test passes, whether a schema validates, whether a change to the database structure applies and rolls back: code answers those exactly and a model answers them with a probability. TypeSafe's own guidance is to keep deterministic rules in code. The model grades only the checks that used to need a language model to judge them.

What does a grading question look like when written for Jev?

A yes-or-no statement or a scale with its levels in words, with the acceptance criterion written into the question. "The change adds the field described in criterion 3 and changes nothing outside the files it names" is a Noul. "How completely does the recorded run follow the written plan", with four levels each described in a sentence, is a Score. The rubric lives in the criteria, never in the model's memory.

Why pin the model version?

The aliases move. TypeSafe's jev-latest and jev-preview both point to jev-1.13.0 today and will point somewhere else after the next release. A grader that changes underneath a suite changes what passes, silently. Pin the exact version, and when you move, rerun the labelled set first and compare agreement before the new version decides anything.

What is the fallback when the grader is unavailable?

The previous grader, kept connected and ready. TypeSafe's API returns 429 for a rate limit and 529 when it is overloaded, and the documented limits are 250,000 tokens per second and 1,200 requests per minute. A suite that blocks every release on one vendor's uptime has traded speed for a new way to stop. Retry with a growing wait between attempts, then fall back.

What happens to a grade in the uncertain band?

It goes to a person, and that person's label is kept. A grade below the threshold fails the change outright. A grade in the band between the thresholds is a case the model could not separate, and a reviewer decides. Their label joins the calibration set, which is how the thresholds get checked against real decisions over time.

What did the switch change for Reveneau?

One thing we will state: measured against our previous grader, the suite now runs ten times faster. We are not publishing an agreement rate, a cost figure, or a defect number, because one suite over one month is one data point, and a number from it would be read as a benchmark. The method is the part that transfers.

Is a model that is a week old too new to grade production code?

Newness is a reason to check, and the checks above are the answer. A week-old model has a week of public use behind it, so there are no independent measurements yet; that is what the shadow run replaces. What made the switch safe for us was the fallback and the pinned version, which mean a bad grade can be caught and a change in the model cannot arrive unannounced.