The business caseThe problem this solves
An oil and gas lease runs for a primary term and then 'as long thereafter as' something keeps it alive. Once that term is over, a land department reviews each lease on a cadence and has to answer one question of the operations record: which of THIS lease's own savings clauses does each dated line engage, and on which part of the lease? The lease does not say it once. Four forms say the same ideas in different words and number them differently: oil run to tanks with no sale is production under a form that says 'produced' and is not under one that says 'produced and sold'; a built location is operations where the lease counts preparatory work and is not where it requires the bit to turn; a shut-in engages the clause only if that lease's own proviso is met and a tender follows to the depository in force on the tender date; a later line can withdraw an earlier one; a rider can divide the lease into parts. On this corpus 263 of 860 record lines decide a day, and 121 of those are dealt from a decoy family. a land analyst re-reading each lease past its primary term against the pumper's notes, the daily reports and the tender log, and typing into a lease-maintenance spreadsheet which clause the record 'shows' -- a spreadsheet that carries one column for 'production' whatever the lease's own form counts as production, and that cannot see a tender sent to the depository a ratification has since replaced.
Audience
a land analyst preparing a lease past its primary term for its periodic review, and the land manager who makes the calls this kit refuses to make. Every number on these pages came from one real run of this code, not from a vendor page.
The inputThe actual lease-periods
The corpus is 64 lease-periods, 0.58 MB (txt 64). There is no public corpus of oil and gas leases paired with the operations record and tender log kept against them after the primary term, and there will not be: the pairing is the operator's private half. So the corpus is invented end to end on four lease forms that say the same ideas in different words, and data/SOURCES.md records what the generator costs the measurement, including a free attack it publishes against itself: a template-aware reader that reads no lease words reaches 49-50 of 64 on the headline, which bounds what the lease reading is worth on this corpus at about 14 lease-periods.
The corpus
- The 64 lease-periodsgenerated 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 lease-periods. That is the whole change — there is no database to migrate.
Synthetic Record
----------------------------------------------------------------
Every field below is invented. This is a generated oil and gas lease file for an AI use-case
kit; it reproduces no real operator, lessor, bank, well, tract, lease or court. The land
department procedure is an ILLUSTRATIVE, OPERATOR-TUNABLE default, not any operator's procedure
and not a statute or a regulation.
Lease Caption
----------------------------------------------------------------
Lease reference : LH-0001
Lessor : the Duckworth mineral trust
Lessee : the Operator
Lease form : Form A, as executed
Lease dated : 2021-07-05
Net mineral acres : 160.00
Pooled unit : none recorded
Review period : 2026-01-22 through 2026-12-27
Lease Text
----------------------------------------------------------------
The operative paragraphs of the lease, numbered as executed. The paragraph numbers belong to
this form; another form numbers the same ideas differently.
1. Lessor leases to Lessee the lands described in the caption (the leased premises) for
the purpose of exploring for, drilling for and producing oil and gas.
2. This lease shall remain in force for a primary term ending 2024-07-03 and as long
thereafter as oil or gas is produced from the leased premises or from lands pooled
with them.
3. If, after the primary term, production ceases from any cause, this lease shall not
terminate if Lessee commences drilling or reworking operations within ninety (90)
days after the cessation, and it shall remain in force while those operations areAbridged — the file continues.
The outcomeWhat a good result looks like
per record line, the clause the lease's own words say it engages, on the right part of the lease -- 89 of 121 deciding family lines against the free floor's 72 (p = 0.0137) -- and, computed afterwards in code from that reading, the same uncovered days as the key on 43 of 64 lease-periods.
And when it cannot
a lease-period where nothing engages after the carried line returns every line as NOTHING and code then reports the whole uncovered stretch -- a real answer, scored as one. A line the reply omits is scored WRONG, never filled with a free NOTHING (0 missing lines on this run). And nothing in the pack ever says what the uncovered days mean for the lease: that is the land manager's call.
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.
- Your leases share one form, or your land department already keeps the form's rules in code — the free floor --
domain_roster, $0.00
Per form the call is not uniformly better: on Form A the floor gets 14 of 16 lease-periods exactly against the call's 7, and it wins oil to tanks, offset-well spuds and proper tenders outright. - Several lease forms say the same ideas in different words, with riders, ratifications and self-correcting reports — the call -- and buy it for the per-line reading, nothing else
89 of 121 deciding family lines against 72, p = 0.0137; workovers 6/6 against 1/6, preparatory work 10/11 against 6/11, tenders to a replaced bank 6/8 against 0/8. - You need both halves -- the tender reading and the roster — the call with the roster rule applied after it (not built here)
The floor's offset-well and depository-by-date rules are free and exact where they apply; the call's losses are concentrated exactly there.
And where nothing here is good enough:
- You want the pack to say whether the lease is held, has terminated or may be released — neither, and not this kit
There is no field in the answer contract for a status, and the land manager owns that call.
At a glanceHow the whole thing runs
Run once, for real, on 2026-09-24. 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? | tools/build_corpus.py writes data/corpus/*.txt, data/gold.jsonl and data/corpus-stats.json. The measured figures on this page do not transfer to your own leases. Corpus lens → |
| When is this the wrong choice? | Avoid: Do not use it where forms differ in what counts as operations or reworking -- it gets workovers 1 of 6. That is the case against the best-fitting scenario (“Your leases share one form, or your land department already keeps the form's rules in code”). 4 scenarios scored in all, each with its own. Eval lens → |
| Where does it stop working? | A lease on a fifth form whose operative words src/page.py does not recognise. It refuses loudly rather than defaulting a cessation allowance or a tender window -- but the model's accuracy on a form it has not seen is unmeasured. 6 recorded failure modes, each from a run rather than a guess. Corpus lens → |
| What was never verified? | Whether a second tier reproduces either the slice win or the losing cells. One tier, one run, one corpus. 7 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? | 5 artifacts with a stated home and a stated egress, and 5 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-09-24 — r001-lease-held. 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 — A clean checkout with no key configured renders the whole board, replays all 64 committed replies, computes the free floor of record live in pure Python and shows the answer key beside both. python3 evals/check_labels.py runs its 33 assertions and python3 -m evals.baseline regenerates every free arm, both offline and both at $0.00. What a clean checkout cannot do without a key is fire a new scored run: the read button on the board is disabled and says so in a plain sentence.








