Ledger Kernel · research-stack
MVP · measured 2026-09-21 · every number is from the project's records, listed at the end
seq 1Argumentclaim.asserted · anchors[0]

Research you can hold to account.

Every deep-research tool can search, read and write. None can be held to what it wrote. Here every claim, model call, dollar and judgment is an event you can open, replay and check. The report is prose; the reason is a ledger.

report.md · Findings Stripe caches status codes and response bodies for keyed requests once endpoint execution begins, replaying even 500 server errors on subsequent retries. high confidence · docs.stripe.com “Stripe’s idempotency works by saving the resulting status code and body of the first request made for any given idempotency key, regardless of whether it succeeds or fails. Subsequent requests with the same key return the same result, including 500 errors.” A1 fetch.done · status ok · docs.stripe.com bodies/<sha256_text>.zst · extracted text, bytes Stripe’s idempotency works by saving the resulting status code and body of the first request made for any given idempotency key, regardless of whether it succeeds or fails. Subsequent requests with the same key return the same result, including 500 errors. start end the model cites url + quote · the kernel resolves fetch_ref and [start, end) · rungs exact → nfc → folded GATE-4 · every resolved anchor decoded from the store and compared byte-for-byte 451 / 451 · 0 mismatches

A finding in a real report, and the page it came from. The model cited a URL and a quote; the kernel found the quote in the bytes it had fetched and stored the offsets. The POC gate re-read every resolved anchor from the store: 451 of 451 matched, 0 mismatches. The MVP kept the rule and ran it over twenty campaigns: 53 questions, 708 of 723 live claims linked into the Knowledge ledger, $8.27 in all.docs/GATE-POC.md check 4 · docs/SPEC-kernel.md §2 anchor resolution · the report: Gold-8 Verdicts, Q6

seq 2Planthree doors
seq 3Evalbench.result

The headline numbers, each with its file.

MVP · 19–21 Sep
rendered from the gate ledger by a program; a row it cannot give says not measured
GATE-MVP · runs
53 / 53 · $8.27
20 campaigns · 52 done · 1 gap · 531 paid calls · p50 93.6 s
MEASURED
E3 · six laws
106 / 106 · 120 / 212
L1, L3 by the ledger's rule · L2 L4 L5 L6 labelled: 6 of 53 pass all four
LABELLED
E1 · re-judge
4 of 8
better 3 · not-worse 1 · worse 4 · the bar is 6
MISSED BY TWO
POC · 16 Sep
the numbers the site opened with, unchanged
GATE · check 4
451 / 451
resolved anchors re-read byte-for-byte · 0 mismatches
PASS
GATE · 8 checks
7 of 8
check 8 fixed by FIX-590 the same day · in CI since
FIXED
E1 · side-by-side
5 of 8
not-worse 5 · worse 3 · the bar was 6
MISSED BY ONE

The POC values are bench.result events whose verdict is recomputed from value and target when the report renders. The MVP gate is rsk gate mvp report over the X2 ledger; a re-render of the same ledger is byte-identical. Neither document is edited by hand.docs/GATE-MVP.md · docs/X2-REVIEW-2026-09-20.md · docs/BENCH-POC.md · docs/GATE-POC.md · docs/E1-2026-09-16.md