← back to pin list

4i. The named corpus — every file we hold, run every time, with the reason beside each number

kerfmaster pin list · Big capabilities

recordd20d21States what the code does today. Auditable against the code — this is the only type that can go stale.

Content last changed 2026-08-06 — computed from the item itself, not typed.

Contract — Cross-cutting stage

This contract describes the code as it runs today.

takes

makes

fails if A change to the healer, the reader or the poster landing with no corpus run beside it; an expectation promoted to `rule` with no reason written; a failing `rule` accepted with --record instead of answered.

Contract last changed 2026-08-06 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.

⚠ Known defects

This item's subject has known defects in the code. Recorded and deliberately NOT fixed — recording a defect is not a licence to fix it. Source: cadmaster/defects.jsoncadmaster/KNOWN_DEFECTS.md, not this page — the text below is generated from the register so the two can never disagree.

Every claim this project has made was checked by hand, once, against whichever file was in front of us at the time. That finds the bug you went looking for and nothing else. The healer's thresholds were tuned until four files passed — and then nothing ever re-ran those four files, so a threshold that moves for a fifth file goes unmeasured on the first three until a part comes off the bed wrong.

corpus.json names eleven files — nine DXFs, two Illustrator files — and for each one says what it is, what it is a test of, and what every stage produced. check_corpus.py runs them and reports PASS, CHANGED or FAIL per file. It exits non-zero when anything is outstanding.

Two kinds of expectation, and they are not interchangeable

This is the part that matters. Each recorded number carries a basis:

A suite that turns every historical number into a requirement stops you improving the healer. One that turns none of them into requirements tells you nothing. This one says which is which, out loud, per number. A rule value is never overwritten by --record — recording the actual over a requirement is precisely how a rule becomes a description of the bug, which is the move that put the pin list eighty places behind the code.

What it found on its first run

Three things, before it had been used for anything.

It caught that bug in itself, in the act. The seeding run used a --record that did overwrite rule values, and it quietly rewrote ex11's heal.jogs requirement from 0 to 1 — turning a hard FAIL into an expectation. Restored by hand, and --record now refuses.

Defect D21 — the jog gate reports a tangent break between two curves that are not joined. On ex11 three open chains end at one point; find_jogs treats list adjacency as continuity and calls the 85 degree meeting of two of them a fit-induced jog. The source turns 120 degrees there and it is a real drawn corner.

Defect D20 — the fidelity headline can be a sentinel. max_deviation returns its own not-found marker, 1e18, as if it were a distance, so the board prints 1e+21 thou in the PASS/FAIL banner. On ex11 the cause is benign — a 0.16 thou scrap of CAD dirt the healer is right to drop — and that is the point: the number cannot tell that apart from a lost contour.

What it also says out loud

ex3's units are a guess and are recorded as one. The file carries no $INSUNITS and spans 77.3 drawing units; 77.3 mm is an entirely ordinary part, and the only thing choosing inches is our under-200 default. That expectation is observed, with a note not to promote it without asking the customer. ex2 arrives with 31 topology flags (12 gaps, 12 dangling ends, 5 duplicate segments, 2 branch nodes). ex4 and ex5, both small parts, cannot meet the pierce standoff on most boundaries — 18 of 26 and 13 of 14 — which is the standoff rule working, not failing.

What it does not cover

The MVT file is read and fitted only. Everything downstream of its outline waits on D15 and D16, and a corpus that recorded those numbers would be recording a known-wrong answer as a baseline. gx-slat has no post stage either: it is bed description, and Jordan ruled on 2026-07-31 that slat support is never an input to any calculation.

One move came with it: unit detection left build_board.py for dxf_io.to_inches(). It is a pipeline stage, not a page, and build_board.py runs its whole pipeline at import — so nothing else could call it without rebuilding the site. The corpus now tests the same detection the boards run, rather than a second copy of the rule.

Run it: python3 check_corpus.py, or --list for what is in it and why.