Every number on this page is regenerated from data at build time — nothing is typed by hand. Every measurement carries its protocol, its composition, and its limitations. The experiments that failed are published beside the ones that shipped.
Share of citation URLs in each tool's audited payloads that are commit-pinned and re-fetchable. Counted over cached bytes — a property of the URL string. Frozen audit, 2026-08-13.
firecrawl publishes only with its sentence: incomplete — our harness overwrote 7 valid payloads; Firecrawl answered every question on the first fetch.
claude web search is MISSING, not passed. No key in that environment. A row silently absent reads as one that passed, so it stays in the table with no number.
exa is labelled “web search” — the only tool its public endpoint exposes. Its code-retrieval product is unmeasured.
Our own two non-immutable URLs, named: https://github.com/sponsors/wevm (a sponsor link inside wagmi's own docs, which we quoted) and https://github.com/wevm/viem/issues/2484 (the name of a test case in viem's source).
Counted over cached bytes, on 16 questions, and it is one count, not a verdict. The audit issues none and none is computable from it.
Publication-grade harness: raw HTTP response bytes written to disk before parsing, one tokenizer over full payloads on every arm, refusals void. Six verified integration footguns plus ten plain questions.
| arm | ran | void | med tokens | immutable / total URLs | names ver | traps |
|---|---|---|---|---|---|---|
| web3ctxOURS | 16 | 0 | 3,071 | 316 / 324 | 10 / 16 | 1 / 6 (4p) |
| web3ctx (intent=integrate)OURS | 16 | 0 | 7,454 | 424 / 516 | 16 / 16 | 6 / 6 |
| context7 | 16 | 0 | 558 | 0 / 0 | 6 / 16 | 0 / 6 (2p) |
| exa (code context) | 16 | 0 | 1,033 | 1 / 171 | 11 / 16 | 2 / 6 (3p) |
| exa (web search) | 16 | 0 | 8,986 | 11 / 263 | 13 / 16 | 5 / 6 (1p) |
| claude web search | 16 | 0 | 17,163 | 6 / 404 | 11 / 16 | 6 / 6 |
| firecrawl (developer search) | 11 | 5 | 3,781 | 26 / 233 | 9 / 11 | 4 / 6 (2p) |
| ethskills (static bundle) | 1 | — | 85,068 | 0 / 275 | 1 / 1 | — |
The prediction we registered was wrong, and it goes first. We wrote “we expect to be the most expensive arm.” Measured with one tokenizer over full payloads, our default row is 3,071 median tokens — under three of the arms here. The earlier adversarial run’s “most expensive of four” priced a different unit and read our content-only figure against everyone else’s full payload. It licenses no cost claim in either direction.
The two web3ctx rows are ONE finding and are never shown apart. Called the way a client that does not know our argument names calls us, we catch 1 of 6 traps. With intent: "integrate" — the value that reaches the human-validated recipe — 6 of 6. The gap is the argument, and the weaker row is ours to publish.
context7’s 0/0 is its own sentence: its payloads contain no URLs at all. That is a different fact from citations that fail to pin, and collapsing the two would misreport it.
T6 carries a permanent disclosure. Our recipe gained the ERC-4626 rounding matrix on 2026-08-20 after losing this trap in the earlier adversarial run. A benchmark that quietly re-runs a question after fixing its answer is measuring its own patch — so this sentence travels with the row for as long as the row exists.
VOID — 5 row(s), listed: firecrawl-dev/Q06, firecrawl-dev/Q07, firecrawl-dev/Q08, firecrawl-dev/Q09, firecrawl-dev/Q10. All 5 are a real provider quota reached during the run. Excluded from numerator and denominator; that arm publishes as 11 ran / 5 void, never as a fraction of 16 and never as a zero.
claude web search caught 6 of 6 — matching our best row and beating our default one — at 17,163 median tokens against our 3,071, with 6/404 immutable citations against our 316/324. Both compositions belong to that comparison; either number alone tells a different story than the pair does.
⊘ NO VERDICT. n=16 against the registered floor of 393 (D17). Bootstrap CIs are in the result document; a confidence interval does not repair a small n, it states it.
| trap | web3ctx* | web3ctx* | context7 | exa | exa | claude web search | firecrawl |
|---|---|---|---|---|---|---|---|
| T1 deadline is NOT in the params struct on SwapRouter02 | |||||||
| T2 amountIn: 0 spends the contract's WHOLE balance | |||||||
| T3 outputAmount IS the fee — the difference is what the relayer keeps | |||||||
| T4 wagmi v3 uses useConnection, not useAccount | |||||||
| T5 RainbowKit 2.x declares wagmi ^2 as its peer range | |||||||
| T6 BOTH halves — down when issuing shares/paying assets, UP when charging |
Every recipe is validated by a person against live chains and served with its transaction hashes. These are the flagship's — check them with any RPC, right now.
| step | chain | transaction | what it proves |
|---|---|---|---|
| approve | base-sepolia | 0xd4b4e6395f…a3d0f5 | the router was allowed to move exactly this much USDC |
| approve | base-sepolia | 0xb0db8b5854…2421e6 | the router was allowed to move exactly this much USDC |
| burn (depositForBurn) | base-sepolia | 0xdba9da61c7…1a0f74 | the USDC left the source chain |
| mint (receiveMessage) | arbitrum-sepolia | 0xcd869bb6b1…bd2dab | it arrived — the destination leg, on a different chain |
| attestation probe | base-sepolia | 0x1460054173…6c3080 | the attestation was fetched, not assumed |
Share of delivered units whose project@version matches the query's gold scope, over the locked 200-question set at the current corpus.
| arm | scope-precision@10 | n | abstained |
|---|---|---|---|
| dictionary-word floor OFF | 81.0% [95% CI 74.3 – 87.2] | 127 | 20 / 147 |
| floor ON — as shipped | 80.4% [95% CI 73.5 – 86.7] | 127 | 20 / 147 |
The abstention count rides with the number, always — 20 / 147 in both arms. Precision computed only over answered questions would rise every time the server declined to answer, which would reward silence.
Not comparable to a published code-retrieval precision. CodeGrep and its kin retrieve within one repository: project selection never enters their metric, so under our definition their BM25 would read 1.000 — including the configuration measured at 0.375. The two numbers measure different stages, and ours was pre-registered as an upper bound where a pass is “suggestive, never proof”.
Composition: measured live against the deployed surface, macro-averaged, wildcard-version, both arms on the same questions. The two rows differ by one shipped mechanism and by nothing else — the identical abstention counts are the evidence for that.
Every candidate below was pre-registered before it ran, failed its gate, and was not shipped. A candidate that fails its gate publishes anyway — that is the point of the gate.
| candidate | its pre-registered gate | measured | why it died |
|---|---|---|---|
| Doc-side sparse expansion | prose recall +2.00pp | +0.00pp against a +2.00pp bar | Failed on inertness, not intrusion. The model ran and moved nothing, at cost. The intrusion clause passed — descriptive only. |
| Unit-class demotion | payload quality on affected queries | 7 of 7 evicted, on 2.6% of queries | The mechanism worked exactly as specified and could never reach its own trigger — the anchor it was written for holds zero inert units. |
| Section-select for recipe bodies | no anchor regresses | flipped both target anchors — and lost a third | It improved the two anchors it was aimed at and silently broke the one it was not watching. A gate registered before a run is not editable after it. |
| Inline bodies in search results | completion rate and tokens per completed task | completion 8/12 → 7/12 | Completion fell and tokens per completed task rose. It improved the linear term and multiplied the quadratic one. |
| Content-hash dedupe | ≥15% cumulative token saving | 4.7% cumulative | Every structural clause held and the saving was a third of its bar — and it could not have fired on the deployed transport at any bar. |