Wellposed: lint Jev questions before trusting the answer
An offline linter catches malformed decision setups; an optional Jev pass checks semantic problems that structural rules cannot detect.
The structural tooling, optional System One request code, and evaluation documentation were inspected on October 1, 2026. Checks include missing none-of-the-above choices, unresolved state paths, and invalid scoring criteria. The project documents labeled corpora and separate evaluation of structural and semantic checks. Its central use case is improving the question and answer space before a confident but irrelevant decision reaches application code.
# wellposed
**Lint your jev requests before they come back confidently wrong.**
[](https://www.npmjs.com/package/wellposed) [](package.json) [](LICENSE)
Offline linter and agent skill for jev requests: 45 structural checks with no model call (missing
none-of-the-above options, broken state paths, wrong criteria shapes), plus jev-on-jev checks for what
structure cannot decide, with labelled corpora that score both layers.
```
question "route_team"
warn Choice "route_team" has no "other"/"none of the above" option. If an input fits none of
[billing, technical, account], jev must still pick one. On 31 real Choices given such
inputs, 36% of the wrong answers came at confidence >= 0.9, past a confidence gate; adding
"other" caught 90% and changed nothing on inputs that did fit.
fix: Add e.g. {"other": "A case that fits none of the above"}
question "agent_name"
error Question "agent_name" references `ticket.assigned_agent.name`, but state has nothing at
"ticket.assigned_agent".
```
---
## What jev is
TypeSafe's jev is a model that doesn't write text. You hand it some data and a question, and it hands
back a typed answer your code can use directly — a true/false probability, a pick from a list, or a
rating. Three question types:
- **Noul** — a yes/no question. Returns "how likely is this yes," a number from 0 to 1.
- **Choice** — pick one option from a list you provide.
- **Score** — rate something on levels you define, like `can wait` → `needs attention today`.
You send it `state` (the stuff to look at) and `questions` (what to judge). It sends back answers.
No prompt engineering, no parsing JSON out of prose.
## The problem
jev is strict about **how** you write a request and completely relaxed