Skip to main content

THE METHOD

Nothing shipsuntil it prints.

Extraction is the easy half. Reading 1,130 documents took one night. Getting to a state where an independent reviewer with no stake in the work could find nothing took the rest of the engagement. This page is that half: nine laws, each one written by a failure we can date, and each one built into a machine the work has to pass through.

run log · exit assertions1,130 documents · 8,641 pages · three days
STAGE1  INTAKE ......... docs=1130/1130  files=1901 (768 stubs)  text=597  image=533  recon=CLOSED  renders=3894p  errors=0
STAGE2  PILOT .......... docs=12  pages=654  wrong_values=0  digit_mismatches=0  method_file=PROMOTED
STAGE3  EXTRACTION ..... identity=PASS  pages=8641/8641  shortfalls=0  selfcheck=PASS
STAGE4  CONTINUOUS ..... cells_rechecked=500+  value_defects=0  class_fixes=fed back mid-run
STAGE5  MERGE .......... union=1130  disjoint=PASS  identity=PASS  undischarged_orders=0
STAGE6  RESOLUTION ..... date_forms=202  unparsed=0  fallback_fired=706  residual_eligible=0
STAGE7  PACKAGING ...... partitions=1130/469/363/238 (+60 residue)  cell_diffs=0/1070  substitutions=0
STAGE8  VALIDATION ..... pagetrue=12430 cells  flags=305  refuted=67  defects=223  verdict=SHIP-READY
STAGE9  DOCUMENTS ...... claims=137/138 reproduce  arithmetic_closes=PASS  pointers_outside=0
STAGE10 RELEASE ........ residual_risk=STATED  released_by=<human>
  • STAGES 3 AND 4 run alongside each other, batch by batch, so a class of defect found in batch four is fixed before batch five is read. The log stays sequential because that is how it prints.
  • STAGE 10 is not a stage. It is a door, and a human opens it.

One run, measured on the delivered bytes. A European contract structuring programme, 1,130 documents, 8,641 pages, three days from staging to release. The stages, and the assertion each one has to print before the next begins, are defined in the Spec. Nothing in this log was carried forward from a report. Every value was recomputed from the final files at the moment of writing, which is the only reason it is worth reading. No customer value appears in it.

01 / the platform run

Five stages. Nine laws hold them up.

On this page the five stages carry the method’s own instruments instead of a customer’s outcome.

  1. READ ONCE

    3

    images per read, the measured reliable ceiling

    Pilot gate, 12 documents and 654 pages.

    Later raised to 5 on one route under an explicit ruling, and safe only because the assertion converts the silent failure into a detected one.

    Assert that the input arrived.LAW 1
  2. STRUCTURE

    0

    unparsed dates, out of 202 distinct written forms

    Resolution layer, 1,531 filled cells.

    What is printed is what ships.LAW 2
  3. RESOLVE

    +65

    points of field coverage, 8 of 81 to 61 of 81

    A/B on identical cached markdown, 20 documents, 2026-06-22.

    Speak the customer’s words, byte for byte.LAW 4
  4. DELIVER

    70

    empties, every one classified by cause

    Resolution layer, 1,060 of 1,130 filled.

    The 14 are a request, not a gap: if the master gains those nodes, 14 rows resolve.

    A blank with a reason is finished work.LAW 3
  5. QUERY FOREVER

    ONCE

    read once, then queried. Per-cell page provenance at 100%, measured rather than asserted

    Three documents, verified individually. Not a corpus-wide measurement.

    Provenance ships its window.LAW 5

The fifth stage prints ONCE on purpose: it is the claim every page in this family exists to receipt.

Note: Every figure in this band is stated again in the law it belongs to, with its sample, its date and its caveat attached.

02 / the claim

A rule you only read is not a rule.

Every mechanism on this page exists because a written instruction did not hold. Someone read the rule, agreed with the rule, and then the work went past it anyway, because reading a rule produces knowledge and not behaviour. So each rule here has been built into something the work physically has to pass through: a card, a gate script, a lock that refuses a second writer, an assertion that prints a number, a version stamp that forces a rebuild. That is the whole method. Everything below is nine instances of it, in the order a single value travels: from the page it is printed on, to the human who releases it.

On this page the customers are not named. Names go on outcomes. Failures go on us.

WHAT AN EXIT ASSERTION IS

A line a stage has to print before the next stage runs, carrying numbers measured on the bytes that stage produced, not on a record describing them. A stage that cannot print its line does not advance, and a bare PASS is rejected output: every check prints its measured value beside the value it expected. Stage 6 is the plainest case: the effective-date fallback prints 706 fired against 0 rows still eligible, both halves, because the rule is to print the reconciliation, not just the total.

One rule makes the whole rail work. Coverage is proven against pages and bytes, never against reports, and that includes our own reports. The routing split is the first place it shows: 597 documents to the text route and 533 to the image route on measured text density, 4,740 pages against 3,901. The route split is the budget.

03 / nine laws

Nine laws. Nine failures that wrote them.

Each law below is an imperative, the failure that produced it, the machine that now enforces it, and the number that machine prints.

  1. LAW 13

    Assert that the input arrived.

    images per read, the measured reliable ceiling

    THE INCIDENT

    In a European contract structuring programme, the pilot ran 12 deliberately hard documents, 654 pages. A reader requested batches of page images and the images came back empty. No picture, no error message. The request succeeded.

    A reader blinded this way sincerely believes it read the pages. Asked whether it read every page, it answers yes. It produces a perfectly formed record describing pages it never saw. Every downstream check passes, because every downstream check is checking the record and not the pages. The errors land exactly where the customer notices them: dates, amounts, and company names.

    The second incident makes this a law rather than an anecdote: a separate engagement, a separate codebase, an independent discovery of the same class. In a monthly business-review corpus, 34 packs across 24 business units, 18 months, a run in which every model call failed exited 0 and wrote a well-formed empty result, indistinguishable from a document that genuinely held no data. A page-number default of 0, indexed to page_num minus 1, handed the last page’s image to every page: 910 rows where a correct run produced 2,660. Markdown extraction stayed healthy throughout, which is what made it near-invisible.

    THE MECHANISM

    On every image read, assert images_received == images_requested. A shortfall is a hard stop for that chunk, not a warning. A page ledger is written the moment a page is read, carrying doc_id; page; timestamp; method; images_requested; images_received, and a page not in that ledger was not read. A run whose calls all failed is marked RUN INVALID rather than completed.

    THE NUMBER

    Pilot gate, 12 documents and 654 pages. Batches of 10 and of 5 failed silently, 3 or fewer were reliable. Later raised to 5 on the image route under an explicit ruling, and safe only because the assertion converts the silent failure into a detected one. The assertion itself is absolute: an unasserted read is a defect regardless of batch size.

    IN THE PRODUCTEvery capture run reconciles pages read against pages in the manifest, per document, before a document can be marked complete.

    The blinded readerTwo lanes. The upper lane, what the record says, carries three page glyphs, a tick and pages_read equals 3, and its arrow is stopped by a vertical gate. The lower lane, what the reader received, carries three empty dashed rectangles and images_received equals 0. The gate asserts that images received equals images requested, and right of the gate the outcome is a hard stop. A second row shows a box reading every model call failed connected to a box reading exit 0, with the connection struck through and labelled run invalid.assert images_received == images_requestedWHAT THE RECORD SAYSpages_read = 3HARD STOPWHAT THE READER RECEIVEDimages_received = 0every model call failedexit 0RUN INVALID

    scroll the figure sideways

    The record and the pages are two different populations. Every downstream check was reading the record. A second engagement, a separate codebase, found the same class independently.
  2. LAW 20

    What is printed is what ships.

    unparsed dates, out of 202 distinct written forms

    THE INCIDENT

    In a European contract structuring programme, the pilot shipped a figure printed 477 965,14 as 477965. Decimal truncation in 2 of 2 filled amount cells. Two of two. The pilot was 12 documents, so this is a rate on a very small denominator, and that is exactly why the pilot exists. The defect is invisible to every downstream check because the number still looks like a number. The trap underneath it: the same figure survived intact in a free-text field on the same document. The column type was the trap, not the reader.

    A date the parser cannot read is not a formatting problem. It is a value you do not actually have.

    THE MECHANISM

    The raw layer captures as printed, as strings. Interpretation, normalisation and computation happen in a separate layer, from evidence that is still intact. No summing, ever. Enumerated columns take enum values only, and where the printed reality has no member in the set the cell ships empty with a candidate flag. A printed zero is a value and ships, flagged as a stated true zero. A printed impossible date is document truth: a contract printing 31 June ships that cell empty with a literal flag quoting the printed text, never corrected to a plausible neighbour.

    THE NUMBER

    Resolution layer, 1,531 filled cells in the delivered batch. 202 distinct written date forms, including split digit runs from raster captures, Roman-numeral months, spelled ordinals, source-language genitive month forms, and digital-signature stamps with clock times. 1,488 parsed cleanly, 34 two-digit years resolved from stated context, 4 shipped empty and flagged, 0 unparsed.

    IN THE PRODUCTValues are normalised at transfer with the raw capture preserved, so a normalisation can always be re-derived and never silently replaces what was on the page.

    The encoding partitionsFive horizontal bars against a fixed baseline of 1,130 documents. UTF-8 carries all 1,130 and is authoritative. Windows-1250 carries 469, Windows-1251 carries 363, Windows-1252 carries 238, and a short dashed bar carries the 60-document UTF-8 only residue.UTF-81,130 AUTHORITATIVEWindows-1250469Windows-1251363Windows-1252238UTF-8 only60 residuebaseline: 1,130 documentsidentical file namesand identical headersin every folderrows fitting two code pages but not the third: 0, so the split needed no tie-break

    scroll the figure sideways

    rows fitting two code pages but not the third: 0, so the split needed no tie-breakNo character was dropped, substituted, transliterated or approximated to fit a code page. A document that could not be carried exactly was left out of that folder instead. Read back from disk, decoded in its own code page and compared cell by cell against the master, the three single-byte partitions produced 0 cell differences across all 1,070 of their rows, not sampled.
  3. LAW 370

    A blank with a reason is finished work.

    empties on a buying-entity column, every one classified by cause

    THE INCIDENT

    In a European contract structuring programme, a prior delivery shipped 100% fill on a buying-entity column and got 500 or more of them wrong. The delivery documented here shipped 70 empties, every one classified by cause: 51 documents printing no buying entity at all under a counterparty-named folder, 14 whose printed entity has no node in the customer’s master listing, 5 naming between two and five distinct buying entities. The 14 became a request rather than a gap: if the master gains those nodes, 14 rows resolve and their suppliers become matchable.

    In a North American logistics programme, where the matcher is uncertain it abstains, and coverage and precision are reported separately rather than blended into one accuracy number. The payoff is measurable at the far end: two supplier cells that could not be confirmed shipped empty with the best candidate disclosed in a companion column, and the receiver adopted both candidates verbatim and struck the rows from its unresolved list.

    And the rule is applied to our own hedges. In a German energy contract estate a "likely fine" verdict was deleted from a review interface, because nobody could find an instance where it was wrong in a useful way, and the review chip beside it shipped without a count on the stated grounds that a single intimidating number is worse than no number.

    An honest blank plus a labelled candidate is not hedging. It is a decision handed to the person entitled to make it, pre-packaged so that making it costs one edit.

    THE MECHANISM

    Undeterminable means empty, plus a flag naming why, plus a ledger line. Placeholder strings are banned outright: no "N/A", no "none", no "unknown", no dash. An empty cell without a reason is not compliant with the rule, because the reason is the deliverable. Guard rejections go to a companion file beside their identifier and their discordant name, so a human adjudicates in one step.

    THE NUMBER

    Resolution layer, 1,060 of 1,130 documents filled, classified 51 / 14 / 5. The 14 are a request, not a gap: if the master gains those nodes, 14 rows resolve. Against 500 or more wrong on a prior 100% fill: a different, earlier delivery, and the reason this one ships blanks.

    THE SECOND NUMBER

    75 to 78%

    coverage at about 95% precision, about 71% end to end

    13 August 2026, about 2,000 documents, internal measurement. Not validated by the customer. Coverage and precision are two numbers and the product of the two is not an accuracy figure.

    IN THE PRODUCTCoverage and precision are reported as two numbers, never one. Abstention is a first-class outcome with its own reason code.

    The abstention splitTwo solid bars on a nought to one hundred percent axis. Coverage is drawn as a band from 75 to 78. Precision stands at about 95. A third bar, dashed and unfilled, is labelled the blended number and struck through at about 71.0255075100percent75 to 78about 95about 71COVERAGEPRECISIONTHE BLENDED NUMBERcoverage times precision is about 71% end to end, and it is not an accuracy figure

    scroll the figure sideways

    Internal measurement on about 2,000 documents, August 2026. Not validated by the customer. Coverage and precision are reported as two numbers because multiplying them produces a figure nobody can act on.
  4. LAW 4+65

    Speak the customer’s words, byte for byte.

    points of field coverage: 8 of 81 without the ontology, 61 of 81 with it

    THE INCIDENT

    A controlled experiment rather than a failure, and it is introduced that way. The customer-ontology overlay evaluation, 2026-06-22: 20 real documents in German, English and Chinese, run through the production pipeline as an A/B ablation on identical cached markdown, so the only variable is whether the customer’s own field names are declared. The byte-level rule sits beside it. In a European contract structuring programme a routing-label vocabulary carried a casing variant, and the labels were matched byte for byte including that casing.

    The customer’s tooling was built against the bytes of the file they last accepted.

    THE MECHANISM

    A customer publishes its own document types and field schemas. Every document is classified on both axes, the customer’s and Talonic’s, in parallel, and extraction is augmented with the customer’s declared field names, so a source term maps to the customer’s own target without a human writing a mapping rule.

    THE NUMBER

    2026-06-22, 20 documents in German, English and Chinese, hand-authored ground truth from each document’s OCR markdown, A/B on identical cached markdown through the production pipeline. Plus 53 fields. Dual-axis classification was correct on 19 of 19 in-scope documents, and the deliberately out-of-scope filing correctly received no customer label, so the overlay does not over-trigger. One order-confirmation doctype went from 0 of 6 to 5 or 6 of 6, because the German source prints Auftragsnummer and Filiale and only the overlay maps those to the customer’s declared order_confirmation_number and branch_name.

    IN THE PRODUCTCustomer ontologies overlay the 529-type ontology. A German employment contract and an English one resolve to the same canonical type, and the customer’s own type name is what is shown back.

  5. LAW 5100%

    Provenance ships its window.

    per-cell page provenance, measured rather than asserted

    THE INCIDENT

    A head-to-head we lost, on one axis of seven. The run is the agent-versus-retrieval bake-off, a single grading pass by one judge model, both arms through the same agent loop and the same model, one of them constrained to retrieval only. On the per-value provenance question we returned the char-exact value 31.12.2047 and nothing else. The retrieval arm returned the section header, the surrounding start and end table, and the auto-renewal clause. Retrieval scored 3. We scored 2.

    THE MECHANISM

    provenance_span NOT NULL is a schema constraint on every captured value, not a convention, and every value carries page, line, region, confidence and reasoning. Citations resolve at read time to a file id and a page number, so a stored page keeps exactly what was validated at generation time. Two standing checks keep evidence from becoming decorative: a dual-citation check, that every substantive non-empty cell has a parsable page citation and every cited page plausibly carries a value of that class, and a forward citation-drift check, because documents whose printed folio numbers are offset from their render index produce systematically wrong citations.

    THE NUMBER

    Three verified documents: 3,779 of 3,779 rows, 5,180 of 5,180, and 2,588 of 2,588. Three documents, verified individually. Not a corpus-wide measurement.

    IN THE PRODUCTClick a value, land on the page it came from.

    The run we lost it on, in the receipts

  6. LAW 60 / 17,407

    Build the yardstick before you quote a number.

    leak-scanner hits: delivered bytes, then the internal working layer

    THE INCIDENT

    In a North American logistics programme, the plan was to score extraction against the customer’s own records. Those records measured 92 to 93% accurate and contained systematic errors: customer reference numbers recorded as load numbers, and documents deliberately mislabelled by operators so they would route somewhere useful. So ground truth was built three times: 50 documents by three people in one day, then 100 hand-labelled documents on two fields, then a shared versioned sheet in one place. And then the instrument turned on its authors.

    By the 13th run I was able to get to 93% against the ground truth. And then I asked it, why can’t we do 100? And it said, because the ground truth isn’t as good as you might think.

    The second incident is a yardstick belonging to someone else. In a German energy contract estate, 4 May 2026, the customer’s own verification instrument for a 66-document defect review, an 87-page client-authored report, itself failed on handwriting and dates, which makes the resulting error count a lower bound rather than a measurement. No accuracy percentage was computed, by them or by us.

    THE MECHANISM

    Golden samples: reference datasets with known-correct values, versioned, in one place. Every benchmark compares results against golden data per field, with a judge producing verdicts and a human able to override. The final self-imposed gate is the unpoisoned sample, one that has not been used to iterate, and every clean sweep is paired with a positive control, because a zero is only credible if the instrument fires somewhere.

    THE NUMBER

    The same instrument run over two populations at release. Zero hits on the bytes that shipped. 17,407 hits on the internal working layer, which is what proves the scanner was alive.

    Without the control, "0 hits" and "broken regex" are the same output.

    IN THE PRODUCTBenchmark runs compare against golden data per field, and a human can override the judge.

  7. LAW 712,430

    Verification is the long pole, and the checker never fixes.

    decision cells page-verified at 100%, no sampling

    THE INCIDENT

    In a European contract structuring programme, three days from staging to release against a deadline. 1,130 documents and 8,641 pages were read in one night. Everything after that was verification. Eleven independent adversarial passes ran against the final delivered bytes. Four ended ship-ready. Seven ended in a hold.

    Round 1 returned its verdict on a package whose every structural attack had failed: mechanically excellent, substantively leaky. What yielded was content and governance, including a column shipping 100% empty while being counted as reserved, which laundered a coverage failure into a reserved class and inflated the reported fill rate.

    An auditor that fixes what it finds has destroyed the measurement.

    THE MECHANISM

    Three layers, and the verdict names which ones ran. STRUCTURE reads the delivered files as bytes. RULES runs every rule in evidence mode over the full corpus. VALUES reads the source pages cold, by someone who did not build the row. Four rings, each run by a different party: builder self-check, continuous checker, adjudicated page-true pass, adversarial cold eyes on the final bytes, then the human release gate. A checker never reuses the builder’s code. Evidence mode: a bare PASS is rejected output, and every check prints its measured value beside its expectation. A fix invalidates the previous verification entirely and triggers the full battery again. Regression is a diff in both directions: observed-not-ledgered = 0 and ledgered-not-observed = 0.

    THE NUMBER

    11 decision fields across 1,130 documents, the adjudicated page-true pass. 305 distinct flags. 37 disposed by a ruled law before a single page was opened, and after already-repaired cells were screened out, 253 went to page verification in 28 batches. 223 confirmed defects. 30 refuted at the page. 67 of 305, or 22%, did not survive.

    A page-true pass that produces no refutations is not a clean corpus. It is an uncalibrated verifier.

    IN THE PRODUCTValidation flags are informational and never block output, but they order the review queue. Approval gates carry threshold rules per schema, and failures go to a human queue.

    The four rings are drawn in full in the next section.

  8. LAW 84.21

    Judge by the worst case a user will actually hit.

    insights per page reported as the average, against 1 on the month the reader opens

    THE INCIDENT

    In a monthly business-review corpus, a feature was reported internally as publishing an average of 4.21 insights per page. The average was real and it hid the distribution, which was the thing that mattered. History months with lots of settled data publish 5 to 7. The frontier months, the ones the reader actually opens, publish 1. The diagnosis was the opposite of the obvious one: generation was not the bottleneck, the validation gauntlet was. One page emitted 7 candidates, dropped 6 and published 1. That is not a thin report, it is a thin survivor set.

    The same shape from the user’s side. In a German energy contract estate, review time was estimated at under a minute per field. Sitting with the reviewers, it was observed at about 20 minutes, because every field meant opening the customer system and then the sibling documents. The queue was redesigned the same day, from field-first to data-product-first.

    Judge this feature by the thinnest frontier-month page, not the corpus average.

    THE MECHANISM

    Report distributions, not averages. Stratify samples and record the strata. Publish the seed and freeze the sample to disk before any source page is opened, because a sample drawn after looking is not a sample. Count what is unverifiable by construction separately from what is merely unverified. A page that cannot clear its batteries is held, not shipped, and shipping zero is correct behaviour when the data is thin.

    THE NUMBER

    Insight-page handover, 12 August 2026. The average was real. One page emitted 7 candidates, dropped 6 and published 1. On a separate engagement the review-time estimate was wrong by 20x: under a minute per field estimated by us, about 20 minutes observed on site on 30 July 2026.

    IN THE PRODUCTHeld items go to a review queue categorised by the reason they were held, and a regenerated item invalidates its prior review state. The reasons a hold can carry are modelled in the Spec.

    Insights published per page, by monthA one-dimensional strip from 0 to 8 insights published per page. History months are drawn as an unlabelled range band, capped at both ends and read off the axis, because a range is what was measured and its extent is in no row of the numbers table. A single enlarged dot sits at 1, marking the frontier months the reader actually opens. A vertical line at 4.21 marks the average that was reported.012345678the average that was reported · 4.21history monthsthe months the reader actually opensinsights published per page

    scroll the figure sideways

    the average was real. It hid the distribution, which is the thing that mattersInsight-page handover, 12 August 2026. One page emitted 7 candidates, dropped 6 and published 1. That is not a thin report, it is a thin survivor set.
  9. LAW 924

    A rule governs only when it is built into something the work must pass through.

    cells quarantined hours before a release

    THE INCIDENT

    In a European contract structuring programme, the buying organisation’s own tax, VAT and registration numbers are printed on every invoice block in the corpus, and they will reach the supplier identifier columns unless something actively stops them. This class recurred across five separate incidents. Writing it down did not stop it. Telling people did not stop it. It stopped only when the identifier set became a maintained file that the check battery loads, complete by construction, rather than a remembered list. Its final catch was 24 cells quarantined hours before a release.

    In a monthly business-review corpus, a mapping fix shipped and never reached the rows that were already present and wrong, because the build logic was "build if empty" and was silent about populated rows. The measurement that exposed it: category matched a dictionary label on 3,678 of 3,678 rows and metric_label matched on 0 of 3,678. The durable fix was not the mapping. It was a logic-version integer stamped into metadata by every rebuild and bumped whenever a change would map the same input rows differently. Elsewhere two workers wrote the same output paths and the second overwrote the first, because the template mandated a lock, the actual instruction card omitted it, and nothing on disk could refuse the second writer.

    The honest coda. The author of the rules is the first person to break them. It happened three times in one stretch: logging duties written into the harness for the next operator while the current run skipped them; every ledger that served the work kept current while every ledger that existed for the reviewer’s visibility went stale; and the work-distribution tooling exempted from the project’s own laws under time pressure.

    If a successor finds this pattern a fourth time, the honest conclusion is that the check belongs in automation, not in good intentions.

    THE MECHANISM

    Card text, gate scripts, dispatchers, monitors, create-if-absent locks, version stamps that force a rebuild, batteries whose inputs are files rather than memory. Grade inheritance by application, never by recall. And the customer’s own complaint history is loaded as the pre-flight check battery, because those are the checks the customer will run first.

    THE NUMBER

    The poison battery, loading the maintained buyer-identifier file, on the fifth recurrence of a class that four written instructions had failed to stop.

    IN THE PRODUCTRules are executable predicates attached to a schema, not prose in a runbook, and a rule that cannot be expressed deterministically ships marked unsupported rather than handed to a model to guess. Those predicates are modelled in the Spec.

    the check battery’s line, at releasepoison_battery ... buyer_ids_in_supplier_cells=0 cells_quarantined=24

04 / who checks the checker

Maker, checker and adversary are never the same party.

Three verification layers, and the distinction between them is the point.

STRUCTURE
Reads the delivered files as bytes. Row counts, headers, encodings, checksums, the shape of what shipped.
RULES
Runs every rule in evidence mode over the full corpus. Each rule prints its measured value beside the value it expected.
VALUES
Reads the source pages cold, by someone who did not build the row, and compares what is on the page with what shipped.

Structure-only certification passed off as content validation caused every major escape in the history this method draws on. A structural pass is necessary and it proves almost nothing about whether the data is right.

"Structure and rules verified, values sampled at n=60, not censused" is an honest verdict. "Verified" is not.

Two prohibitions hold the rings apart.

  • A checker never reuses the builder’s code.
  • If a check shares a code path with the thing it checks, it is decorative.
The four verification rings and the human release gateFour concentric rings. Innermost, the builder self-check, run by the builder. Then the continuous checker, run alongside by a second party. Then the adjudicated page-true pass, run by a reader who did not build the row, annotated 12,430 cells, 305 flags, 67 refuted. Then adversarial cold eyes on the final bytes, run by reviewers barred from the builder reports, annotated 11 passes, 4 ship-ready, 7 holds. The outer boundary is not a ring: it is a gap with a door in it, labelled human release gate. A radial line carries the label maker, checker and adversary are never the same party.1234maker, checker and adversary are never the same party1BUILDER SELF-CHECKrun by the builder2CONTINUOUS CHECKERrun alongside, by a second partybatch by batch, mid-run3ADJUDICATED PAGE-TRUE PASSrun by a reader who did not build the row12,430 cells · 305 flags · 67 of 305 did not survive4ADVERSARIAL COLD EYES ON THE FINAL BYTESrun by reviewers barred from the builder’s reports11 passes · 4 ship-ready · 7 holdsHUMAN RELEASE GATEnot another check

scroll the figure sideways

The outermost boundary is deliberately not a ring. Four checks and then a person, and the person is the only one who can release.

ELEVEN PASSES, FOUR SHIP-READY

The reviewers were prohibited from reading the builder’s reports. Every round read the delivered bytes and nothing else.

What each new round found was not what the last round had looked for. Each new instrument found members that no prior instrument had a token for: 12, then 7, then 18. The arms race between a hand-written token list and the text it is scanning does not converge, and that is the finding, not a footnote to it.

It ended by abandoning the token list. The exit was reading all 8,727 populated free-text cells, rewriting 129, and writing the borderline judgments down so that the next reviewer audits a recorded judgment instead of deriving a new one. Then the verifying round harvested its detector vocabulary from the pipeline’s own writing rather than guessing tokens, read all 242 high-signal contexts, and found zero. That was the first green.

A check battery only catches shapes someone designed a check for.

05 / receipts

The runs behind the benchmarks section.

The short version of this is on the landing page. This is the long version, with the run contexts attached.

See the three benchmark claims →

BLOCK A · STRUCTURE-FIRST AGAINST RETRIEVAL

The argument is not that retrieval is bad. It is that retrieval re-reads.

CUAD, 20 documents, full run on 2026-06-23, model global.anthropic.claude-sonnet-4-6 on Bedrock eu-central-1, 8,983 receipts, about $14 of new spend against a $20 cap. Structure-first capture on cross-document clause presence: recall 91%, precision 69%, 105 true positives, 47 false positives, 11 false negatives, $4.31 for the 20 documents, 126.0 fields per document on average. Two independent harnesses agree at 91 and 69.

The retrieval arm ran on the same 20 documents. Top-8: 34% recall, 93% precision, $0.015 per query. Top-24: 56% and 94%, $0.039 per query. Agentic full scan: 86% and 86%, $0.536 per query at 20 calls per query.

Only the agentic full-scan tier approaches structure-first recall, at 20 calls per query and a per-query cost that scales with corpus size. Structure-first comprehends once, then queries are close to free.
Cumulative cost against number of queriesA line chart. Structure-first is a flat line at $4.31, paid once for 20 documents. Three retrieval tiers rise from the origin: top-8 at $0.015 per query, top-24 at $0.039 per query, and an agentic full scan at $0.536 per query using 20 calls. Each rising line crosses the flat line, and each crossing is marked with a small square and left unlabelled.$0$10$20$30$4002505007501000queriescumulative cost, USDcontinues to $536 at 1,000 queriescrossover · marked, not numbered: a query count is arithmetic, not a measurementstructure-first, comprehend once, 20 documents$4.31, paid onceretrieval agentic full scan$0.536 per query, 20 callsretrieval top-24$0.039 per queryretrieval top-8$0.015 per query

scroll the figure sideways

CUAD, 20 documents, full run 2026-06-23. On single-document numeric question answering the two approaches tie at about 36%, and this chart does not apply there.

BLOCK B · THE REGIME WHERE WE TIE

On single-document numeric question answering, we tie.

FinQA, head to head on 25 documents: 36% against 36%. Tied. Capture cost $1.03 metered plus $0.06 to answer, retrieval $0.09 at one call per query. Single-document numeric question answering is a different regime. There is one question per document, so the repeated-query advantage never triggers.

Wider, the same regime holds and the accuracy is modest. FinQA at 50 documents: 28% end to end, 6% raw coverage. TAT-QA at 60 documents: 33%, 12% raw coverage. The bottleneck is numeric reasoning plus whether capture retained the input cells, not the structure versus retrieve axis.

A tie, and it is disclosed on purpose. Publishing the corpus where structure-first wins and omitting the one where it ties is the kind of omission a competitor finds.

BLOCK C · THE PRECISION FLANK

Capture over-emits, and the fix is not shipped.

Precision on CUAD is 69% and aggregate recall is 123%, which is what over-emission looks like when you measure it honestly. The fix has a name and a scope: the section-aware validator. It is not shipped.

BLOCK D · THE BENCHMARK WE LOST

We lost an axis, and it is the most useful result on this page.

Seven axes, both arms through the same agent loop and the same model, one of them constrained to retrieval only. We lost one axis to retrieval, and the reason was not accuracy. On the per-value provenance question we returned a bare char-exact value, 31.12.2047, with no surrounding text. The retrieval arm returned the section header, the surrounding start and end table, and the auto-renewal clause. Retrieval scored 3. We scored 2.

The fix is tracked and stated in one line: return the located span plus a context window. Nothing else about the loss is being reframed.

A char-exact anchor is only better than retrieval if it ships the surrounding window too.

THE TALLY, AT TIER B

Across the seven axes the run finished 6 to 1 on a 604-document enterprise contract corpus.

  1. The retrieval arm is the same agent constrained to retrieval only. It is not a claim about any specific third-party stack.
  2. A single grading pass, one judge model. No inter-rater agreement was measured.
  3. The supersession axis scored 2 because the agent diagnosed and offered the resolve step rather than running it in the turn.
The provenance windowA page rectangle holding neutral placeholder rules rather than readable text. One short run inside it is boxed tightly and labelled as what the anchor returned. A larger dashed rectangle encloses that run plus the line above it and the two lines below, and is labelled as what the reader needed.source pagewhat the anchor returned: 31.12.2047what the reader needed:· the section header· the start and end table· the renewal clausea char-exact anchor is only better than retrieval if it ships the window too

scroll the figure sideways

a char-exact anchor is only better than retrieval if it ships the window tooOne axis of seven, lost to the retrieval arm. Retrieval scored 3, we scored 2. The tracked fix is to return the located span plus a context window. No customer text appears in the page rectangle above.

06 / what we did not measure

The section nobody publishes.

A sign-off carries an explicit statement of what was not measured, in its own numbered section, with residual risk named and located. That is a rule in the method, not a gesture. Here it is applied to this page.

THE MEASUREMENT WE HAVE NOT PUBLISHED

Answers that changed across ten runsThe instrument for the ten-run consistency measurement, drawn complete and empty. The horizontal axis runs from run 1 to run 10, the vertical axis measures answers that changed, the gridlines and the legend slot are in place, and the plot area carries the watermark not measured because the result does not exist yet.0255075100run 1run 2run 3run 4run 5run 6run 7run 8run 9run 10answers that changedrunLEGENDseries to be declaredwith the corpusNOT MEASURED

scroll the figure sideways

The method exists and has been run in a narrower form: 50 of 57 fields consistent across six runs of 100 documents, internal, July 2026. The ten-run, 100-question variance result has not been measured, so this chart has no data in it. When it is measured it will appear here with its corpus named.

AND FIVE MORE

  1. 01

    Cost per 1,000 queries as a published artefact.

    The inputs exist from the CUAD run and the chart below block A is drawn from them. The chart has not been published with a named corpus as a standing artefact.

  2. 02

    A customer-validated outcome number.

    No accuracy, coverage or recovery figure anywhere in this method has been validated by a customer. Every number here is our own measurement, an SLA, or a demonstration.

  3. 03

    The judgment column.

    On one delivery, 89.5% of a classification column rested on per-row judgment with no independent mechanical check available. Re-derivation agreed on 94 of 94 rows and is silent on the other 1,036. A reader must not read zero disagreements as 1,130 rows validated, and the audit published that sentence rather than the zero.

  4. 04

    The unextractable tail.

    In a North American logistics programme about 10% of documents are structurally unextractable, photographs of vehicles and partial photographs, which caps achievable automation at about 90%. It is published rather than netted out.

  5. 05

    What a clean sample can and cannot say.

    A clean sample of 60 cells supports the statement that the error rate is plausibly below a few percent. It does not support the statement that there are no errors. The sample size bounds the claim almost independently of corpus size.

07 / where a person still decides

A machine does not release.

FULLY AUTOMATED

What runs without a person in it.

Intake and canonicalisation. Routing by measured text density. Render generation. Work partitioning and claim rules. The ledgers. The whole standing check battery. Reference minting and collision testing. The matching tiers with their guards. Date reshaping. Encoding partitioning. Packaging. And every number in every delivery document re-derived from the final bytes.

The measured payoff of automation is not throughput. It is that these are the classes that never recur once they are scripted.

ASSISTED, NEVER CLOSED

What a machine helps with and does not finish.

Reading a page. Ink and glyph adjudication, where the measurement automates and the verdict is a judgment on the measurement. Classification that rests on per-row judgment. And the boundary between content and narration in prose, where four detector generations failed before the approach changed.

PERMANENTLY HUMAN

The gates that do not move.

Ruling the specification’s open items before extraction rather than after. Promoting the method after a pilot. Adjudicated disputes. Convention conflicts, with two worked examples: a whitelist that would have blanked 118 correct owner logins, and a proposed inverse rule that would have destroyed 474 correct values. In both cases a literal application of the written rule would have destroyed correct data, and in one of them the customer ruled for the literal rule and the delivery disclosed the reversal. Any ambiguity a worker stopped on, because a worker that has to choose received an incomplete instruction. And the release itself.

THE LAST MILE

What happened after handover on one delivery, measured by byte diff two days later. The receiver renamed and flattened files, dropped the documentation and the checksums, dropped the lossless master, folded residue rows into code-page views with best-fit character substitutions in 29 free-text cells, Unicode-normalised 34 filenames in locator columns, and filled in two of the honestly empty supplier cells from the candidates shipped beside them.

Row coverage was complete and no decision-bearing value changed, and almost nothing was byte-identical. Nothing the receiver did was hostile or even wrong. Renaming, flattening, filling resolved values and transcoding are what intermediaries do, which is the reason the delivery has to survive them. In an earlier round a stakeholder hand-edited roughly 135 judgment cells before forwarding. Only a byte diff caught it, and those edits then became rulings to fold back in.

Candidates you bury in notes die there. Candidates you ship as data get used.

On one engagement no subscription revenue is billed until the customer accepts the accuracy gate in writing.

08 / every number on this page

Every number here, with the run it came from.

A number without its measurement is a decoration. If a figure on this page cannot name its sample, its denominator, its date, and who measured it, it should not be on this page. Tell us if you find one.

Open the full tableClose the tableSix runs. Every number on this page, with its sample, its date, its source run and its caveat.

From the documented delivery run, a European contract structuring programme

NumberWhat it measuresThe run it came fromThe caveat
1,130 documents · 8,641 pagescorpus of one delivered batchrun manifest, reconciliation CLOSED, 0 unattributedOne batch. Measured on the delivered files, not on a report.
1,901 files, of which 768 platform stubsintake censusintake manifest
597 text route · 533 image routerouting split, 4,740 and 3,901 pagesintake, measured text densityThe route split is the budget.
3,894 pages rendered · 8.4 minutes · 1.90 GB · 0 errorsrender stagestage 1
12 documents · 654 pagespilot on deliberately hard documentspilot gateThe pilot is chosen to be the worst documents in the corpus, not a random sample.
3 images per readmeasured reliable ceilingpilot, batches of 10 and 5 failed silentlyLater raised to 5 on one route under an explicit ruling, and safe only because the assertion converts the silent failure into a detected one.
2 of 2 filled amount cells truncateddecimal truncation at pilotpilotTwo of two. The pilot was 12 documents, so this is a rate on a very small denominator, and that is exactly why the pilot exists.
202 date forms · 1,488 parsed · 34 resolved · 4 empty and flagged · 0 unparseddate normalisationresolution layer, 1,531 filled cells
706 fallback fired · 0 rows still eligibleexit assertion on the effective-date fallbackresolution layer, reconciliation 705 minus 1 plus 2 equals 706Print the reconciliation, not just the total.
70 empties, classified 51 / 14 / 5buying-entity resolutionresolution layer, 1,060 of 1,130 filledThe 14 are a request, not a gap: if the master gains those nodes, 14 rows resolve.
500 or more wrong on a prior 100% fillthe prior delivery this replacedprior accepted deliveryA different, earlier delivery, and the reason this one ships blanks.
1,130 / 469 / 363 / 238 / 60 residueencoding partitionspackaging, strict error handlingNo character was dropped, substituted, transliterated or approximated to fit a code page. A document that could not be carried exactly was left out of that folder instead.
0 cell differences across 1,070 subset rowspartition verificationread back from disk, decoded in its own code page, compared cell by cell against the master, not sampled
about 12,430 decision cells page-verified at 100%the page-true pass11 decision fields across 1,130 documents, no samplingNo sampling. Every decision cell.
305 flags · 37 disposed by law · 253 verified · 223 confirmed · 30 refuted · 67 of 305 did not surviveflag adjudicationpage-true pass, 28 batchesA page-true pass that produces no refutations is not a clean corpus. It is an uncalibrated verifier.
11 adversarial passes · 4 ship-ready · 7 holdsadversarial rounds on the final bytesindependent reviewers reading delivered bytes, prohibited from reading builder reportsSeven holds. A gate that has never held is not a gate.
8,727 free-text cells read · 129 rewritten · 242 high-signal contexts · 0 foundhow the token-list arms race endedverifying round, detector vocabulary harvested from the pipeline’s own writing
137 of 138 quantitative claims reproducedelivery-document auditadversarial round 10, re-derived from final bytes
0 hits delivered / 17,407 hits internal layerthe positive controlleak scanner, same instrument, two populationsWithout the control, zero hits and a broken regex are the same output.
24 cells quarantinedthe maintained buyer-identifier file’s final catchpoison battery, hours before releaseFifth recurrence of a class that four written instructions had failed to stop.
89.5% of one column rests on per-row judgmentresidual risk, statedjudgment-field census, 1,011 of 1,130 rows, re-derivation agreed on 94 of 94 and is silent on the other 1,036A reader must not read zero disagreements as 1,130 rows validated.
118 owner logins · 474 correct valuestwo convention conflicts escalated rather than complied withresolution layerIn both cases a literal application of the written rule would have destroyed correct data, and in one of them the customer ruled for the literal rule and the delivery disclosed the reversal.
34 filenames normalised · 29 free-text cells substituted · 2 honest blanks promoted · about 135 judgment cells hand-edited in an earlier roundthe last mile, measured by byte diff two days after handoverbyte-level comparison of the internal delivery against the forwarded copyNothing the receiver did was hostile or even wrong. Renaming, flattening, filling resolved values and transcoding are what intermediaries do.

From a North American logistics programme

NumberWhat it measuresThe run it came fromThe caveat
92 to 93%the accuracy of the customer’s own records, measured against hand-built ground truthground-truth build, 2026This is the customer’s own records, not ours. It is why the yardstick had to be built three times.
50 documents / 3 people / 1 day, then 100 hand-labelled documents on two fields, then a shared versioned sheetthree ground-truth buildsMarch and April 2026
13th run, 93%the run where the model reported defects in the ground truthJuly 2026, internalInternal measurement. The point is not the 93, it is what the model said about the ruler.
75 to 78% coverage at about 95% precision, about 71% end to endmatching, with abstention13 August 2026, about 2,000 documents, internal, not customer-validatedInternal measurement on about 2,000 documents, August 2026. Not validated by the customer.
50 of 57 fields consistent across six runs of 100 documentsfield stability17 July 2026, internalSix runs, not ten, and 57 fields rather than 100 questions. It is the closest measured thing to the ten-run claim and it is not the same claim.
about 10%structurally unextractable tail13 August 2026, internalPhotographs of vehicles and partial photographs. It caps achievable automation at about 90% and it is published rather than netted out.

From a German energy contract estate

NumberWhat it measuresThe run it came fromThe caveat
under 1 minute estimated, about 20 minutes observedreview time per fieldon-site observation, 30 July 2026Estimated by us, observed by sitting with the reviewers. The queue was redesigned the same day.
66 documents, an 87-page client-authored defect reportthe closest thing to an independent quality assessment4 May 2026The customer’s verification instrument itself failed on handwriting and dates, so the resulting error count is a lower bound and not a measurement. No accuracy percentage was computed.
99.1%, being 3,435 of 3,465 documentscompleteness, not accuracymilestone batch, July 2026This counts documents that produced a full field set. It says nothing about whether the values are right. Completeness and accuracy are different claims and must never be reported as one.
about 29% of volume, 1,445 filesbyte-identical duplicates detected before any processing costmilestone batch, July 2026

From a monthly business-review corpus, 34 packs across 24 business units, 18 months

NumberWhat it measuresThe run it came fromThe caveat
exit 0 on a run where every model call failedthe silent-success failureverified 2026-08In the service that job completes normally and nothing distinguishes it from a document that genuinely held no data. The verifier now marks such a run RUN INVALID.
910 rows against 2,660the wrong-page-image failuresame verification runA page-number default of 0 indexed to minus one and handed the last page’s image to every page. Markdown extraction stayed healthy throughout, which is what made it near-invisible.
853 metric names collapsed to 76, overlap 21% to between 80 and 94%, 5% "other"closed-enum effect on vocabulary fragmentationextraction schema change
3,779 of 3,779 · 5,180 of 5,180 · 2,588 of 2,588per-cell page provenance coveragethree verified documentsThree documents, verified individually. Not a corpus-wide measurement.
4.21 average, 1 on the frontier month, one page emitted 7 dropped 6 published 1the average that hid the distributioninsight-page handover, 12 August 2026The average was real.
61,483 rows, 81 resolved, 2,207 unresolved labels, 10,356 conflicts · category 3,678 of 3,678 against metric_label 0 of 3,678the mapping fix that never reached populated rowsresolution rebuild
validator acceptance 92.4% to 11.5% in prose and 30.9% inside the prize sentencegating a validator’s acceptance rate with a test1,000 seeded pseudo-random figures against a realistic basisThe acceptance rate is gated by a test, not by judgment.

From public benchmark corpora, named, no consent required

NumberWhat it measuresThe run it came fromThe caveat
CUAD: recall 91%, precision 69%, 105 / 47 / 11 true positives, false positives and false negatives, $4.31 per 20 documents, 126.0 average fields per documentstructure-first capture on cross-document clause presencefull run 2026-06-23, model global.anthropic.claude-sonnet-4-6 on Bedrock eu-central-1, 8,983 receipts, about $14 of new spend against a $20 capTwo independent harnesses agree at 91 and 69.
Retrieval on the same 20 documents: top-8 34% / 93% at $0.015; top-24 56% / 94% at $0.039; agentic full scan 86% / 86% at $0.536 and 20 callsthe retrieval armsame runOnly the agentic full-scan tier approaches structure-first recall, at 20 calls per query and a cost that scales with corpus size.
FinQA head to head, 25 documents: 36% against 36%. Tiedsingle-document numeric question answeringsame run. Capture $1.03 metered plus $0.06 to answer; retrieval $0.09, one call per queryA tie, and it is disclosed on purpose. Publishing the corpus where structure-first wins and omitting the one where it ties is the kind of omission a competitor finds.
FinQA 50 documents: 28% end to end, 6% raw coverage. TAT-QA 60 documents: 33%, 12% raw coveragethe same regime, widersame runAccuracy is modest. The bottleneck is numeric reasoning plus whether capture retained the input cells, not the structure versus retrieve axis.
Precision 69%, aggregate recall 123%the open precision flanksame runCapture still over-emits. The fix is the section-aware validator and it is not shipped.
Overlay eval: 8 of 81 to 61 of 81, plus 53 fields, plus 65 points; 19 of 19 dual-axis; 0 of 6 to 5 or 6 of 6 on one doctypecustomer ontology overlay2026-06-22, 20 documents, DE / EN / ZH, hand-authored ground truth from each document’s OCR markdown, A/B on identical cached markdown, production pipelineAn A/B on identical cached markdown, so the only variable is whether the customer’s field names are declared.

From customer corpora, anonymised

NumberWhat it measuresThe run it came fromThe caveat
The bake-off tally, 6 of 7 axes, on a 604-document enterprise contract corpusseven axes, both arms through the same agent loop and the same modelthis pageRuns on a customer corpus under NDA, with three caveats inline: the retrieval arm is the same agent constrained to retrieval only and is not a claim about a specific third-party stack; a single grading pass with one judge model; the supersession axis scored 2 because the agent diagnosed and offered the resolve step rather than running it in the turn. No euro figure from that corpus appears anywhere.
99.1% completeness, 3,465 documentscompleteness on a milestone batchmilestone batch, July 2026Anonymised and labelled as completeness.
The one lost axis, told without the tallythe provenance-window losssame runThe loss is ours and it identifies nobody.

09 / your documents

Send us the documents you would give an auditor.

Send a representative sample. Contracts, scans, case files, operational paperwork, the folder nobody opens. Within five business days you get back the extracted data, the field-level coverage, the confidence on every value, the provenance to the source line, and the blanks with their reasons attached. Judge it field by field. That is the only test that settles anything.

Co-author of DIN SPEC 91491, Europe’s first AI data standard, with Fraunhofer IIS.

Document testresponse within 1 business day · your data back within 5

Response within 1 business day.