Home › Use Cases › Which participants' clearance documents are complete, expiring or missing before an event
Use caseUC0471
🧪 Use-case kit · runnable

Which participants' clearance documents are complete, expiring or missing before an event

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

An event organiser's participation register carries a clearance file for every participant, and before the event every one of them has to be checked against the register's required set and the event's own dates. The file a records desk gets prints the required set, every document it holds with its two dates, what the last sweep said -- and the desks' notes, which is where a withdrawn document, a replacement lodged after the fact, a document supplied against a blank row, a participant re-registered into another role and a rescheduled event window all actually live. The desk reads the notes, works out which items are still covered on the day the event ends, counts the days against a declared notice band, and writes down what changed since last week. Opening one participant clearance file, reading the required set for that role and discipline, reading every note for a withdrawn, replaced or supplied document, for a role change that grows the required set and for a rescheduling that moves the event window, then counting the days from every held document's valid-to date to the window end and to the 45-day notice band, and writing down what changed since the previous sweep.

Audience

The participation registration and records desks that sweep the clearance register ahead of an event -- and the event's named clearance officer, who needs to know which files are complete, which have a document about to lapse and which are missing one, and which of those are new since the last sweep. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual participant clearance files

The corpus is 64 participant clearance files, 0.16 MB (txt 64). There is no public corpus of participant clearance files, and there could not be: the material is an organiser's own register, and a real one would carry medical documents about named people. So it is generated -- and generating it is what makes it publishable at all, because the generator can build a register that records DOCUMENTS and never FINDINGS. The corpus is built to be hard in one specific way: 32 of the 64 files are decidable from the printed columns alone and 32 turn on a desk note, ALL 64 carry at least one decoy note -- another event's rescheduling, another participant's registration -- and the sixteen case families sit across both halves. The generator's own cost is published rather than hidden: a regex tuned to its note libraries reaches 61 of 64, 22 files above the floor of record, and that gap is what synthetic phrasing is worth.

The corpus

  • The 64 participant clearance filesgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromdata/SOURCES.md states where every byte came from AND what the generator costs the measurement. Every participant, event, venue, discipline, clearance item, document, issuing practice and note is invented, and MCR-2026 is an invented in-house procedure of a fictional event organiser. There is no personal data in this corpus at all -- there are no people in it: a participant is an id, a desk speaks, nobody signs. No sanctioning body, governing body, league, federation, anti-doping organisation, regulator, statute, rule number or form is named anywhere, and evals/check_labels.py sweeps every generated byte against a 44-term banned ENTITY vocabulary on every run and reports 0.

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

One participant clearance file, as the model receives itPCF-0001.txt · 1 of 64
EVENT PARTICIPATION CLEARANCE FILE

FILE                PCF-0001
PARTICIPANT         PT-4101
ROLE                MEDIA
DISCIPLINE          TRACK
EVENT               EV-2026-101
EVENT WINDOW START  2026-11-02
EVENT WINDOW END    2026-11-04
NOTICE BAND DAYS    45
REGISTER            MCR-2026 as of 2026-08-01
RUN                 R-07 on 2026-09-14
PREVIOUS RUN        R-06 on 2026-09-07
PREPARED            2026-09-14

REQUIRED SET AS STATED IN THE PARTICIPATION REGISTER
  The register requires these clearance items of a MEDIA participant in the TRACK discipline at
  this event: NONE. An item carried on this file outside that set is held for reference and is
  not required for this event. A clearance item is a document category; this file records that
  the document exists and the two dates it is valid between, and nothing whatever about what it
  says.

ITEMS ON FILE
  ITEM       DOCUMENT   ISSUED      VALID TO    PRACTICE   IN SET
  CL-BLOOD   DC-70002   2024-10-13  2026-10-13  PR-201     NO
  CL-DENTAL  DC-70003   2025-11-23  2026-11-23  PR-202     NO
  CL-ORTHO   DC-70004   2025-03-14  2027-03-14  PR-203     NO
  CL-CARDIO  NONE       NONE        NONE        NONE       NO

LAST RUN
  STATUS          NONE
  ITEMS RAISED    NONE
  NOTE            this file was not read on any previous run

NOTES
  Records desk, 2026-09-08: the document DC-70002 held against CL-BLOOD was superseded and has
     not been replaced.
  Records desk, 2026-09-08: document DC-70002 on item CL-BLOOD was superseded by DC-83001,
     valid to 2026-10-13, which is the document this file reads.
  Registration desk, 2026-09-08: this file records documents and dates only; participation is
     decided and signed by the clearance officer of record.

NOTICE BAND (DECLARED STAND-IN)

Abridged — the file continues.

The outcomeWhat a good result looks like

One participant clearance file in, one register row out: the required set, the required items with no standing document, the valid-to date of every held required item, the event window end after the notes have moved it, then the exception set, one of five statuses under MCR-2026, the rule that decided it, the items raised, whether a renewal notice was suppressed, and the four change fields against the previous run.

And when it cannot

And what it does when it cannot. On the scored run 64 of 64 replies parsed, 0 stopped at the 1,000-token ceiling, 0 were closed by the reply stop and no call failed. The ONE file of 64 it gets wrong is named in the kit README with what it answered and why: PCF-0019, where it read a required item as having no standing document because the document's ISSUE date falls after the run date. ⚠︎ AND THE RAW COLUMN IS PUBLISHED BESIDE THE RECHECKED ONE: asked for its own exception set and status as well as the four readings, the same 64 replies score 53 rather than 63. The 10-file gap is arithmetic, not reading -- src/recheck.py re-derives it in date code, for every arm, for nothing.

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 participation register records withdrawals, replacements, supplied documents, role changes and rescheduled windows as STRUCTURED FIELDS on the export — the free printed-columns floor, and do not buy a call at all
    32 of 64 files for $0.00, and on the 32 files the columns decide it gets 32 against the paid call's 31.
  • Those changes arrive as free text -- a desk note, an email pasted into the file, a comment column — the paid call
    This is the whole product. On the 32 files where a sentence decides a reading the paid arm is 32 and the floor of record 16; on the 5 rescheduled-event files 5 against 2, on the 4 role_changed files 4 against 1 and on the 5 supplied_document files 5 against 1.
  • You need the register to be defensible about what it will NOT say rather than accurate about what it does — either arm, with the station
    clearance_decided, fitness_judged, medical_opinion and person_named are 0 on every committed arm, free ones included, and 0 on all 16 attacked calls -- because the answer contract has no field for any of them and src/prompt.py fails the BUILD if one is added. raised_a_suppressed_renewal is 0 for the same kind of reason: M-1 beats M-4 in the rulebook and no reply can reach the ladder.

And where nothing here is good enough:

  • Somebody can put a sentence into the file — neither arm, unchanged, and read could_not_verify first
    The cap holds: 0 clearance decisions, 0 fitness scores, 0 medical readings, 0 people named and 0 invented fields across all 16 attacked calls, with 4 controls moving nothing either.

At a glanceHow the whole thing runs

98%whole file pct
1,441 msp50, end to end
$1.26per 1,000 participant clearance files · the fast tier

Run once, for real, on 2026-09-14. 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 with your own clearance files in the same block shape -- header with the event window and the notice band, the required set, the printed item rows with their DOCUMENT, ISSUED, VALID TO and IN SET columns, the LAST RUN block, the notes -- and write one line per file into data/gold.jsonl with items_required, items_unheld, valid_to and window_end. ⚠︎ EVERY PERCENTAGE ON THIS PAGE STOPS APPLYING THE MOMENT YOU DO. Corpus lens →
When is this the wrong choice?Avoid: Paying per participant for a reading your export already gives you. That is the case against the best-fitting scenario (“Your participation register records withdrawals, replacements, supplied documents, role changes and rescheduled windows as STRUCTURED FIELDS on the export”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A FILE CARRYING MORE THAN ONE PRIOR RUN. The LAST RUN block holds exactly one status and one raised list, and all four change fields are set arithmetic against it. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?NO SECOND SCORED RUN. One was fired, so the run-to-run spread on this corpus is unknown and no confidence interval is claimed anywhere on this page. 8 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 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-14 — r001-clearance-tracking. 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 renders the whole board, all five committed run records and all four free floors, drives the floors live at $0.00 and re-scores every committed run offline. pip install -r requirements.txt installs nothing -- the kit is standard library only. python3 tools/build_corpus.py regenerates all 64 files byte-identically from SEED 20260914, verified under PYTHONHASHSEED 0 and 1 at 0 differences, and --check-fillers re-scores the four free arms from them without a network. The only thing a key buys is a new scored run; the committed one re-scores for nothing.

A living map of modern AI — kept current every morning