tiltmeter
pre-release · 2026-08-09The detector fires when your harness moves, and not when it doesn't.
A model release either changed how your skill descriptions, tool schemas and output contracts behave, or it didn't. Both answers are only worth having from an instrument whose error rates are known — so those were measured first, before a single reading was taken.
- False positives
- 0.0%0/200 fired
- Detection power
- 95.0%190/200 caught
Both calibration gates, cleared
methodology →A seeded simulation, re-run by CI on every push and failed on drift — never a threshold picked by eye. 4,000,000 bootstrap resamples in total.
False positives
n=2000.0%0/200 fired
one cell per trial — every one quiet is a trial that did not fire
Detection power
n=20095.0%190/200 caught
one cell per trial — 10 misses shown quiet
The schedule has already run 4 times
chain verified unbroken at buildEvery run committed a record and linked it to the one before it. All 4 refused, for the same stated reason, and said so in public rather than publishing a number nobody paid for.
- rg-20260810-12026-08-10skipped
ANTHROPIC_API_KEY not set · planned $0.7984, spent $0.00
genesis 0e74605383
- rg-20260817-12026-08-17skipped
ANTHROPIC_API_KEY not set · planned $0.7984, spent $0.00
0e74605383 → 228ff518d9
- rg-20260824-12026-08-24skipped
ANTHROPIC_API_KEY not set · planned $0.7984, spent $0.00
228ff518d9 → a96569107e
- rg-20260831-12026-08-31skipped
ANTHROPIC_API_KEY not set · planned $0.9980, spent $0.00
a96569107e → d45759f34c
What it caught while waiting
The identical plan — 12 cells, 324 item runs, unchanged — repriced itself when a standing model's published price moved.
+25.0% for the same work, on sonnet5 — read from the dated pricing manifest, not from a hardcoded rate.
caps $1.50/cell · $3.00/run · $15.00/month
pricing manifest pricing.2026-08-08
How a comparison resolves
A cell's identity is five hashes: suite, model, runner behavior, presentation, sampling policy. Change exactly one and the comparison resolves to a verdict. Change two and it refuses, naming the axes rather than guessing.
cannot-attribute, published with the axes named, never guessed.See it run
Recorded against this site as deployed, not a local build — if the site were broken, the recording would be too.

Motion is reduced on this device, so the recording does not autoplay. Play the recording (webm, muted, no audio).
The four launch suites
108 items · 34 negative (31.5%)Committed on 2026-08-09, before any reading and before whatever release eventually moves one of them exists. A suite that only ever tests the happy path cannot tell you when it starts firing on everything — so every suite carries a negatives quota.
house-skill-activation
suiteSpecHash 6cbcf2e
mcp-tool-selection
suiteSpecHash 9981576
output-contract
suiteSpecHash 39fd16e
routing-adherence
suiteSpecHash e5e7d16
How pre-registration is checked, not claimed
For each reading, verify recomputes suiteSpecHash from the suite file, walks git history for the first commit whose tree contains that hash, reads the model's cited release date, and asserts the suite was registered first — printing the commit SHA and both dates. Git history is the actual proof; the command just makes checking it a 30-second job.
npx tiltmeter@1 verifytiltmeter launched 2026-08-09 with 4 pre-registered suites and 108 items. There is no time series yet — that is what pre-registration means. The series starts here.
The first run group spends real money and is a deliberate, gated step. Until it is taken, the schedule keeps publishing what it did instead — 4 records so far, priced against a pricing manifest fetched 2026-08-08.
Install
The first three commands run with no API key and no network — proven against the packed npm tarball in a clean directory, not just in this repo.
npx tiltmeter@1 init --from-skills <dir>
npx tiltmeter@1 lint
npx tiltmeter@1 plan --run-group <id> --offlineFull walkthrough on docs.