The business caseThe problem this solves
An abstract of title lists every instrument the county index returned for one tract, numbered E1 upward IN THE ORDER THE COUNTY RECORDED THEM. That is not the order title passed, and most of the entries are not links at all. Four different things print a grantor and a grantee exactly like a conveyance: a lease, a mortgage, a release and a correction deed, and none of them moves title -- put a correction deed in twice and the same interest appears to move twice, which reads as a double sale. An instrument executed in 1998 and recorded in 2004 sits in the chain where its EXECUTION put it and in the abstract seven entries later. And the same party is printed under more than one name -- married, converted from a company to an L.L.C., or misspelled by whoever typed the last deed -- where two names are one party ONLY when the record itself recites it, in a sentence, in the remarks. Almost none of that is a judgement. It is an ordering rule, a fraction that has to sum, and a sentence somebody has to read. The examiner's manual pass over one abstract: classifying every instrument off its label, re-ordering the stack out of recording order into ownership order, summing the fractions, resolving the recitals against the abstract's own recording references, and writing down each break with the pair of instruments it sits between -- before a person certifies it.
Audience
The title examiner who has to certify the chain before anybody drills, leases, buys or pays on it, and the landman or attorney who then works the curative list the examiner produces. Every number on these pages came from one real run of this code, not from a vendor page.
The inputThe actual abstracts of title
The corpus is 60 abstracts of title, 0.16 MB (txt 60). A defect mix a title examiner would recognise and no public dataset can provide, because the documents are somebody's holdings. Four things that all print a grantor and a grantee and only one of which moves title. Instruments executed years before they were recorded, so on 35 of the 60 abstracts the chain does not follow the recording order (measured here by comparing each key's chain against the conveyances in the abstract's own entry order; data/fields.json says 34 for what must be a slightly different comparison). A correction deed that restates a conveyance already in the chain -- counted twice, it reads as a double sale. Fractions that do not sum, and a grantor who conveys more than they hold across two instruments. A party printed under two names because she married, because the company converted to an L.L.C., or because the last scrivener misspelled her -- joinable ONLY where the record says so in a sentence. And Harlan A. Voss, Jr. sitting one entry from Harlan A. Voss, with nothing joining them, which is the trap a model is most likely to fall into and a normaliser is not. 32 of the 60 are clean because most stacks connect and proving it is the job.
The corpus
- The 60 abstracts of titlegenerated from a fixed seed, so no real record, person or institution appears in it.
- Where each came fromwritten for this kit rather than collected — the corpus is generated in the kit's own repository, so there is no third-party data in it.
Swap this folder for your own material and the kit is pointed at your abstracts of title. That is the whole change — there is no database to migrate.
ABSTRACT OF TITLE -- continuation certificate
Tract NE/4 of Section 31, Township 5 North, Range 1 West, Kestrel County
Interest abstracted the royalty interest, the whole (1/1)
Record begins with Bellweather, Priya M., holder of record
Certified through 2007-10-29
Entries 7, listed in the order the county recorded them
ENTRY E1
Recording reference Book 285, Page 112 Recorded 1994-12-15
Instrument Sheriff's Deed Executed 1994-11-20
Grantor Bellweather, Priya M.
Grantee Ida L. Radcliffe
Interest conveyed 1/1 of the interest abstracted
Land described NE/4 Sec 31-5N-1W
Remarks --
ENTRY E2
Recording reference Book 290, Page 188 Recorded 1995-11-20
Instrument Personal Representative's Deed Executed see remarks
Grantor Ida L. Radcliffe
Grantee Ibarra, Gregor T.
Interest conveyed 1/1 of the interest abstracted
Land described NE/4 Sec 31-5N-1W
Remarks Undated in the body; acknowledged before a notary on September 19, 1995, which date is taken as the date of execution.
ENTRY E3
Recording reference Book 296, Page 275 Recorded 1995-12-02
Instrument Correction Deed Executed 1995-07-19
Grantor Bellweather, Priya M.
Grantee Ida L. Radcliffe
Interest conveyed 1/1 of the interest abstracted
Land described NE/4 Sec 31-5N-1W
Remarks Corrects the land description in the instrument recorded at Book 285, Page 112.
ENTRY E4
Recording reference Book 298, Page 325 Recorded 1998-10-01Abridged — the file continues.
The outcomeWhat a good result looks like
An ordered chain a person checks instead of a stack a person sorts: one row per abstract entry with its class and both parties, the conveyances in ownership order, who holds today, and every break carrying its type AND the two instruments it sits between -- so the curative work is a list rather than a re-examination. CLEAN is not a warranty of title; it is the statement that the instruments IN THIS ABSTRACT connect end to end.
And when it cannot
A false CLEAN -- a break certified away, so somebody buys, leases or pays on a chain with a hole in it and the hole surfaces when the money is already out the door. On this corpus the model shipped 0 of those in 28 opportunities and the FREE FLOOR shipped 2 (7.1 pct). The opposite direction is the floor's real problem: 10 false BROKEN out of 32 clean abstracts (31.2 pct), every one an identity recital it cannot read -- a clean chain sent for curative work, an affidavit chased, a quitclaim bought from somebody who never needed to sign. The model shipped 0 of those too. Both directions are counted on their own denominators and never averaged.
Where it fitsWhat did work
Every line below is a measured result from this kit's own runs, with the figure that supports it. The headline above is not softened by any of them.
- Abstracts that arrive as fielded pages in ONE house style, from one abstractor or one county's continuation certificates, with no identity recitals to read — the free rules floor alone
It reads 355 of 355 entries on six of the seven fields, puts the right instruments in the chain on 60 of 60 abstracts, and gets 26 of the 28 breaks -- for $0.00, with no key and no network. The engine behind it is the same engine the paid arm is rechecked with, so the ordering, the fractions and the break precedence are identical. - Chains where parties change name mid-chain -- marriages, entity conversions, scrivener's errors corrected by a later recital — the model, and read the RAW arm
10 of 10 identity recitals against the floor's 0 of 10, and that single input is worth 10 false BROKEN verdicts: the floor reports a grantor_gap between two entries that connect perfectly on every abstract that carries one. It is 31.2 pct of the clean half of this corpus, and each one is an affidavit chased or a quitclaim bought from somebody who never needed to sign. - Execution dates buried in the remarks -- 'executed the 2nd day of June, 1998', or an acknowledgement the standard says fixes the date — the model
The floor loses all 21 of those dates and therefore gets only 2 of the 4 out_of_sequence abstracts, because the engine deliberately SKIPS the comparison when either date is unknown rather than printing a parser's blind spot as a defect in somebody's title. The model resolved all 21 and got 4 of 4. - Scanned abstracts in a dozen county house styles, or any stack this generator did not write — measure both arms again before believing anything on this page
The floor's six 100 pct columns are partly a measure of the generator: its patterns were written from the fixed columns this corpus prints. On real abstracts both arms would do worse and the model's lead would most likely grow -- but the six columns where the floor beats the model today would probably be the first thing to go, and nothing here can tell you that.
At a glanceHow the whole thing runs
Run once, for real, on 2026-08-31. Every figure on these pages was captured from that run — nothing is written from intent.
14 steps, grouped by the question that sends you to them rather than by build order. Each tile carries the one figure that step is about, and opens the page behind it.
Should you use this?What you bring, where it stops, and when not to use it
Before you commit an afternoon to this, these are the answers that decide it. Each one is rendered from the record it lives in — and links the page that holds it in full.
| What do I have to bring? | Drop your own abstracts as .txt files into data/corpus/ and your own standard into data/rulebook.json and data/rulebook.md -- the break types, their precedence, the label-to-class table, the ordering rule and the dating rule. ⚠︎ A REAL ABSTRACT OF TITLE IS A DOSSIER ON A PRIVATE PERSON'S PROPERTY AND IT REACHES YOUR CONFIGURED PROVIDER VERBATIM. Corpus lens → |
| When is this the wrong choice? | Avoid: Paying per abstract for a job a regex and a chain engine already do. And do not read its 100 pct columns as portable: those regexes match the column positions this generator writes. That is the case against the best-fitting scenario (“Abstracts that arrive as fielded pages in ONE house style, from one abstractor or one county's continuation certificates, with no identity recitals to read”). 4 scenarios scored in all, each with its own. Eval lens → |
| Where does it stop working? | A REAL ABSTRACT. This corpus is templated -- small phrase pools, one layout, fixed column positions -- and the free floor's regexes were written from the columns THIS generator writes. 6 recorded failure modes, each from a run rather than a guess. Corpus lens → |
| What was never verified? | WHETHER THE MODEL BEATS THE FLOOR ON THE READING AT ALL. It does not, here: the floor is 355 of 355 on class, grantor, grantee, interest, recorded-on and recites, and the model is 348, 348, 348, 343, 348 and 347 over 348 reported rows. 9 items this kit says it could not check. Eval lens → |
| Can I run this on a model I control? | Yes — any OpenAI-compatible endpoint, including one on your own hardware. The shipped adapter takes its host from BASE_URL and its model from MODEL, so nothing in src/ changes. The published figures come from 1 model on the fast tier, one provider, one key. Prompt lens → |
| And if it fits — what do I stand up? | 7 artifacts with a stated home and a stated egress, and 3 decisions each with what you provision past its ceiling — plus what was not measured. That is the next page, not this one. step 14 — Run it in your environment → |
Not asked of this kit — 2 questions: clone (a fresh clone of this kit runs with nothing fetched); judge (nothing here is graded by a model).
Last verified 2026-08-31 — r001-title-chain. Every figure on these pages was captured from that run.
Run itHow this reaches your data
Every result on this page was produced by pure code over checked-in files, with no API key — which is why you can read the numbers before anyone spends anything.
Run this on your own data
- The pipeline, its eval harness and the runs behind every numberdeployed inside your environment, on your own model endpoints, against your own documents.
- The corpus above is the shape, not the limitit is a folder swap, and there is no database to migrate.
Checked before this shipped — PARTLY RE-MEASURED IN THIS CAPTURE PASS, and the part that was not is named rather than assumed. RE-RUN HERE, 2026-08-31, on this machine with no network call: python3 -m evals.check_labels re-graded the shipped key with its own normaliser, parser and chain engine and printed 'KEY CLEAN -- 60 tracts, 355 entries, 28 breaks, 10 alias pairs, 14 planted cases'. NOT re-run in this pass: tools/build_corpus.py (the byte-for-byte rebuild at seed 20260831), evals/run.py --floor rules, and python3 -m src.app -- this pass writes only the app repo's spec file and does not execute the kit's writers or bind a port. What is verifiable from the tree without running anything: requirements.txt names NOTHING (Python standard library end to end, no vendor SDK, no pip install), the 60 abstracts, data/gold.jsonl, data/rulebook.json, data/rulebook.md and BOTH recorded results -- eval-r001-title-chain.json and eval-b000-title-chain-rules.json, plus cache-r001-title-chain.jsonl carrying 59 banked replies -- all ship in the repo, so the whole product renders and the scored run replays before anyone decides to spend.



