The problem
You are building a prose checker. It takes an article one paragraph at a time, asks ten house-style questions about each, and flags anything above 0.7. For months it behaves.
Then a writer pastes an encoded screenshot into the draft, and the text-only integration passes the encoding along as ordinary prose. Imagine a successful response with all ten answers between 0.48 and 0.53: your line is at 0.7, so that material is silently counted as clean text.
You drop the line to 0.45 to catch it. Now every uncertain answer becomes a violation. Neither line addresses the mistake: a number near 0.5 does not establish a clean paragraph or a broken rule, and it cannot tell you whether the input was sent correctly.
The solution
The grey zone pattern says: reserve a strip around the middle where answers are not answers. Anything inside it is not a weak yes and not a soft no — it is an absence, and no branch of your code is allowed to consume it.
Pick the strip using repeated runs on representative inputs: 0.4 to 0.6 is a starting point. Then count what lands there, per question. A rising count calls for inspection: the wording may be vague, the evidence incomplete, the input malformed, or the model version different.
Finally, validate what this tool accepts before calling the API. A prose checker can reject encoded files and text beyond its configured budget. To judge screenshots, build a separate image request with assets and the experimental image header; do not pass their base64 encoding off as prose.
Ask · Answer · Act
- AskPut one paragraph — the material Jev is shown, which the docs call the state — and one house rule in front of it, and ask whether the paragraph breaks the rule.
- Answer0.52.
- ActThat is inside the strip, so the paragraph is neither flagged nor cleared. It is recorded as unjudged and left exactly as it was; if more than a third of a batch lands there, the run raises an alarm instead of a report.
Where the name comes from
Think of a black-and-white photograph. Pure black is yes, pure white is no, and the grey in the middle is neither. You can round the grey to one side if you insist, but the photograph never held that information — you would only be inventing an answer and then believing it.
Use it when
The question is a yes-or-no about whether something is present, and the input might be something the model cannot read, or the service will be running long enough to change under you.
Not when
The question asks for a level on a scale — there the middle rung is a real middle, not an absence. A pick-one question needs a different rule too: inspect its option probabilities and confidence, since 0.5 has no universal meaning across different numbers of options.
Read this code
- snifftest
src/jev.ts:82-83Anything between 0.4 and 0.6 is marked unjudged: it can never become a flag, and it can never count as a pass either.
- snifftest
src/jev.ts:311-334This text checker refuses image data URIs, encoded files and over-long text locally, enforcing its own input contract before calling the model.
- huncho
src/compose.ts:65-97A helper called uncertain() gives the middle its own name, so a probability near 0.5 reads as "don’t know" rather than "medium".
Show me the code
const BAND = [0.4, 0.6];
const verdict = (p) => (p > BAND[1] ? "yes" : p < BAND[0] ? "no" : null); // null = no answer
let blank = 0;
for (const [id, a] of Object.entries(answers)) {
const v = verdict(a.p);
if (v === null) { blank++; continue; } // counted, never acted on
act(id, v);
}
if (blank / Object.keys(answers).length > 0.3) alarm("inspect questions, inputs and model version");How jevbooks recognises it
How do we know a project does this? We put one question about its README to Jev and it returns a percentage; the higher, the more it looks like it. If you copy the question, copy one thing: ask whether the text mentions this one concrete thing, never whether the project is good.
{
"no-judgment-band": {
"type": "noul",
"instructions": {
"what": "Does the text describe treating probabilities near 0.5, or inside an uncertain band, as 'unknown' that neither pass nor fail?",
"not_for": "Reading 0.5 as a medium score."
},
"criteria": {
"true": "The text explicitly describes this. One sentence is enough; other content does not cancel it.",
"false": "The text does not describe this."
}
}
}