kerfmaster pin list · The spec — what we build to
recordStates what the code does today. Auditable against the code — this is the only type that can go stale.
Content last changed 2026-08-13 — computed from the item itself, not typed.
Contract — design stage
This contract describes the code as it runs today.
takes vector ?
makes contours ?
fails if A keeper tab treated as a slug tab; a washer count typed instead of computed; tie holes that leave Aristide's zones silently.
Contract last changed 2026-08-07 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.
mvt_sheet.py → viewer/mvt/sheet/mvt_project.dxf (700 entities, 9 named layers) + sheet.png. Sheet 31.98 × 48.01 in — fits 4×8 stock, inside the bed (this sheet's history: 46.91 × 58.06 first cut, 56.06 tall after the washer-pocket lesson, 51.32 after his photo of 2026-08-07, 48.01 after the 180-flip ruling of 2026-08-10; placement below). Everything fitted from true Béziers; worst deviation 0.00141 in, worst kink 0.029°.
Band and bracket at design position, their relation untouched — that relation IS the template. Slots widened in place per [[mvt-cut-list]]; with Aristide's four tie dots now correctly identified as tie holes rather than slots, the true slot count is 51, of which 8 sit under the 0.40 edge rule (worst 0.146) — yesterday's “4 break out of the bracket” were these dots, never slots.
Two rulings shape these, both Aristide 2026-08-07. Size: the smallest centre-pierceable hole that still passes the 2.5 mm zip-tie strap — max(0.110 strap diagonal, materials.json min_pierce_hole, assumed 0.125 pending [[Q28]]) = 1/8 in; all eight pierce at centre and are listed. (The first cut's 0.375, sized for pierce comfort, was itself the placement problem.) Orientation: a pair OPPOSES across the shared cut line — minimum span alone skewed the top pair oblique where the peak narrows, so opposition is now built in: a candidate is a point on the bracket's edge, and the two holes sit either side of it along its normal, each sunk hole-radius + clearance into its own metal, so the tie pulls square across the joint. Nearest valid candidate to his drawn spot wins. Result: pairs 1/2/4 opposed at the full 0.20 web; the top pair opposed at 0.15 — opposed-at-0.20 does not exist inside the peak's zone, and square at 0.15 beats oblique at 0.20 by his ruling. Spans 0.51–0.60 in. Zoom of the top pair: viewer/mvt/sheet/pair3_zoom.png.
Dimensions were illustrative in the file and are DERIVED: ID 0.219 = clearance for the working #10 screw (Q26 hardware still unnamed — the derivation re-runs when it is), OD 0.469 = ID + one material thickness of web each side. Count is an OUTPUT ([[placement-rulebook]] rule 4): the floor is consumed — stack math, ring sites 5 high, triangle sites 10 high at 0.125/washer, 3 sites each = 45 — plus 35 field spares because the customer in the field can change the offset dimensions (Aristide); then every region of enclosed waste is filled and the surplus is stocked for future jobs. This cut: 459 — 173 in the template's pockets, 20 in the ring-hole gap round the triangle, 266 in the gaps the layout encloses (including the icon cutouts' slugs) — 379 of them stock. (The 536/343 previously recorded here was the 51.32" sheet's count, stale since the 180-flip re-layout of 2026-08-10 — corrected 2026-08-13.)
Cut rules: centre slug no tab (drops clear; 0.219 is under the 0.300 pierce minimum, so pierce-at-centre and it is listed). Outer ring: 0.013 keeper tab, now in materials.json as MSO7,0.125.keeper_tab with provenance — a tab whose purpose is to KEEP a part under the drop-through size in the sheet, deliberately the opposite of a slug tab and thinner than slug small (0.018) because a person punches the washers out by hand.
The layout is his, by the [[placement-rulebook]] his examples taught. The triangle rides the ring's centre hole at the design relation (it already sits there in the artwork; 0.84 in clear of the ring metal) — the hole's slug was scrap, so carrying the plate costs zero envelope (rule 2). The pair meshes down into the template's top and the cloud sits upright above, its valley taking the ring (rule 3); the ring's x and the cloud's x are scanned jointly (32 spots, 0.30 gap, binary-searched descent) because the template's top edge is the design's own silhouette and both interlocks trade against each other — 5.35 in saved over an unmeshed bounding-box stack. Washers fill every waste region in the rulebook's order: interior pockets, other parts’ slugs, then the gaps the layout encloses (rule 1 and 4). Sheet history: 46.91 × 58.06 → 31.98 × 56.06 → 31.98 × 51.32. This is placement logic inside one job, not the nesting stage (PINLIST 13), which stays future.
Spec for the generator this instance trains: [[mvt-template-generator]]; the photo itself, incoming/1786118155_4007797_file.jpg, is a stored acceptance answer per rule 5.
2026-08-10: the sheet now carries the same truth as the cut file — the green band comes from derive_band() (never a trace of the drawn band), tie holes at 0.125" both sides are SEEDED at the drawn dots with the web ladder binding (Aristide 2026-08-13 — the 0.02" web the verbatim dots left was not intended; search restored, pairs 1/2/4 at 0.20, top pair at 0.15), and the top cloud lies FLIPPED 180 on the sheet: both orientations join the joint scan and the lower stack wins, worth 3.3" of height here.