POC · measured 2026-09-16 · every number is from the project's records, listed at the end
seq 1Questioncharter.locked
It is all on the ledger.
On 11 September the direction changed: not a Python pipeline, but the whole system as composed, append-only, content-addressed ledgers. Eleven ledgers, three consistency classes, one writer, one gate.
seq 2Questioncharter.locked
Composed ledgers, as rails.
Eleven ledgers in three consistency classes run as rails into one admission gate. Every event's id is a hash of its content; every ref must resolve; admitted events land in one append-only file, and the views and the report are re-derived from the events alone. A rejection writes only the rejection.docs/SPEC-kernel.md §1–§2 · docs/DESIGN-kernel.md §0 · BENCH K-3: rebuild hash-equal on 29 tables
seq 3Argumentclaim.asserted · seq 2
Append-only, addressed by content.
Events append in order; each id is blake3 over its content, the ids it references included. There is no update. A rewrite would be a different id under a seq that is already taken; the batch is rejected and the attempt is kept as evidence. 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.
The model cites a URL and a quote; the kernel resolves the URL to the page it fetched and finds the quote in the stored bytes — exact first, then NFC-normalised, then with whitespace runs and typographic punctuation folded; there is no rung for case folding or edit distance — and records the byte offsets. A quote that is not in the bytes is a rejection, not a footnote. The gate re-read every resolved anchor: 451 of 451 matched, 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.
What a program can decide — schema, refs, the anchor's bytes, budget arithmetic, 33 named codes — is enforced at the gate in the same transaction. What only a judgment can decide — the six laws — goes to a judge unit or the owner and returns as a scored event with its reason. The guarantee: no unlabeled error.docs/DESIGN-kernel.md §7.2 · docs/SPEC-kernel.md §7 judged.L1–L6 · doctrine/v1/DOCTRINE.md
seq 6Runrun.lease · resume
Survives kill -9 without paying twice.
Each model call has three durable points: recorded before the wire, the raw body committed on arrival, then admission. A new process resumes from the ledger and re-issues only what was never committed. Twenty random kills: zero repeated calls, identical report.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.
Replay opens the source read-only, seeds the run's roots and re-executes the plan with the model client and the fetcher replaced by ledger lookups. No network client is built. 78 of 78 calls served from the ledger; the same event ids; the same report bytes.docs/BENCH-POC.md U-4 · docs/GATE-POC.md check 3 · 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.
A unit is never invoked without a reservation; the writer checks live plus settled plus the new amount against every cap the reserve names. Settle replaces the estimate with the actual. Eight clients demanding 400 against a cap of 100: 100 admitted, 30 refused, none over.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: audit, orient, recharter, investigate with verification alongside, synthesise. Every state writes its events; the report is rendered from them; the owner's verdict is 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. 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 proof page were recorded exactly this way.
next: the proof — what all of this measured to, including the check that fails.