Benchmark

Research · published in full

The traps, including the ones we lose.

Nine datasets where the obvious reading of the rows is the wrong one. Elbi’s verification gates get all nine right. claude-sonnet-5, given a 300-row sample of each and told which check applies, returns a different verdict on 6.

Two of those 6 come with a caveat. On simpsons_ab_reversal the model sent back an empty response, which scores as inconclusive. On multiverse_joint_fragile the right answer, fragile, wasn’t one of the verdicts it was allowed to give. confounding_freight_rate is still a candidate trap, so treat that row as provisional.

The other 3 are struck through. A bare model already gets them right, and they’re queued for removal.

TrapOracleverdictclaude-sonnet-5verdictAdvantage
berkson_colliderunsoundunsoundnone
confounding_freight_rate provisionalunsoundsoundgate
confounding_ice_creamunsoundsoundgate
leakage_churnunsoundunsoundnone
multiverse_joint_fragilefragileunsoundgate
multiverse_noiseinconclusivesoundgate
rtm_selected_cohortunsoundunsoundnone
selection_ambiguous_roleinconclusiveunsoundgate
simpsons_ab_reversalunsoundinconclusivegate
Baseline captured once, on 2026-07-22, with claude-sonnet-5. Recapture it with python -m benchmark.run --refresh-llm.

Reproduce it yourself with uv run pytest benchmark/tests