Constraint-Violation Benchmark
CVB runs the same 35 coding tasks three ways — no constraints, constraints as explicit orders, constraints buried in ambient project memory — and measures what dies in translation. Deterministic regex scoring. No LLM judge. Temperature 0.
Getting constraints into context at all is the whole battle. Framing them as orders vs. ambient memory moves strict accuracy by at most 5.7 points — and can even help.
Leaderboard
Share of runs with every constraint honored. Run of 2026-07-30 → 08-02 · Groq API · 3 runs per arm · 35 scenarios · prompt v2.0.
| model | cold | mandated | incentivized | gap (mand − incent) |
|---|
click a column header to sort · gap > 0 means adherence dies when rules live in memory
Cold vs. context
Every arm that carries the constraints — as orders or as memory — crushes the cold baseline. The two context arms are nearly indistinguishable.
How it works
Each of the 35 scenarios is a natural coding task that tempts the default violating behavior (naive datetime.now(), shell=True, print logging…), plus 2–4 constraints with their own deterministic regex checks.
The task alone. Measures the baseline violation rate — what the model does when nobody told it anything.
Same task, constraints pasted as explicit instructions. Measures the instruction-following ceiling — what IFEval-style benchmarks test.
Same constraints embedded in an ambient project-memory narrative — never imperative. Scenario lint bans "must", "required", "rule". Measures memory adherence.
Method & honest limitations
PROMPT_VERSION = "2.0"; incentivized narrative built deterministically from the scenario fileRun it / submit a model
pip install -e . export GROQ_API_KEY=... # or any OpenAI-compatible endpoint via --base-url python -m cvb.runner --scenarios scenarios --dry-run # list matrix python -m cvb.runner --scenarios scenarios --runs 3 \ --json results/out.json # ~945 calls python -m cvb.report results/out.json --markdown results/out.md
Point it at any OpenAI-compatible endpoint with --base-url / --api-key-env, pick models with --models. To get a model on this leaderboard, open a PR with your out.json — scoring is deterministic, so results are verifiable by re-running.