Skip to content

Noul, End to End: One Probability and a Dozen Thresholds

A Noul returns one number and no separate confidence. How to read the value, pin its boundary with criteria, split compound questions, and set a per-action threshold that matches the cost of being wrong.

Published
Category
Jev Practices & Patterns
Resources cited
5
Reading time
3 min
Tags#noul#primitives#confidence#design

The Noul is the smallest primitive and the one people misread the most. It returns a single number from 0 to 1 and nothing else, which is exactly why it needs care: there is no separate confidence to fall back on, and the number is both the decision and the uncertainty at once.

The value is a probability, not a level

A Noul asks whether a statement is true. 0.9 means a 90% chance of yes, not "quite true." 0.5 means yes and no are equally likely, not "medium." If you want intensity, that is a Score; a Noul cannot measure how much, only whether.

The mistake this creates is reading the middle of the range as a weak signal. It is not weak; it is a genuine coin flip, and treating it as a soft yes is how a wrong action gets taken with false confidence.

Pin the boundary with criteria

criteria.true and criteria.false are optional descriptions of what a yes and a no mean. They matter when a question reads two ways. "Is this urgent" is ambiguous; adding a true description of blocks the customer today and a false one of can wait for the normal queue moves the boundary where you want it.

Use the structured form with a what, a not_for, and a couple of examples when the edge cases are the whole problem. The advanced primitives guide treats the criteria as an extension of the instruction, and warns that the two must agree: a Noul whose true maps awkwardly to no performs worse than one phrased the way people actually speak.

One question per Noul

"Is this urgent and about billing" is two questions in a coat. Split them. Each Noul is one judgment, and a compound one makes the probability mean something you cannot threshold cleanly.

Choose the threshold by the cost of being wrong

The Noul docs are direct that the threshold is policy, not a default. Use 0.5 when a false yes and a false no are equally easy to act on. Raise it when a false yes is expensive — an auto-refund, an auto-send — so the model has to be genuinely sure. Lower it when missing a real positive is the costly error.

A single global threshold across every Noul in a system is almost always wrong. The right value depends on what the branch does, which the model does not know.

Use the band, not just the edge

The self-consistency cookbook turns a 0.30–0.70 band into an explicit uncertain outcome, so values near the threshold route to a person without another call. The band is illustrative rather than calibrated, but making the abstain path a first-class result beats hiding it inside a threshold.

Do not assume the confidence carries over

A structural warning worth repeating: confidence thresholds tuned on a Choice do not transfer to a Noul, and vice versa. The jaggedness notes call out that identities between primitives are not guaranteed, so calibrate each question type on your own data.

Log the probability, not the boolean

Store the raw value next to the branch you took. The boolean alone cannot tell you, later, whether a rule was too aggressive or a question was ambiguous. The number can.

Threshold in code, keep the number, split compound questions, and set the threshold per action. That is the whole discipline of a Noul.

From the Jev directory

The resources behind this article.

The yes/no primitive: one probability from 0 to 1, where the value is the answer and no separate confidence is needed. True and false criteria pin down subtle boundaries.
Jev Practices & PatternsDocs#official#primitives#noul
Official
Rate content against 2 to 10 ordered levels. Returns a probability-weighted score that can land between levels, per-level probabilities, and confidence, with the arithmetic left to code.
Jev Practices & PatternsDocs#official#primitives#score
Official
Instructions, option descriptions, score levels, and noul criteria all accept JSON, so you can label question parts, pass schemas and taxonomies, and keep candidate paths alive.
Jev Practices & PatternsDocs#official#primitives#architecture
Official
A 14-Noul claims-triage rubric over one insurance claim, repeated 15 times: mean probability standard deviation of 0.0102 at 111 ms per call, with a 0.30 to 0.70 band for human review.
Jev CookbooksDocs#official#cookbook#consistency
Official
A maintained list of jev-1.13's known failure modes, literal reading, unreliable counting, dates as text, indirection, context rot, and contradictory criteria, each with a guardrail.
Jev Practices & PatternsDocs#official#docs#evaluation
Official
Back to all articles

More Jev articles

Most Jev accuracy problems are state problems. What belongs in a state, what is a pre-made judgment to leave out, and why naming the slice you ask about matters more than the wording.
Jev Practices & Patterns#state#design#primitives
Read article
A Score is a weighted position, not a ruler. Why the number can land between levels, why levels are judged separately, and how to combine several atomic scores in code instead of one crowded rubric.
Jev Practices & Patterns#score#primitives#scoring
Read article

From the Jev community

Posts from builders shipping with Jev right now.

Follow @typesafeai