rabadon

measured, with the command that measured it.

A number with no run behind it is a slogan. Every row here was produced on one machine by the command named beside it, and the ones that could not be measured cleanly say so rather than being rounded into shape.

100.0%gate precision, recall 100.0%
262.4µsto judge one command
12real suites it was run against
31,316tests in those suites

the gate

whatnowbefore, and what moved itwhere it is measured
to judge one command262.4µsthere was no number before this one. the page said 42.0µs and named a file that did not exist, so the first honest measurement is this onenative/gate_bench.sh
the whole hook, native, median2.69msthe whole hook, not just the verdict: fork, read the event, load state, judge, write the ledger line, exitnative/bench.py
the same hook on the node gate it replaced100msthe gate this replaced, on the same 40 events, with verdict parity asserted firstnative/bench.py
gate precision100.0%55.0% before one resolver answered the path question for both layersnative/precision_test.sh
gate recall100.0%unchanged, and the floor the precision work was not allowed to movenative/precision_test.sh
precision on this machine's own ledger26.3%the same binary, the same question, asked of everything that really happened instead of 34 chosen cases. the fixture number is not wrong, it is narrowredteam/ledger_replay.py
the same, with rabadon's own test labs excluded93.8%41 of the 42 refusals it cut were rabadon's own red-team labs, and a tool that pads its own numbers with its own drills has no business judging anyone elseredteam/ledger_replay.py
named escapes that still walk32319 attempts over four rounds named 95 ways past this gate; this is how many of them the current binary still lets throughpython3 redteam/redteam.py
cases in the fixture34every one lifted out of a real session, none written for the testnative/precision_fixture.jsonl
ways of buying a green, refused8 of 83 of 6 before the harness itself was lockednative/harness_lock_test.sh

Measured on 2026-08-02 at 0450f9e, 2026-08-02 at 0665561, 2026-08-02 at 43e43cf, 2026-08-02 at bdbc448, ? at ?. Re-run all of it with ./native/measure.sh; every value on this page is written by that run into site/measured.json and read back here, so a number and the run behind it cannot come apart.

the suites it was run against

Twelve open-source projects, each pinned to a commit, each installed and taken green before anything was measured. Flake is the share of clean runs that came back red with no patch applied at all, which is the number that decides whether a red run may be treated as a verdict. Locked is how many test files the judge hashes before a proposer is allowed to touch the tree.

projecttestsgreenflakelockedlanguage
expressjs/express1,2601.85s3/1091node
lodash/lodash7,15819.24s0/106node
tj/commander.js1,3735.06s0/10123node
colinhacks/zod3,81145.00s2/102node
date-fns/date-fns3,1678.43s1/1016node
ajv-validator/ajv7,96223.97s2/1175node
koajs/koa4405.90s0/1173node
pallets/click1,96517.93s0/1046python
pallets/jinja9116.67s0/1026python
pallets/markupsafe800.96s0/107python
arrow-py/arrow1,9027.44s0/1010python
yaml/pyyaml1,2873.66s0/1025python

Eight of the twelve produced no red run at all on a clean tree. 4 did, and those four are the reason the arbiter re-samples a red before it is allowed to become a verdict: on a suite that flakes, a single red throws away a correct fix somebody already paid for.

what is still open

Four rounds of red-teaming this gate, 319 attempts, named 95 ways past it. One representative command each, judged by the binary this page describes: 37 refused, 58 allowed. They fall into four groups, and none of them is a surprise the code did not already suspect.

group open why 14 the deleting verb is not rm 14 find -delete, rsync --delete, truncate, dd, shred, a bare redirect. the law knows five verbs 5 the shell moved and nobody followed 5 pushd, cd -P, cd --. plain cd is followed; its options and pushd are not 11 the program is not on the line 11 bash s.sh, npm run deploy, python3 -c. three of them record a PARSE_LIMIT, the rest are silent 28 git has other ways to the same place 28 git push --forc (git accepts abbreviations), branch -D main, clean -xfd, reset --hard @{u}, rm -rf .git

Enforce mode IS on, and these are its published limits. This line used to read "enforce mode is not on, and this is the reason" — true when it was written, false from the day the switch was turned on, and left standing on a page nobody re-read. A claim about the machine that outlives the machine is the same defect this project measures in other people's numbers. The escapes stay published beside the refusals, because a gate that promises a protection it cannot hold is worse than one that says what it stops. Reproduce with python3 redteam/redteam.py; it judges and never runs, with every destructive binary shadowed on PATH and the log of what they were asked to do asserted empty.

what has not been measured

A quiet machine. Every run on this page shared its box with other work, so the wall-clock columns are contaminated and the pass or fail results are not. A second node version, to see whether the express flake follows the runtime. The date decay in date-fns, whose red rate climbs with the calendar. And the real test-file count in six of the twelve repositories, which leaves the question of how much of each suite the lock actually covers open in those six.

each measurement, on its own page

The sections of BENCHMARK.md and the verdict documents, one page each, with the command that reproduces them.

measurementin one line
gate latencyGate latency: The gate runs on every coding-agent tool call (PreToolUse hook), on the critical path, so it has to be cheap. native/bench.py builds a scratch…
correctnessCorrectness: Until fbd6f6e, native/postuse_test.sh piped identical hook JSON into both the Node gate and the native gate and asserted the same verdict (exit…
the ledgerThe ledger: rabadon usage --days 30 aggregates the local spool (~/.rabadon/spool/). It excludes its own drills, demos and self-tests at emit — 3,495 events…
false rejectsFalse rejects: Latency says the gate is cheap. The ledger says how much it did. Neither answers the question a stranger actually asks — will it get in my…
a project rabadon has never seenA project rabadon has never seen: §3b's 0.5 % is one operator, one machine, and rules that operator wrote. The question it cannot answer is the one that…
the refusals that cannot be undoneThe refusals that cannot be undone: 524 refusals is the wrong number to quote and this section exists to say so.
not yetNot yet: repairs held = 2. [building] This section read 0 for two weeks after it stopped being 0, which is the exact failure the rest of this page exists to…
live assist verdictDecision: do not promote this candidate. The executive ran the live model experiment instead of passing that uncertainty to the implementing agent.
review a/b, 17 octA pre-registered A/B of rabadon's opt-in Stop review against plain Claude Code: evidence against at this scale