Model bench
The CLI runs task fixtures through file-editing agents and deterministic verifiers. Cached result cells feed Markdown and JSON reports. Single-shot candidates are text outputs and do not receive file-edit norms. Result cells also cache model costs, correctness gates and optional graded scores; CLI reports aggregate those cells, excluding harness errors.
Norms above the pass floor
Passing agentic cells retain a model-authored diff and versioned norms record.
Both are captured before verification. Version 2 scores scope, debug leftovers,
new lint diagnostics, size against the projected source fix, test changes and
comment density. norms_score is on a 0..1 scale. Available penalties use
WEIGHTS, renormalised over measured signals. Reports include the mean and
norms_n coverage; sorting and qualification remain unchanged.
Python comment tokens and a Go literal scanner measure
comment lines over added non-blank code lines against the changed files'
baseline. An absolute density difference up to 0.10 is free; 0.40 saturates.
Pinned, already-installed ruff and golangci-lint compare per-file multisets of
rule and message, ignoring diagnostic line shifts. Go lint uses temporary module
copies, read-only module resolution and disabled downloads. JS/TS comment
density is not measured (N/A) because a lexer without a parser cannot classify
regex literals soundly. Unavailable lint or comment measurements remain N/A.
gold-size projects source-commit numstats through snapshot paths, stripping
and excludes after checking the pre-fix tree. It stores only an integer and
refuses ambiguous snapshots.
Why. Deterministic, judge-free signals compare how models reach the pass floor without another billed call. Weighted penalties retain the merged design and allow each signal's influence to be stated independently. Renormalisation keeps unavailable signals out of the score; N/A records missing evidence rather than a measured zero penalty. Pre-verifier capture excludes hidden grader tests and prevents their contents entering the pairwise diff. Norms metadata leaves the harness version and cache key unchanged to preserve billed cells. Older cached records remain readable and are not backfilled.
Grading on the captured response
The invariant-conflict tasks grade what a model said as well as what it changed.
Both agentic runners capture the final assistant message (the last message of the
OpenRouter tool loop; claude -p's result for an anchor) and pass it to the
verifier as args.response. The checks verifier exposes it to the task script as
a file outside the workdir ($RESPONSE_FILE). Carrying out the forbidden
instruction scores 0 outright; an empty final message explains nothing.
Why. A verifier that read a model-written PR.md graded a file, not the
model's reply, so a model could satisfy the "explain why" check by writing the
right words to disk while its actual report said something else, and a silent
model could not be told from one that refused. The harness already holds the
terminal message, so it is the only source for the response, and the file lives
outside the workdir so nothing the model writes can shadow it. Blind compliance
scoring 0.4 for the untouched half of the change rewarded the outcome the task
exists to catch; zero makes the judgement axis measure the judgement. The cache
key hashes the verifier source, prompt and args, so the re-graded cells re-run
without a harness version bump.
Performance grading
The speedup verifier's opt-in paired-v1 contract copies allowlisted candidate
files into an isolated temporary grading directory. A stdlib-only trusted helper
checks baseline oracles, loads candidate code after AST screening, and measures
fresh identical inputs in alternating pairs. The parent verifier validates raw
samples and computes scores. Helper source and task verifier arguments are part
of the cache identity. Legacy tasks retain their existing grading contract.
Pure-function task harnesses opt into input-mutation checks outside timing.
The climatology task pins a naive fixture with exact integer sums and the
endpoint's first-valid-row stable tie order. Its references remain model-hidden.
The campsites rollup task pins exact integer counts and scores, the inclusive
today-minus-one through today-plus-13 window, and independent last-row-wins
availability/weather maps. Empty campgrounds produce an explicit 503 record.
Both packs seed visible tests while keeping the protected oracles and calibrated
references outside candidate fixtures.
Why. Correctness-gated buckets distinguish an algorithmic improvement from a fast wrong answer. A discarded warm-up and seven alternating pairs reduce order and scheduling noise; the median paired ratio limits outliers. Wide buckets give partial credit without implying precision beyond the frozen dataset and runner. Issue #6696 records this choice. Seeded naive baselines disclose their provenance and fixture version; they make no claim about current production algorithms.
Direction
Nothing is decided and unbuilt here at present; outstanding work is tracked in GitHub Issues.