The code-judgment boundary: bug-fix discrimination on Django
Chat LLMs are known to be strong at code. Reframed as a typed decision - given two diffs, pick the bug fix - how far does a decisions model get before quality collapses? Real Django history, certain labels.
What the data says
The boundary is real but narrow
On pure diff semantics every model lands within 5 points (68-73%); JEV trails chat LLMs by only 2-5 while being 3-7x cheaper and 3.5-7x faster. This is the widest relative gap in the campaign - code semantics is where the decisions model starts to pay for what it cannot do.
Commit messages are a big lever
Messages add +8 to +13.4 points for chat models and +11.7 for JEV. The message is the signal human reviewers use too - a model that reads it approximates the review workflow.
Generation is the hard wall
Reframed as a decision ("which diff fixes the bug?"), JEV competes. Actual review - writing the analysis - is generation, where JEV by design cannot go. The boundary experiments map what to delegate.
The hybrid is the deployable shape
JEV triages every diff at 350ms (risky vs safe, which-of-these-two), the LLM reviews what it flags. Same pattern as exp1, applied to code: decisions everywhere, generation only where decisions point.
Bottom line
Decompose a code task into typed decisions and JEV lands within a few points of cheap chat LLMs at a fraction of the cost - until the task requires real semantic understanding, where the gap widens. That edge is exactly where the boundary sits, and this experiment measures it with certain labels.
How JEV reviews code (it doesn't - it decides)
JEV cannot read a diff and write "here are three issues." The task is reframed into what it can do: a forced choice between two diffs with certain ground truth. One real pair from the run, exactly as sent:
Same diff pair, same question, to every model. The chat models answer through strict json_schema on the identical state text. The comparison is the brains, not the plumbing.