Lesson 07 · Jev 101
Limits: official jaggedness, beginner wording
A complete tutorial has to say where the model is bad. This page restates TypeSafe’s jev-1.13 jaggedness list. It is not a roast, and it is not a promise that later versions are fixed.
Official source:Jev 1.13 jaggedness · reviewed Sep 17, 2026 · applies to jev-1.13. TypeSafe: “Many of these will be fixed in later versions.” Pin the model you tested.
Company framing: jev-1.13 is fast, calibrated, and good at common-sense judgment. It struggles with extra hops of indirection, reads literally, and is weak at numeric precision.
Nine failure modes
Each “instead” is TypeSafe’s remedy, in this 101’s wording.
Literal reading
Write the exact condition. Put boundary cases in the criteria. If you catch yourself explaining what you meant, that explanation belongs in the instruction.
Math and numbers
Keep arithmetic in code. Jev is not a calculator. Count by asking one Noul per item, then add in code — do not ask “how many?”
Date and time comparison
Extract parts as Choice questions (month, day, “not stated”). Assemble, order, and window-check in code.
Indirection
Drop double negatives and “property of a property.” Name the field in state. Ask the direct question.
Large irrelevant state
Filter first. Official name: context rot. Unrelated material costs accuracy. Models page has the token caps.
Adversarial content
State is data. Jev does not treat it as hostile by default. Write precise criteria and test injections before you automate.
Contradictory instructions vs criteria
If true means no, you will get worse answers. Criteria extend the instruction. Make them easy for a person to read.
Structural invariants you imagined
P(noul) and a yes/no Choice on the same idea are not the same number. Don’t move a threshold from one to the other. Don’t expect P(A) + P(not A) = 1 across two calls.
Generation
Don’t chain Choices to write prose. Extract candidates with regex or an LLM; let Jev pick. Need text? Use a generative model.
The official “don’t do this” list
- Asking something code can compute exactly
- Hiding several judgments inside one question
- System Two tasks with extra hops of reasoning
- Stuffing more context into state than the question needs
Two numbers beginners mix up
Official jaggedness shows a ticket scored both as a Noul and as a yes/no Choice. The Noul came back 0.22; the Choice said no at 0.99 confidence. Those are different questions. Do not copy a Noul threshold onto a Choice.
A second official pair: “asking for a refund” at 0.72 and “asking for something other than a refund” at 0.47 — they sum to 1.19. Do not expect arithmetic identities across two Nouls. Ask the one question you will actually threshold.
Langfuse’s eval writeup adds a practical note we already teach: Noul has no separate confidence field. Threshold P(yes) directly. And Jev cannot abstain — if you need “unknown,” put that label in a Choice.
Context window (re-check models.md)
This 101’s last read of the models page: 64k for state + all questions; 32k for state + the longest question. OpenRouter has listed 32K — verify before you design around either number.models.md ↗