kerfmaster pin list · Preflight — how files come in
rulingmixedd10deferred d14A decision by Aristide or Jordan. True because it was decided; it can be superseded, but it cannot be stale.
Content last changed 2026-08-21 — computed from the item itself, not typed.
Contract — Intake stage
This contract states a decision, not an implementation.
takes customer-file
makes identified-file
fails if A file entering preprocessing that failed a check, or passed one we never ran.
Contract last changed 2026-08-06 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.
1 open question blocks this pin
⚠ 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.json → cadmaster/KNOWN_DEFECTS.md, not this page — the text below is generated from the register so the two can never disagree.
Raised by Aristide, 2026-08-01: "It needs to pass the test before we even submit it into the preprocessing for production. In the old Desktop publishing world they called it preflight?"
Yes — and it is exactly the right word to borrow. Preflight came out of prepress in the early 1990s (from the pilot's checklist), and it is a mature, proven idea: before a job goes anywhere near a press, an automated checker confirms the file actually contains everything needed to print it. The lineage is worth knowing because the problems rhyme with ours — Markzware FlightCheck, Enfocus PitStop, Adobe's own Preflight tool in Acrobat, and above all PDF/X (ISO 15930), a standard whose entire purpose is that a file either conforms or it does not. Missing fonts, missing images, wrong colour space, no bleed — caught at intake, not on the press.
Our press is a laser and our missing font is scale. Same shape of problem, same answer.
Preflight is a gate, not advice. A file that fails does not enter the pipeline in a degraded state, does not get a best guess applied, and does not get healed "as far as we can". It stops, and the customer is asked one clear question. Everything downstream — heal, QC, bridges, leads, tabs, cut order, nest, post — is allowed to assume the input is sane, because preflight is the thing that guarantees it.
This also protects us commercially. A scrapped sheet of stainless because somebody guessed the scale costs more than every preflight check we will ever run.
A binary pass/fail is wrong for this. Most real files are neither perfect nor unusable, and the middle case is where the customer learns something.
The preflight report is the comparison board (see Delivery), not a separate document — original art as the grey base layer, our reading of it on top, findings listed underneath. The customer sees what we saw. That is worth more than any wording.
Related: 14a delivery rules, 14b the scale gate, 14c the check list, 14d the uploader, 14e education.
⚑ Build state, 2026-08-21 (piece 3 of the customer-surface order, Aristide: “go”): the gate now RUNS as one flow — preflight.py. One entry point, preflight.run(), built to be called by the uploader (14d) when it exists; the CLI only renders the dict it returns (data in JSON, generator separate from presentation). The three outcomes are enforced as ruled: BLOCKED returns ONE customer question (blockers ranked; the rest ride in internal notes), PASS WITH NOTES lists everything noticed or to-be-changed, PASS says nothing. A BLOCKED file gets no estimate (14b: no scale, no quote). Measured: novi sign 0.06 s, TL-1016-82 (4,700 prims, splines) 1.4 s — inside 14d’s “seconds, while the customer is still on the page”.