the short answer
Write one operational judgment per Jev question. State the exact condition directly, choose the primitive that matches the label structure, define observable criteria and boundary cases, and point to named state fields where needed. Avoid double negatives, hidden multi-step reasoning, contradictory criteria and requests for arithmetic. Version the question and evaluate every revision on blind labeled fixtures.
- Unit
- One independently useful judgment
- Meaning location
instructionsandcriteria, not the question ID- Choice
- Competing nominal options
- Score
- Ordered descriptive levels
- Noul
- One independent yes/no proposition
A Question Is a Measurement Instrument
The wording defines what the returned probability is about. “Is this good?” has no stable outcome; “Does assistant_response resolve every explicitly requested task using evidence in tool_results?” can be labeled and disputed. Before calling Jev, write how two human reviewers would decide the criterion and what evidence they may use.
Question IDs are application identifiers and TypeSafe says they are not sent to the underlying model. Naming a field is_safe does not define safety. Put the operational meaning into instructions and criteria, then version it alongside state projection and model.
Split Broad Quality into Decisions That Lead Somewhere
Decomposition improves diagnosis and lets each error carry its own threshold. Do not decompose dependent reasoning into one parallel call: questions share state but cannot consume each other’s answers. Use the multiple-question architecture when later candidates depend on earlier results.
| Broad question | Decomposed questions |
|---|---|
| Was the agent good? | Task complete; correct tool selected; result grounded; handoff appropriate |
| Is this content safe? | One Noul per policy category plus an ordered severity rubric |
| Should we refund? | Request intent; verified duplicate evidence; policy support; authorization in code |
| Which agent should act? | Choice among permitted agents plus independent fit/no-match test |
Turn Implied Intent into Literal Criteria
TypeSafe says Jev 1.13 reads instructions literally and struggles with indirection. When a wrong result makes the author say “what I really meant was…,” that missing explanation belongs in the criterion. Keep wording direct enough for an average reviewer to apply consistently.
| Weak wording | Problem | Stronger wording |
|---|---|---|
| Is this urgent? | No evidence standard | Does the message state a deadline, blocked essential work or immediate material harm? |
| Is this not unsafe? | Negation and undefined scope | Does the proposed command delete or irreversibly overwrite user data? |
| Rate quality 1–5 | Levels have no shared meaning | Provide five ordered descriptions with observable transitions |
| Pick the best team | Candidate responsibilities absent | Describe each filtered team and add no-match handling |
Criteria Extend the Instruction; They Must Not Contradict It
Choice descriptions should separate options by operational evidence rather than synonyms. Score levels should form one ordered dimension. Noul true/false descriptions, when supplied, should reinforce the proposition—not reverse it. TypeSafe explicitly documents degraded behavior when criteria and instructions conflict.
Include a no-match Choice when the taxonomy can be incomplete, or ask a separate fit Noul. Avoid an other bucket with no review destination. The Choice-versus-Noul guide shows why exclusive and independent label structures need different tests.
Point to Evidence Without Embedding a Second Workflow
Named fields make the evidence relationship explicit. Do not ask Jev to count tool calls, calculate amounts or compare timestamps; compute those facts first. Keep untrusted text visibly separate from policy and validate permissions outside the model. See state design.
{
"state": {
"assistant_response": "Your refund has been submitted.",
"tool_results": [{"tool": "refund", "status": "not_called"}],
"requested_tasks": ["Refund the duplicate charge"]
},
"questions": {
"completion": {
"type": "noul",
"instructions": "Using the requested_tasks, assistant_response, and tool_results fields, did the agent complete every requested task? A claim without matching tool evidence is not completion."
}
}
}Treat Every Wording Edit as a Model Change
Do not select the wording that performs best on the final test set. Use development data for iteration, a calibration split for thresholds and an untouched holdout for reporting. A question can become more accurate overall while regressing a critical slice.
- Build fixtures from real traffic, including edge, adversarial and disagreement cases.
- Collect blind labels using the written criterion and preserve reviewer disagreement.
- Run old and new questions on the same pinned model and state projection.
- Compare errors, calibration, coverage, distribution shifts, latency and tokens.
- Inspect changed decisions, approve a new question version and recalibrate thresholds.
Pre-Publication Question Checklist
- One criterion with an independently useful answer.
- Primitive matches exclusive, ordinal or independent label semantics.
- Instructions define the condition without relying on the ID.
- Criteria are aligned, distinct and cover intended boundary cases.
- Exact computation and authorization remain in code.
- State fields and trust levels are named explicitly.
- Version, labels, thresholds and rollback path are recorded.
FAQ
How long should a Jev question be?
As long as necessary to define one condition and its boundary cases, but no longer. Clarity and testability matter more than a fixed word count.
Does the question ID affect inference?
TypeSafe’s API docs say the caller-chosen ID is not sent to the underlying model. Put meaning in instructions and criteria.
Should I include examples in criteria?
Include representative boundary descriptions when they clarify the label, then test that they do not overfit or conflict with the instruction.
Can I ask Jev to evaluate several qualities at once?
Use separate questions for independently useful qualities. Combine results in code only when the operational decision requires it.
Sources
Checked against the sources below on September 22, 2026. Model versions, prices and limits change.
- TypeSafe AI docs: How to build with System One
- TypeSafe AI docs: Primitives
- TypeSafe AI docs: State
- TypeSafe AI docs: Jev 1.13 jaggedness
- TypeSafe AI docs: HTTP API reference