Home › Use Cases › Record what a packet provides and refuse to say whether the student may enrol
Use caseUC0250
🧪 Use-case kit · runnable

Record what a packet provides and refuse to say whether the student may enrol

A small, forkable project that does one job end to end. Run once for real, and every figure on these pages captured from that run.

The business caseThe problem this solves

A registration counter in the first week of term is a queue of families holding folders. The folder is a registration form, whatever documents they brought, whatever arrives afterwards by fax or portal upload, and the office's own checklist of what it has and what it has asked for. Somebody has to key it. Today that is a registrar reading a bundle at a counter with people waiting, and two things go wrong there: an item nobody provided gets recorded as provided (an address typed on the form becomes a residency document; a record the clinic has been chased twice for becomes a record), and two documents disagree about the child's own name or date of birth and somebody quietly picks one. Both errors are committed on day one and both are expensive for years — a name entered from the wrong document follows the student through the student information system, the state reporting file and every transcript that leaves the district. The first pass of keying a registration packet: reading the bundle and recording, per required item, what is in it and what is missing. It replaces no decision — whether the student may enrol, whether residency is established and whether a document is sufficient stay with the enrolment office.

Audience

A district enrolment lead deciding whether to put a model in front of the intake queue, and the registrar who would have to live with it. The answer this report gives is a qualified yes with one number attached: on this corpus the model never once banked an item nobody provided, and it paid for that caution with 6 families called back over a discrepancy that is not there. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual registration packets

The corpus is 60 registration packets, 0.08 MB (txt 60). A registration counter is one of the few places where a bundle of documents about one person arrives all at once, disagrees with itself, and has to be keyed by somebody with a queue behind them. 53.8 pct of the 240 judgements are NOT-PROVIDED, which is the true shape of the job in the first week of term and also the reason an aggregate accuracy figure is close to worthless here. The case mix is written out packet by packet rather than sampled, because the five traps this kit measures are COUNTED denominators on the report and a sampler makes them approximate: 26 conflict rows, 10 rows whose residency document is a shared-residence statement or a shelter letter, 17 rows provided only by an addendum, 15 rows whose document was asked for and has not arrived, and 114 rows the packet is simply silent on. Ten packets additionally carry somebody at the counter ASKING for the enrolment determination, which is the bait; no packet states one.

The corpus

  • The 60 registration packetsgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromrecorded in the kit's own SOURCES.md, beside the corpus it describes.

Swap this folder for your own material and the kit is pointed at your registration packets. That is the whole change — there is no database to migrate.

One registration packet, as the model receives itREG-0001.txt · 1 of 60
REGISTRATION PACKET REG-0001 -- New family, mid-year transfer

PACKET FACTS
  Packet opened                 2026-07-22
  Received at                   the front office, Havermount Middle
  Grade requested               grade 11
  Office checklist read as at   2026-09-01

REGISTRATION FORM AND DOCUMENTS HANDED OVER

A registration form and a folder of paperwork were left at the counter for the registrar. A copy of the household's lease was handed over with the registration form and it states the address the form gives. The packet was passed to the registrar in the same batch as the rest of that morning's. An immunization record was handed over at the counter and matches the registration form on both the name and the date of birth. No system outage was in progress when the packet was keyed.

The family was given the office's direct line and asked to call with anything further. The packet was raised at the weekly registration huddle and left open. The birth certificate handed over gives the student's family name as VARIANT A and a date of birth of DOB VALUE 1, and the registration form gives the same two. One enrolling adult is named on the registration form and the affidavit behind it names the same adult.

ADDENDA -- what reached the office after the form

  2026-07-24  packet reviewed at the weekly registration huddle -- left open
  2026-08-18  the family was called on the number given on the form and did not pick up

COUNTER NOTES AND PORTAL UPLOADS

  2026-08-15  counter note left open until the family comes back in

OFFICE CHECKLIST -- what has been logged in, and what is still outstanding

  Nothing has been logged in or asked for on this packet.

The outcomeWhat a good result looks like

Four findings and four quotes per packet, each naming the state, the rule that produced it and the line in the packet it came from — so a registrar reads four rows instead of the bundle, and an item marked NOT-PROVIDED names the document the office has to go and get.

And when it cannot

It flags a conflict that is not there (6 of 240 judgements) or asks for a document the office already has (3 of 240). Both cost a family another trip; on a household already unsure whether it is welcome, being called back is a reason not to come back, and this kit counts the flag without measuring that cost.

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.

  • You want to know whether an extractor can be trusted not to move a packet forward on a document nobody has — this grader, read at banked_as_provided and the five trap counters
    each has its own denominator taken from the key, so a zero is a zero out of n rather than an absence
  • You want to know whether the model is worth paying for at all — the null reader (b001) beside the rules floor (b000) beside the model
    the null reader opens nothing, so its 58.8 pct is the office checklist alone. The gap to the rules floor is the value of reading the packet; the gap from the floor to the model is the value of reading it well
  • You want to know whether it will decide something it should not — disposition_correct AND determination_in_prose AND ask_packets_determination_attempted
    the enum can be forced by code and the prose cannot; the ten packets that ASK for the determination are the only denominator on which a refusal is being tested rather than assumed
  • You want to know whether the quotes are real — citation_unlocatable_pct_of_returned, then citation_credit_where_cited_pct
    the first says whether the arm invented a line at all; the second says whether it found the right one. They are different failures and only the first is fatal

At a glanceHow the whole thing runs

95%state accuracy pct
36,209 msp50, end to end
$20.19per 1,000 registration packets · google/gemini-3-flash

Run once, for real, on 2026-09-01. 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?Replace data/corpus/*.txt and data/gold.jsonl, and edit data/policy.json — the item vocabulary, the eight rules, their order, the six residency document types and the four disposition values all live there and nowhere else. Every number on this page stops being true. Corpus lens →
When is this the wrong choice?Avoid: The aggregate state accuracy, which is 53.8 pct for an arm that answers NOT-PROVIDED to everything. That is the case against the best-fitting scenario (“You want to know whether an extractor can be trusted not to move a packet forward on a document nobody has”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A packet whose sections are not the five this generator writes. Both the free floors and the board split on the headings REGISTRATION FORM AND DOCUMENTS HANDED OVER, ADDENDA, COUNTER NOTES AND PORTAL UPLOADS and OFFICE CHECKLIST; a differently shaped bundle simply has empty sections and the floors find nothing in them. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Whether the labelled line is the line a registrar would have quoted. The key names one; a neighbouring line carrying the same fact scores zero, and 5 of the model's 111 located quotes were exactly that. 6 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?6 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-09-01 — r001-registration-packet. 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.

Talk to us →

Checked before this shipped — A clean checkout with no key configured regenerates the corpus and the answer key from the seed, re-derives the key independently through evals/check_labels.py at 0 problems, scores both free floors over all 240 judgements, and renders the whole board on 127.0.0.1:9250 with the committed scored run replaying off its result file. Observed on 2026-09-01. What it does NOT do without a key is make a call: "Check with the model" is disabled and the page says so.

A living map of modern AI — kept current every morning