M0 — PoC (this repo) ✅
-
choice/noul/scoredecisions with typed examples, validated at definition -
matchwith compile-time exhaustiveness and a requireduncertainarm;at()guards - Escalation chain,
decideAllwith per-tier batching - Backends:
builtin()(trained from examples, calibrated),jet()(HTTP/v1/decide),nodd()(wraps@nodd/node),fn() -
verdict build/check/eval/labelCLI,.verdict/artifacts - JSONL trace
- Examples: comment moderation (1,711 rows from Nodd), support triage with
decideAll - Tests: runtime (
node:test) + type tests (tscwith@ts-expect-error)
M0.5 — Own syntax ✅
-
.vdlexer, parser, checker (exhaustive match, label checks, types), interpreter - Guarded fall-through arms (
high @ 0.8 => …thenhigh => …) -
verdict run | check, and build/eval/label/questions accept.vd - VS Code syntax highlighting (
editors/vscode) - Language server: diagnostics from the checker, hover shows a decision's labels
- Records/structs,
elsein match for non-decision values, modules (import "x.vd") - Compile
.vdto TypeScript (same runtime) instead of interpreting
M1 — Real stack end to end
- Run
examples/against a live Jet (localjet-serveor the HF Space) -
verdict label→nodd run→nodd()tier: one script that distills a decision from Jet into a Nodd model and wires it into the chain - Check that Jet's choice keys and Nodd's labels match the decision at load (done for Nodd; add a dry-run for Jet)
M2 — React
-
useDecision(D, input)hook: debounced, suspense-friendly, runsbuiltin/noddin a worker, escalates to Jet through the app's own endpoint (keys stay server-side) -
<Decide on={…}>with typed render props per label +uncertain
M3 — Learning loop
-
verdict retrain: take escalated cases from the trace, label them with the top tier, add to the examples, rebuild, show the metric diff, fail CI on regression - Per-decision drift alarm: share of escalations over time
M4 — Language
- TS compiler plugin / ESLint rule: flag
decide()results used withoutmatch - Optional
.verdictsyntax compiling to the TS embedding, if the TS form hits limits - Policy arms:
@ p > 0.9sugar, cost budgets per decision (maxTier: "nodd"in the browser)