Jev and System One models: a plain guide / Start here
How Reveneau uses Jev
Reveneau writes 100 percent of its code with AI, and every change has to pass a large eval suite, written from the specification, before it is released. This month we moved the grader for the checks that need a judgment from a language model to Jev. Checks with a deterministic answer stay deterministic and never touch a model. Each judgment check is a Noul or Score question with the rubric written into the criteria. A grade below the threshold fails the change, the uncertain band goes to a person, and on our own suite the run is ten times faster than with the previous grader.
Published September 22, 2026. Editorial.
Key takeaways
- All of Reveneau's code is AI-written and every change is gated by an eval suite written from the specification, so the grader is on the path of every release.
- Checks with a deterministic answer, a test passing, a schema validating, a migration holding, stay in code and never go to any model.
- Jev grades the checks that used to need a language model judge: criterion match, scope, plan adherence and instruction following, each as a Noul or Score with the rubric in the criteria.
- A grade below the threshold fails the change. A grade in the uncertain band goes to a person, whose label is kept to re-check the grader later.
- On our own suite, measured against our previous grader, the run is ten times faster. That is the one figure we attach to the change.
This page describes one company's practice, Reveneau's, and it is written as practice rather than as a result. Reveneau generates all of its code with AI. Every change has to pass an eval suite written from the specification before it is released, and the company takes responsibility for the whole project through production and after release. The suite is where Jev now sits, and this page says exactly where, why, and what we will and will not claim about it.
Why the grader matters to us more than to most
When a machine writes the code, the writing stops being the hard part. What remains is deciding what correct means and proving it on every change without a person having to remember. That is the argument of our eval-driven development guide, and it is why the grader is on the path of every release we make. A slow grader makes the suite run less often. A grader that cannot explain its verdict, or that gives a different verdict on the same input twice, makes the suite less trusted. Both problems were real for us with a language model as judge, and the second was the worse one.
Two kinds of check, kept apart
The suite has two kinds of check, and the split is the most important design decision in it.
Checks with a deterministic answer. A test passes or fails. A schema validates or does not. A migration applied to a copy of production data holds its invariants or breaks them. A performance threshold is met or missed. A build compiles. These have one right answer that code can compute, and they never go to a model. They never did, and they never will, because a model that gets a deterministic check wrong 1 percent of the time is worse than code that gets it right every time. TypeSafe's own guidance says the same: "Keep control flow, deterministic rules, and side effects in code" [1].
Checks that need a judgment. Does this change do what the acceptance criterion says, as written? Does this diff stay inside the files and behaviour the plan listed? Did the agent's trace follow the plan it was given? Does this generated text follow the instruction it was given? These are questions about the relation between two texts, and no line of code answers them. They used to go to a language model as judge. They now go to Jev.
How each judgment check is written
Each judgment check is one question to Jev, of one of two types.
A Noul for anything that is pass or fail. The acceptance criterion is the statement, written as one positive clause in the words the specification uses. "The export endpoint returns one row per active user." "Every file changed in the diff appears in the plan's file list." "The response addresses the question the user asked." Jev returns a probability that the statement holds for the state [2].
A Score for anything where partial credit matters. How completely a response covers a rubric with several parts, on a scale described in words from "covers none" to "covers all". Jev returns a probability-weighted value on that scale [3].
The state for each check is exactly what the check needs: the criterion, the diff and the plan for a scope check; the instruction and the output for an instruction check; the plan and the trace for a plan-adherence check. Nothing else goes in, because TypeSafe documents that accuracy falls as the state fills with unrelated content [4], and because a shorter state is a cheaper one. Every count, comparison and date the check depends on is computed in code and written into the state as a fact, for the reasons on where Jev is weak. All of a change's judgment checks go in one request, since TypeSafe evaluates every question in parallel [5], and many questions in one call covers why that is the cheap shape.
The rubric lives in the criteria. That was true before the switch and it is the reason the switch was possible: a criterion written so that a machine can check it, in the sense of writing specs an agent can verify, is already most of a Noul question. The work of the migration was mostly rewording criteria that had negations or implied conditions in them, because TypeSafe documents that Jev reads those literally [4]. How to write the state and the questions is the page we wrote from that experience.
What happens to a grade
Three outcomes, set per check according to what a wrong answer costs. This is the part of the suite where Reveneau's own thresholds live, and they are ours to defend.
Below the threshold, the change fails. A scope check has a high threshold, because a diff outside the plan is never acceptable and a false fail costs only a re-run. A rubric-coverage Score has a threshold set from labelled cases, because the cost of a false fail and a false pass are closer.
In the uncertain band, the change goes to a person. That person reads the diff and the criterion and gives a label. The label is kept, with the state and the question, so that the grader can be re-checked against it later. This is the band where the model has said it is unsure, and the labels from it are the most useful data we collect: they tell us whether a criterion needs rewording, whether a threshold has drifted, and, when TypeSafe releases a new version, whether the calibration curve moved. TypeSafe's confidence docs describe the band as "Proceed with caution" and the low end as "Route to a human", and add that different actions should be gated at different levels depending on the consequences [6], which is the rule we apply.
Above the threshold, the change passes that check. It still has to pass every deterministic check, and a person still reviews the diff once everything passes. The reviewer stays. What Jev removed is the wait for a judgment that used to take seconds per check and now takes a fraction of a second for the whole set.
The one figure, and why only one
On our own suite, measured against our previous grader, the run is ten times faster. That is the figure we state, and it is the only one.
We do not attach a dollar figure, because we have not measured the cost in a way we could show the working for. We do not attach a defect rate, because we have not run the controlled experiment that would separate the grader's effect from everything else that changed this month. We do not attach a count of evals, a count of changes, or a count of clients, because a consultancy whose whole pitch is verification should not publish numbers it cannot verify. The pillar of our eval-driven development guide makes the same refusal about evals in general, and it applies here.
What we will say is what changed in practice. The grading step used to be the slowest part of the suite. It is now one of the fastest. The suite therefore runs more often, and a failing change is caught sooner. And the grades are stable: the same state and the same question return the same probability on repeat, which TypeSafe's own cookbook measured as a standard deviation of 0.0 across five repeats for 11 of 13 questions [7], and which matches what we see. A grader that returns the same verdict twice is a grader an engineer can argue with, and that was the thing we wanted most.
What we checked before switching
Jev was five days old when we started, and a grader on the path of every release deserves more caution than a five-day-old model would usually get. We did four things.
We re-ran the labelled cases. Every judgment check had a set of past verdicts from the language model judge, some of them corrected by a person. We sent the same states and criteria to Jev and compared. The disagreements were the useful part, and most of them traced to a criterion with a negation or an implied condition, which is on TypeSafe's jaggedness page [4] and which rewording fixed.
We set thresholds per check from those cases rather than from TypeSafe's default bands. The 0.9 and 0.5 bands in the confidence docs [6] were the starting point, and the labelled cases moved most of them.
We pinned the model version. The current model is jev-1.13.0, and the jev-latest alias moves with each release [8]. A grader whose threshold silently shifted would pass or fail changes for a reason nobody chose, so the suite names the version and a version change is itself a change to be tested against the stored labels.
We kept the fallback. If the API returns a 429 or a 529, the docs say to back off and retry [9]. The suite does, with a ceiling, and past the ceiling the judgment checks are marked as not run rather than passed. A check that did not run is never a pass.
The fuller account is in what we checked before grading with a week-old model, and the story of the move is in we moved our eval grader to Jev.
What stays as it was
Every deterministic check stays in code, and that is permanent. The language model that writes the code stays; TypeSafe's own coding-agents page says Jev "is not a drop-in replacement" for that model [10], and we agree. The human review of a passing diff stays. And a few checks stay on the old grader, because Jev's errors on them clustered in a way that rewording the criterion left unfixed.
What this means if you are choosing a partner
Asking whether we use AI tells you little, because everyone does. Ask what the check is, who wrote it, whether it runs on every change, what grades it, and what happens when the grade is uncertain. This page is our answer to those questions, and how to evaluate a vendor's eval suite is the list of questions we would want you to ask anyone, including us.
If you want to build the same thing, evals with Jev is the how-to, written from this setup. If you want to know what the model is before you decide, the pillar, Jev and System One models, is the plain guide. And if you want to talk it through with the team that runs this suite, contact us.
Common questions
What does Reveneau use Jev for?
As the grader for the checks in its eval suite that need a judgment: whether a change matches a written acceptance criterion, whether a diff stays in scope, whether an agent's trace followed the plan, and whether generated text follows an instruction. Each is a Noul or Score question with the rubric in the criteria. Reveneau writes all of its code with AI and the suite gates every release, so the grader is on the path of every change.
Which checks never go to Jev?
Every check with a deterministic answer: a test passing, a schema validating, a migration holding its invariants on a copy of production data, a performance threshold, a build compiling. Code computes those with one right answer, and a model that got one wrong 1 percent of the time would be worse than code that never does. TypeSafe's own guidance says to keep deterministic rules in code, and the suite follows it.
How is a judgment check written?
As one Noul for pass or fail, with the acceptance criterion as the statement in one positive clause, or one Score where partial credit matters, on a scale described in words. The state holds only what the check needs, such as the criterion, the diff and the plan, with every count and comparison computed in code. All of a change's judgment checks go in one request, because TypeSafe evaluates every question in parallel.
What happens when a grade is uncertain?
The change goes to a person, who reads the diff and the criterion and gives a label. That label is stored with the state and the question, so the grader can be re-checked against it later. The uncertain band is where the model has said it is unsure, and its labels show whether a criterion needs rewording, whether a threshold has drifted, or whether a new model version moved the curve.
How much faster is the suite?
Ten times, on our own suite, measured against our previous language model grader. That is the one figure Reveneau attaches to the change. There is no dollar figure, defect rate, eval count or client count with it, because none of those has been measured in a way we could show the working for, and a company whose pitch is verification should not publish numbers it cannot verify.
Why not publish a cost saving?
Because it has not been measured in a way that separates the grader's effect from everything else that changed in the same month. Reveneau's rule for its own figures is the rule it applies to vendor figures: state who measured it, on what, and say when it is not known. The speed of the suite was measured directly against the previous grader. The cost was not, so the page says so instead of estimating.
What did Reveneau check before switching to a five-day-old model?
Four things. It re-ran every judgment check's stored verdicts through Jev and studied the disagreements, most of which traced to criteria with negations that rewording fixed. It set thresholds per check from those cases rather than from TypeSafe's default 0.9 and 0.5 bands. It pinned the model version, jev-1.13.0, so a release cannot move a threshold silently. And it kept a fallback that marks checks as not run past the retry ceiling.
Does Jev replace the model that writes the code?
No. The language model still writes all of the code, and TypeSafe's own coding-agents documentation says Jev is not a drop-in replacement for the model running an agent. Jev grades what was written against the criteria. A person still reviews a diff once every check passes. What Jev removed is the wait for a judgment that took seconds per check and now takes a fraction of a second for the whole set.
Were any checks left on the old grader?
Yes, a few. Where Jev's errors on a check clustered in a way that rewording the criterion did not fix, that check is still graded the old way. The rule was to move a check when the labelled cases showed agreement and a threshold caught the errors, and to leave it when they did not. A grader on the path of every release earns its place check by check.
What happens if the Jev API is down during a run?
The suite backs off and retries on a 429 or 529, as TypeSafe's API docs advise, with a ceiling. Past the ceiling the judgment checks are marked as not run rather than passed, and a change with a check not run does not pass. A check that did not run is never a pass, because the whole point of the suite is that a release is proven rather than assumed.
How should a buyer use this page?
As a set of questions to ask any team that says it uses AI to write code. What is the check, who wrote it, does it run on every change, what grades the judgment checks, what happens when a grade is uncertain, and is the model version pinned. This page is Reveneau's answer. A team that cannot answer those questions has a suite that is documentation rather than a gate.
References
- [1] TypeSafe docs, How to build with System One: "Keep control flow, deterministic rules, and side effects in code."
- [2] TypeSafe docs, Noul primitive: a yes/no statement; returns one probability from 0 to 1.
- [3] TypeSafe docs, Score primitive: 2 to 10 levels described in words; the score is each level multiplied by its probability, added up.
- [4] TypeSafe docs, Model jaggedness for jev-1.13: "Accuracy falls as the state grows with content unrelated to the decision"; scoping words, negations and implied conditions read at face value.
- [5] TypeSafe docs, Introduction: every question in a request is evaluated in parallel.
- [6] TypeSafe docs, Confidence: 0.9 and above "Act automatically", below 0.5 "Route to a human, request clarification, or fall back to a different system", the middle "Proceed with caution"; "Different actions within the same system should be gated at different levels depending on the consequences."
- [7] TypeSafe docs, Parallel questions cookbook: standard deviation 0.0 across five repeats for 11 of 13 questions on jev-1.12.
- [8] TypeSafe docs, Models: current model jev-1.13.0; aliases jev-latest and jev-preview.
- [9] TypeSafe docs, API: errors 429 rate limit and 529 "TypeSafe is temporarily overloaded"; use exponential backoff.
- [10] TypeSafe docs, Coding agents: Jev "is not a drop-in replacement" for the LLM running a coding agent.
Related reading
Our eval suite now runs ten times faster. Here is what we changed.
This month we replaced the language model that graded the judged checks in our eval suite with Jev. The deterministic checks did not move, every rubric is now written inside the check, and the suite runs ten times faster.
What we checked before grading with a week-old model
Jev launched on 15 September 2026 and we put it in charge of grading our eval suite the same month. Here is the order of checks we ran first, written as a method you can repeat, and the one outcome we are willing to state.
Adding eval tests was the best decision we made
We generate every line of code we release. The single change that made that safe was writing the check before the code, and it turned out to change how we review, how we spec, and how fast we can work.
How to evaluate a vendor's eval suite
"We test everything" means nothing until you know who wrote the tests, what they check, and who is allowed to grade them.
Never let the model grade its own work
When the same run writes the code and the tests, a passing build proves only that the code is consistent with itself. That is not verification, and it is the most common way an AI-built codebase becomes confidently wrong.