MVP · records to 2026-09-23 · every number is from the project's records, listed at the end
seq 1Questioncharter.locked
It is all on the ledger.
Thirteen append-only, content-addressed ledgers in three consistency classes, one writer, one gate — the whole system, not a Python pipeline. The direction changed on 11 September.
seq 2Questioncharter.locked
Composed ledgers, as rails.
Every event's id is a hash of its content and every ref must resolve; views and report are re-derived from the events alone, and a rejection writes only the rejection. The POC’s kernel admitted eleven ledgers; Memory (B6) and Knowledge (S2a) arrived on 17–18 September.crates/kernel-events/src/event.rs — Ledger::ALL [13], Ledger::POC [11] · docs/SPEC-kernel.md §1–§2, [C-210] Memory, [C-216] Knowledge · docs/DESIGN-kernel.md §0 · BENCH K-3: rebuild hash-equal on 29 tables
seq 3Argumentclaim.asserted · seq 2
Append-only, addressed by content.
There is no update. A rewrite would be a different id under a seq already taken, so the batch is rejected and the attempt kept as evidence. Each id is blake3 over the content, the ids it references included, so replay re-derives the same ids from the same bytes.docs/SPEC-kernel.md §1 event shape, id definition · docs/DESIGN-kernel.md P6–P7, §13.3
seq 4Argumentclaim.asserted · anchors[0]
The quote has to be in the bytes.
A quote that is not in the bytes is a rejection, not a footnote. Three rungs only — exact, NFC-normalised, then whitespace runs and typographic punctuation folded; none for case folding or edit distance. The gate re-read every resolved anchor: 490 of 490, 0 mismatches.docs/SPEC-kernel.md §2 anchor resolution · docs/GATE-POC.md check 4 · BENCH K-4: exact / nfc / folded 0.09 / 0.32 / 1.78 ms at 315 KB
seq 5Runadmission.rejected · attempts
Mechanical checks reject on the spot. Judged ones come back with a reason.
The guarantee is no unlabeled error. A refusal is a row with a code and a path into the payload that caused it, never a log line: reason_codes_closed asserts the set the kernel can emit equals the spec’s exactly, and every code maps to one stage.docs/DESIGN-kernel.md §7.2 — the invariant registry and the closed reason-code list · docs/SPEC-kernel.md §1 reason codes, §7 judged.L1–L6 · doctrine/v1/DOCTRINE.md
seq 6Runrun.lease · resume
Survives kill -9 without paying twice.
Twenty random kills: zero repeated calls, identical report. Each model call has three durable points — recorded before the wire, raw body committed on arrival, then admission — so a new process re-issues only what was never committed.docs/BENCH-POC.md O-1 · docs/GATE-POC.md check 2 · docs/SPEC-kernel.md §2 Unit row, §8 check 2
seq 7Runresearch replay
Replays for $0.
79 of 79 calls served from the ledger; the same event ids; the same report bytes. No network client is built at all. The bench line’s U-4 row is 78 of 78 over a different ledger — two measurements, not one, so the drawing carries both.docs/GATE-POC.md check 3 — replay_cache_hit hits 79, total 79, 0 calls, 0 reserves · docs/BENCH-POC.md U-4 — 78 of 78 · docs/DESIGN-kernel.md §13.2 · job id and cost: Gold-8 Verdicts, Q6
seq 8Budgetreserve · settle · cap
Money is reserved before it is spent.
Eight clients demanding 400 against a cap of 100: 100 admitted, 30 refused, none over. No unit is invoked without a reservation; the writer checks live plus settled plus the new amount against every cap it names, and settle replaces the estimate with the actual.docs/SPEC-kernel.md §2 Budget row · docs/GATE-POC.md G-2 · bench/sets/gold-8/caps.toml (standard cap $0.40)
seq 9Runrun.started … run.finished
One run, on the record.
The plan is the old method as a hashed statechart. Every state writes its events, the report is rendered from them, and the owner's verdict is itself an event that refs the claim it judges.docs/SPEC-kernel.md §3 plan v1, §7 report and Decision appends · docs/E1-2026-09-16.md
The walk-through, state by state
run.startedrsk research start, or deep_research_start over MCP. The plan and the doctrine are hashed into the first event, so the run names exactly the method it will follow.
auditThe auditor unit is invoked under a reservation. state.entered · task.created · unit.invoked · unit.output · unit.admitted · premise ×n
orientSearches and fetches are events; every page the task read is a task.retrieved ref. search.done · fetch.done · task.retrieved · hypothesis ×n
recharterThe charter is locked: the lines to pursue and the claims to verify. charter.locked
investigateInvestigators work the lines and verifiers the claims, together: a claim is asserted with its anchors, a verdict becomes an attacking edge, claim_status is the fold over them, and a rejected output comes back repaired. claim.asserted + anchors · verdict → edge.attacks · claim_status · unit.rejected → repaired
synthesiseThe synthesis may cite only observed claims, or declare a gap (A5). synthesis
donerun.finished; report.md is rendered from the ledger — a pure function of it, with no timestamps. run.finished · report.md
Decision.feedbackThe owner's verdict on the report, actor owner, refs the run and the claim it judges. The eight side-by-side verdicts on the POC page were recorded exactly this way.
Plan v2: a cover loop, an article, and a source a run may not read
Plan v1 above is still the default. Plan v2 (plans/audit-first.v2.toml) adds two states and reads twice as much: cover writes a charter addendum for every coverage cell still short and sends the run back to investigate — twice at deep, three times at exhaustive, ending when a pass adds no counting claim — and write renders the article. The charter is never edited; the addendum folds after the locked lines.
BLOCK-1 blocks a source at the fetch lane by work identity, not by URL string: a listed /abs/ arXiv id refuses its /pdf/ twin, a DOI refuses its mirror, and rsk eval ext refuses to score a run whose body store holds one. It is what makes an external benchmark number mean anything.
Reading roughly doubled, information recall roughly doubled, and analysis fell by about half — finding #1328, still open. The first explanation, a fixed output budget on the synthesist, was measured and is false: 39 of 39 calls ended stop at no more than 3,670 of 8,000 tokens. The article is claim-starved instead. Promotion between plans is E4's, by score, never by hand.docs/DEPTH-1-NOTES.md · docs/SPEC-kernel.md [C-360]…[C-364], §3 plan v2 · docs/GOLD-EXT-CLEAN.md — the three refusals BLOCK-1 made live · issues #1283, #1284, #1355, #1328
seq 10Evalbench.result · gold-ext/v3
How a number on this site is made.
No figure here is written by hand. BENCH-POC.md and GATE-POC.md are rsk bench report and rsk gate doc; GATE-MVP.md is rsk gate mvp report; GOLD-EXT-CLEAN.md is assembled from the bench.result rows rsk eval ext wrote. A verdict is recomputed from value and target at render time, and a row the ledger cannot give prints not measured with its reason.
the external number, end to end
16.42 is the one number here that is not ours to define. An external benchmark score is the easiest number in this field to quote dishonestly, so: exactly how it is produced.
the setTen DeepResearch Bench II tasks. The question, the rubric and all 672 binary items were written by the benchmark's authors; an item is satisfied or it is not.docs/GOLD-EXT-CLEAN.md — the ten, per task
the methodrsk eval ext under
gold-ext/v3: one bench.result row per rubric item — the item text, its dimension, the benchmark's score, our credit, and the judge's own fact_present / as_asked with reason and evidence. 672 rows, countable and joinable; a partial set is refused by name, never averaged.docs/JUDGE-1-NOTES.md · the
partial-row gate, repair round 1
the judgeGemini-3.7-flash through OpenRouter, under our own
prompts, one seat for every run on both sides of any comparison we draw.docs/GOLD-EXT-CLEAN.md —
“How to read it against a leaderboard”
the conditionNo run counted read the source its own rubric came from — BLOCK-1 at the fetch lane, and rsk eval ext separately refusing to score a run whose body store holds one. The guard and its auditor are not the same code.docs/GOLD-EXT-CLEAN.md · issue #1355
the ceiling52 of the 500 information-recall items exist only
inside the source each task forbids, so a compliant run's ceiling on recall is about 66.7 of the
74.4 points it is worth, not 74.4.docs/GOLD-EXT-CLEAN.md — the last section
and why the leaderboard is a direction, not a scoreboard
The published table (arXiv:2601.08536v3) gives 45.40 overall for the best system, and that row comes from a different judge: its evaluator was Gemini-2.5-Pro, later GPT-5.5, against our Gemini-3.7-flash under prompts we wrote. Comparable in shape, not in calibration — so 45.40 is a direction of travel. Our own before-and-after comparisons hold, because both sides are scored by the same seat.
It has already bitten us in our own favour: 10.67 was published as the tool's score and was our own judge misreading its own rubric — 212 of 366 refused recall items refused for the report's shape, the fact itself quoted in the evidence field. Naming each item's dimension moved the number to 16.58 with no new research. A benchmark number measures the judge as much as the tool, which is why the seat, the method version and the date are attached to it here.docs/GOLD-EXT-CLEAN.md · docs/JUDGE-1-NOTES.md · docs/GOLD-EXT-V2.md · the MVP entry that took 10.67 back
next: the POC — what all of this measured to, including the check that failed — and the MVP, fifty-three questions later.