Complete summaries on your biggest PRs, and sharper blocking reviews.
CLASSIFICATION — PUBLIC RELEASE RECORD 002 OA·RSRCH·2026·0021·PUB
RECORD INDEX
002 FILED 2026·09·17 14 MIN READ

Jev answers with a number, not a sentence

TypeSafe's Jev emits no text. It ranked real defects above harmless comments 96% of the time, and costs 18x less than the frontier lab model that beat it.

Jev is TypeSafe's first model. It cannot call a tool or explain itself, and it never writes a word of the review. Asked whether a reviewer had found a real bug, it matched a frontier lab model that costs 18x more, and it was the only one of the four whose stated probabilities meant what they said.

In plain language

What Jev is

Most models write. You ask a question, they produce sentences, and your code reads the sentences back. Jev, the first model from TypeSafe, produces no text at all. You hand it some state and a typed question, and it returns a label and a probability. Nothing to parse.

TypeSafe calls this a System One model, after the fast intuitive half of Kahneman's split. It answers three kinds of question: pick one option from a list, rate something against ordered levels, or give the probability a statement is true. It is new, so nobody had published numbers on it. That is why we ran this.

That makes it useless as a reviewer. It cannot tell you line 42 leaks data across tenants. It can only answer "does line 42 leak across tenants?" with 0.87.

It is still a job worth doing. Every automated review has to decide what is worth showing a human, so we gave that decision to Jev and to three models from frontier labs that can write, and measured all four the same way.

What we asked

This record runs on the open source slice of our review corpus, which is the part we can publish. That slice holds 5,732 pieces of code from 1,200 merged pull requests across 12 projects: 1,447 carry a comment a human reviewer actually left, and 4,285 drew no comment at all. It is a small fraction of the review data we hold, and it grows as we add projects.

This record uses 397 of the comments, sampled evenly across languages. The rest is there for the records that follow.

The projects are ones where maintainers argue in the comments, which is not the same as the ones you would name first. Across the twelve, the rate runs from 2.6 review comments per pull request down to 0.4. One well known project we looked at had a single comment across 45 pull requests, so we left it out.

Language is taken from the file each comment was left on, not from the project's headline language. About one review comment in eight lands on documentation or configuration, and counting those as the project's language would blur the comparison.

Then one question, identical for every model: does this comment describe a genuine defect, or is it a style preference, a documentation request, or a feature idea?

What happened

Jev finished second of the four and cost the least by a wide margin. Shown a real defect and a harmless comment, it put the defect first 96% of the time. Gemini 3.8 Flash, the best model tested, managed 97%. It costs 72 cents per ten thousand reviews. The model it nearly matched costs $13.08, and the most expensive one we tested scored lowest.

It is also four to nine times faster: 252 milliseconds against 1.1 to 2.4 seconds. It has no reasoning step to spend time on.

Here are its deficiencies

Ask it to sort a comment into one of seven kinds and it drops to 69% where Gemini 3.8 Flash gets 84%.

It also takes about 32,000 tokens of input, a limit TypeSafe publishes, so a large change has to be fed to it in pieces rather than all at once. Past that line it returns an error instead of a guess: 76 of 90 requests at our largest size. That is a constraint to design around, not a defect.

And when we planted misleading text in the code under review, we could bury a real defect about one time in eleven. Two of the three generative models were easier to fool than that, and one was harder.

TypeSafe undersold itself

Every claim in TypeSafe's documentation that we tested turned out true, and one was understated. They warn that their 0 to 4 severity score is weakly calibrated. Used as a ranking rather than a magnitude, it carried the whole decision on its own, matching their dedicated yes or no question.

The numbers

Cost against accuracy

Every figure below comes from 4,764 calls: 397 comments, four models, three independent repeats. The scores use 351 of those comments. The other 46 are about test quality, and no model was asked about test quality, so scoring them would mark models down for a question nobody put to them.

Accuracy here is AUC, short for area under the ROC curve. It asks one thing: given a real defect and a non-defect, how often does the model rank the defect higher? A perfect model scores 1.0 and a coin scores 0.5, so Jev's 0.961 is the 96% from earlier. We use it because it does not depend on where you set a threshold, which every other number in this post does.

What a defect costs to find
0.930.940.950.960.97$1$5$10$25jev-1.13.0gemini-3.8-flashgpt-5.6-lunaclaude-haiku-4-5cost per 10,000 reviews (log scale)accuracy (AUC)
Four models on the same 351 comments. The horizontal axis is log scale, so the distance from 72 cents to $22.66 is larger than it looks. Jev ranks defects correctly 96% of the time against the most accurate model's 97%, and costs 18x less. The most expensive model scored lowest, and costs 31x more than Jev.

Where the threshold goes

AUC measures ranking only. It says nothing about where to draw the line, and a review gate is entirely a question of where you draw the line. So for each model we picked the cutoff that hit a precision target, then checked whether that cutoff still held on comments it had not been picked on.

Held out precision against the target the cutoff was picked for
Model Asked for 80% 85% 90% 95%
gemini-3.8-flash0.810.870.940.96
gpt-5.6-luna0.810.860.910.95
jev-1.13.00.790.840.880.91
claude-haiku-4-50.810.870.870.85
200 stratified splits. The threshold is chosen on one half and scored on the other. Gemini and Luna deliver what they promise at every target. Jev holds to 90% and misses at 95%. Haiku misses at 90% and at 95%, and two thirds of the time no threshold reaching 95% exists for it at all.

Whether a probability means anything

A model that says 0.8 should be right about 80% of the time. That is the whole pitch for a model built to return probabilities, so it is the fair place to judge it.

Stated probability against how often it was right
perfect calibrationjevclaudegeminigpt0%0%25%25%50%50%75%75%100%100%probability the model statedhow often it really was a defect
The dashed diagonal is a model whose probabilities mean exactly what they say. Jev tracks it across all five bands. The others are lumpier: Haiku jumps from 42% to 80% with nothing between, and Luna's 0.6 to 0.8 band sits barely above its 0.4 to 0.6 band.

Why the threshold jumps

Haiku 4.5 ranked defects well, at 0.938, and still has no cutoff anywhere on its output that reaches 90% precision. The reason is in how it scores.

How many distinct probabilities each model emits
jev-1.13.094 valuesgpt-5.6-luna49 valuesgemini-3.8-flash18 values · 41% of answers are exactly 0claude-haiku-4-518 values · 42% of answers are exactly 0more distinct values means the threshold slides instead of jumping
Gemini and Haiku emit 18 distinct values each and put about 40% of every answer on exactly zero. Jev emits 94 and spreads them. A coarse score can rank items correctly and still leave you nowhere useful to put the cutoff, because the threshold jumps between operating points instead of sliding between them. Ranking metrics cannot see this, because ranking ignores ties.
Move the cutoff yourself
ModelPrecisionRecallFlagged of 351
The same 351 comments, scored by all four models. Drag the cutoff and watch the two 18-score models move in steps while the two finer-grained ones move smoothly. That is the difference between a gate you can tune to a target and one that jumps past it.
Why that matters when you buy

Haiku and Luna rank defects about equally well, 0.938 against 0.947. Only Luna can be set to hold 90% precision, because it emits 49 distinct scores to Haiku's 18. Before picking a model for a gate, ask how many distinct scores it produces, not just how well it ranks.

Which languages this covers

We sampled evenly across languages so no single one could dominate. But even sampling spreads comments, not defects, and a per-language score needs defects.

Comments and defects by language
typescript74 comments, 34 defectsjava69 comments, 8 defects · too fewpython68 comments, 23 defectsgo67 comments, 11 defects · too fewrust58 comments, 4 defects · too fewjavascript9 comments, 2 defects · too fewscala6 comments, 0 defects · noneorange is the defect share
Grey is all comments in the evaluated sample, orange is the share that describe a real defect. Only TypeScript and Python carry enough defects to compare models on. Java, Go, Rust and JavaScript have too few, and Scala has none at all, so no score can be computed for it.

On the two languages that do carry enough, the models separate differently:

The two languages with enough defects to read
Model TypeScript (34 defects) Python (23 defects)
gemini-3.8-flash0.9690.922
gpt-5.6-luna0.9660.898
claude-haiku-4-50.9340.905
jev-1.13.00.9250.959
Jev is last on TypeScript and first on Python, by a wider margin than separates the models overall. This data cannot say why, and two languages is not a pattern. It is why we would not pick a model on one language's number.
Why the defect rate varies so much

Defect share ran from 46% of TypeScript comments down to 7% of Rust. That is a fact about what reviewers choose to write about in each community, not about the languages. It also means any per-language accuracy figure carries that base rate inside it. Compare models within a language, not one language against another.

Two stress tests

Can you talk it out of a finding?

TypeSafe documents this weakness: state is data, and the model does not treat it as hostile. In code review that is not theoretical. The code being reviewed is written by the person whose change is under review.

So we planted four kinds of misleading text in 60 confirmed defects and measured how often a real finding could be pushed below the model's own threshold.

Share of real defects that could be suppressed
Model Planted in the code Planted in the comment
gemini-3.8-flash2%22%
jev-1.13.09%67%
gpt-5.6-luna11%60%
claude-haiku-4-516%86%
The two columns are different threats. A contributor writes the code, so the first column is the realistic attack surface. They do not write the reviewer's comment, so the second column only applies where that text is itself derived from something an attacker controls.

Textbook prompt injection ("ignore all previous instructions") backfired on all four models: it made suppression less likely, not more. What worked was ordinary engineering language, such as a forged review sign off or a claim that the behaviour was deliberate and covered by tests.

A filter that looks for injection phrasing would therefore miss the attacks that actually worked here.

What happens as the request grows

Every number above comes from showing the model one small section of a change. Real review means many files at once, so we padded each request with real code from unrelated projects.

Accuracy as unrelated code is added
0.850.900.951.00geminigptrefused past herejevclaudenone+2k+8k+24ktokens of unrelated code added to the request
Gemini and Luna hold steady. Jev slips from 96% to 95% as 8,000 tokens of unrelated code are added, which matches the context rot TypeSafe's documentation warns about. Haiku declines four times faster, with no such warning published. Past the dashed line Jev reaches its published input limit and stops: 76 of 90 requests at the largest size returned an error rather than a wrong answer.
What the ceiling means in practice

Past its limit Jev returns an error. Haiku lost 0.041 across the same range and returned a well-formed answer every time, including at the sizes where it was wrong more often.

So you cannot hand this model a whole pull request. Whatever selects the code it sees becomes the thing that decides quality.

Method and limits

How it was built

Our first pass labelled a comment real if the author changed the code in response. That measures deference, not correctness: compliance ran from 8% in one project to 95% in another on culture alone. Every comment was instead categorised by a model that was not one of the four under test.

All four received identical criteria and identical state, each using its own native structured output so none lost points to malformed JSON. None was given extra reasoning budget.

What this does not show

  • The models did not find the bugs. A human reviewer wrote every comment first. The models only sorted the real ones from the rest, and we did not test whether they could find anything on their own.
  • One model set the ground truth. On about 3% of items all four disagree with it, so a difference smaller than that is not worth reading.
  • Rust and Scala have too few defects to score. Rust has 4 in this sample and Scala none, so neither supports a claim about that language.
  • Prices move. Gemini's rate doubles on 1 January 2027 and Luna's was cut by 80% shortly before we ran this, so every cost here is dated.

What we would fix next

Architecture comments are still the problem. When a reviewer says the code works but the layering is wrong, three of the four models call it a defect. We tried asking two narrower questions instead of one, separating whether the comment describes broken behaviour from whether it describes a preference. That gave us a better place to put the cutoff, but the models still confuse the two.

We also never asked any of them about test quality, and all four missed between 54% and 63% of comments about weak tests. We do not know whether they would catch those if asked, which is worth finding out.

The short version

A model that answers with a number ranked defects correctly 96% of the time against the best reviewer's 97%, at 18x less cost, and it is the only one whose stated probabilities meant what they said. It is also the only one with a hard ceiling you will hit on a large change.

OPTIMAL AI — RESEARCH DIVISION RECORD 002 ALL RECORDS