v1.0.0 · 2026-10-09
First release (not yet tested on a model): judges whether an on-chain observation proves a claim about a payment, a wallet balance or an RPC endpoint on an EVM chain, as JSON with a binary verdict (proven, not-proven; "wrong instrument" is a reason, not a label), the reason and the one observation that would decide. Carries the rule that it judges only what the description shows. Covers the three outcomes of a receipt call (receipt, null, refusal), the public node service that refuses receipts with an archive error, the HTML body behind a success status, a receipt with an unread status, a pending transaction with no block number, the explorer's indexing delay and its lagging balance view, the canonical balance through eth_call, the shared outbound address of a Worker, a single 429 read as a dead endpoint, attempted versus answered in an endpoint chain, a reader that returns zero on failure, the amount-without-nonce trap, and the payment header that is public in calldata.
Facts re-checked on 2026-10-08, read-only JSON-RPC calls from a developer machine, no key, no transaction, nothing deployed: - The public node service answered eth_blockNumber and refused eth_getTransactionReceipt for a transaction of the latest block with JSON-RPC error -32602 "Archive requests require a personal token" (HTTP 403, JSON body). Three other public endpoints returned the same receipt with status 0x1. - A receipt request for a made-up hash returned HTTP 200 with result null and no error object on two endpoints (null = unknown, error = refusal). - One provider answered both methods with HTTP 525 and an HTML page; the owner's "HTML behind status 200" was not reproduced on a 200 that day and stays owner-measured. - Not re-checked (needs a payment, a Worker deploy or the owner's accounts): the explorer indexing delay of 40–75 s (owner 2026-09-26), the explorer balance view behind the transfer list (owner 2026-09-22), the shared outbound address and the first-call rate limit from a Worker (owner 2026-09-12), the afternoon of refusals from the edge (owner 2026-10-08), the calldata header replay (owner 2026-10-07).
Tests: 24 cases (15 traps, 9 controls) in test/data.mjs, generated into test/cases.json; test/control.mjs makes no model call and passes (the right answer and every listed alternative pass; the plausible wrong answer, a fence, a preamble, an empty answer, an echo, a missing or extra key, the flipped verdict and a wrong next_check fail). Price $0.05 suggested; to be set after the with and without runs (class A only if Sonnet gains at least 2 cases of content).