Ledger Kernel · research-stack
MVP · measured 2026-09-21 · every number is from the project's records, listed at the end
seq 1Evalbench.result · 2026-09-16

The POC: a kernel that can be checked.

Twenty-eight packages in five days, measured on 16 September: a bench line of 47 gated rows with no miss, a gate of eight checks with one miss drawn, and eight questions judged against the old engine — five of eight, one short of the bar. The miss became the first fix; the judge's finding became the MVP.

seq 2Runthe path · 21 Aug → 16 Sep

The path.

21 Aug old engine 8 questions 11 Sep the design 13 ledgers 14 Sep build starts 28 packages 16 Sep measured bench · gate · E1 16 Sep FIX-590 merged #673

The eight questions were first answered by the old browser-based engine (web-research, 21 August and 9–10 September). The kernel was designed on 11 September as composed, append-only ledgers, built as 28 packages, and measured on the 16th against the same eight questions.docs/DESIGN-kernel.md · docs/PACKAGES.json stage poc · git history 2026-09-11 → 2026-09-16 · web-research/runs/<id>

seq 3Evalgate · 8 checks

What it proved.

Every claim in a report resolves to a byte range of a page the kernel fetched and stored. Kill the process at random and it resumes without repeating a call. Replay a run from the ledger at $0 and the report is identical. Refuse a unit that would cross the budget before it is invoked. Seven of the eight gate checks passed on the first measurement.

1 PASS 8/8 · 67 calls gold-8 headless 2 PASS 0 repeats kill -9 → resume 3 PASS 73/73 · equal replay · rebuild 4 PASS 0 mismatches anchor re-read 5 PASS 4 pairs · live reject → repair 6 PASS p95 36.5 s wall p95 ≤ 180 s 7 PASS 0 FAIL of 42 bench line 8 FAIL 1 of 13 ≠ replay == rebuild #590 · a live run at concurrency 6 cited a page a sibling task had fetched replayed at concurrency 1 the same output is rejected: “A1: url not fetched in run” FIX-590 packaged: anchors resolve against the task's own retrievals · re-run at $0

Check eight failed: one live run at concurrency 6 cited a page a sibling task had fetched, and the same output was rejected on replay at concurrency 1. FIX-590 made a claim resolve against its own task's retrievals, and merged the same day (#673). Checks 1, 4, 5 and 8 have run in CI on every merge since.docs/GATE-POC.md — the checks · docs/PACKAGES.json FIX-590 · PR #673

seq 4Evalbench.result · the line

The numbers.

GATE · check 4
451 / 451
resolved anchors re-read byte-for-byte · 0 mismatches
PASS
GATE · check 2
0 repeats
20 random kill -9 → resume · report hash equal
PASS
GATE · check 3
73 / 73 · $0
replay served from the ledger · 29 tables hash-equal in 3.55 s
PASS
GATE · check 6
36.5 s p95
standard depth, 3 live runs · max $0.057 · 7 calls, 22 cached
PASS
BENCH · line
47 · 0 FAIL
gated rows at their POC targets · release · macOS aarch64
PASS
BENCH · K-2
5,375 /s
sustained events admitted · target ≥ 500
PASS
GATE · 8 checks
7 of 8
check 8: 1 of 13 replays ≠ rebuild · fixed by FIX-590
FIXED
E1 · side-by-side
5 of 8
not-worse 5 · worse 3 · the bar was 6
MISSED BY ONE

Every value is a bench.result event; the verdict is recomputed from value and target when the report renders, never read from a stored flag. Measured 2026-09-16 on a MacBook Pro (macOS aarch64, 10 cpus, 32 GB), release profile, commit 79c3370.docs/BENCH-POC.md · docs/GATE-POC.md · docs/E1-2026-09-16.md

seq 5Decisionfeedback · actor owner

What it taught: reasoning ahead, sourcing behind.

The old engine's report beside the kernel's for each of the eight questions, judged with the method written down first. Not-worse on five, worse on three. The kernel is far cheaper — it drives no browser — and that is where it lost: its share of primary sources roughly halved wherever the old engine had found them, because the interim fetcher was locked out of the sites practitioners write on.

primary-source share per question · old (Q1–Q6) vs kernel (Q1–Q8) Q1 47 % 36 % Q2 76 % 38 % Q3 100 % 75 % Q4 100 % 20 % Q5 92 % 11 % Q6 85 % 42 % Q7 5 % Q8 5 % of 179 fetch.done rows in the gate ledger stackoverflow.com 7 / 7 failed · 403 challenge reddit.com 3 / 3 failed · robots_disallowed yoti.com 3 not ok browser-use.com/pricing ok · 200 — the $0.02 miss is extraction, not fetching ahead: adversarial checks · could-not-establish · honest confidence · verbatim quotes behind: primary sources · locked out of the sites practitioners write on · ten defects filed → the evaluation doctrine (E7)

Of 179 fetch rows in the gate ledger, stackoverflow.com failed 7 of 7 (403 challenge) and reddit.com 3 of 3 (robots). The pricing page the Q1 answer needed was fetched fine — the miss was extraction, not fetching. Ten defects were filed; the judging method became the first evaluation doctrine.docs/E1-2026-09-16.md — method, verdicts, the finding, ten defects · doctrine/eval/v1

browser agents at scale deep $0.72 $0.20 92 → 12 calls NOT-WORSE liveness checks standard $0.87 $0.19 117 → 11 calls WORSE RLS as a backstop scout $0.11 $0.08 16 → 4 calls NOT-WORSE RLS super- user, practice standard $0.94 $0.17 122 → 10 calls NOT-WORSE idempotency tutorial standard $0.71 $0.15 94 → 9 calls WORSE retries and backoff guide standard $0.76 $0.16 93 → 10 calls WORSE observability and alerting standard $0.72 $0.16 99 → 9 calls no report NOT-WORSE same question re-run standard $0.14 $0.04 23 → 2 calls no report NOT-WORSE old tool · its own estimate at batch rates (real ≈ 2×) kernel · settled in the ledger, live better 0 · not-worse 5 · worse 3 → 5 of 8 · the bar was 6 · recorded as eight Decision.feedback events, actor owner

The eight verdicts are recorded as Decision.feedback events in the gate ledger; the document is the reasoning they cite.docs/E1-2026-09-16.md — verdicts, tally · Gold-8 Verdicts page

seq 6Planstage mvp

What came next.

  • sourcingReal search and fetch through the substrate; a fallback ladder for what a plain fetch cannot reach; free search when the paid month runs out. S1, S1a, S6, S7, RETR-1
  • evaluationLabels, judges and scores as a ledger; two model judges calibrated on the owner's labels; the mechanical laws decided by the ledger's rule. E2, E3, E3-MECH, E7, E4
  • budgetA coordinator that refuses the unit that would cross the cap, and Policy and Decision ledgers the runs read. G1, G2
  • the gateFifty questions in campaigns, run once, live, under a cap — and every report read. X2

next: the MVP — 42 of 43 packages merged, 53 questions run for $8.27, and what the reading found.