kerfmaster pin list · UI / workflow decisions
recordStates what the code does today. Auditable against the code — this is the only type that can go stale.
Content last changed 2026-09-03 — computed from the item itself, not typed.
Built 2026-09-03. Two engine moves, one part-list wiring.
emit._choose (both fixes in the start scorer): (1) the pierce clear-air tier (band) was capped at the standoff but UNROUNDED -- on any hole whose lead cannot reach the standoff (every 0.15" lead under the 0.2" target) the cap never engaged and raw fan-search float scatter decided a tie that belongs to the side rule; it now rounds to a thou like every neighbouring tier (a genuine clearance difference over a thou still outranks the side, exactly as the tier order intends). (2) A TRUE CIRCLE (closed all-arc loop, one centre and radius at the 0.001 healing standard -- the _congruence_sig test) takes the clock-position candidate OUTRIGHT: every wall start on a circle is congruent by rotational symmetry, so any measured difference between candidates is sampling noise (proven live: 0.149 vs 0.150 band on two of nine identical holes -- rounding alone still straddles a boundary). The one asymmetry a circle can carry is another boundary INSIDE it (a ring's island): there the full scoring stands. This IS the ruled start-point rule ('on a circle, at the start_clock position') made mechanical. Slots and odd shapes keep their flat-centred rule; outers keep safety-then-side.
Per-orientation part-list planning (the def-true-vs-part-by-part ruling taken at its word -- toolpath AFTER nest, per the orientation that cuts): _pl_build plans every allowed world orientation of each referenced part on its ROTATED geometry (exact quarter-turn transforms, the brick-34 lesson; forced-start overrides rotate with it), stores each plan rotated BACK to the base frame so the one placement transform (rotate then translate) reproduces it exactly; items carry lpts_by_rot, part_list_nest._variants takes a per-angle lead source (transposed frame maps variant angle a to world (-a)%%360), the pack audit and pl_spread hold each placement to its OWN orientation's envelope (keys (id, rot_deg)), the sheet-wide judge and the canvas pick the placement's plan (toolpath.plans_rot on partnest.json; plans stays the 0-deg form for old readers and the plans_match stale gate). Because the sheet program's emit call chooses starts on the PLACED geometry, reserved == drawn == posted for interior features; outers still take sheet approach context, judged by the audit as before.
Proven: test_drag 13->17 (three identical holes with different surroundings share ONE aim at the clock; ring keeps full scoring), test_part_list 24->28 (_variants queries the lead source per angle; the audit raises on a 180 placement's own envelope and passes the same layout without it); all 16 neighbouring suites green. Real Lathrup job re-packed AND re-spread through the server's own codepath: same 10 sheets / 97 placements / consolidation moves, audit gap +0.005 / edge +0.005 / lead +0.0576 over ruled (was +0.0165 -- consistent aims bought lead room); on the 62 flipped placements 621 of 690 boundaries read the 4:30 family in the SHEET frame (the rest are slots' flat-centred starts and outers). The same 21 pre-existing yellow tab_needless findings ride unchanged -- warn never block.
Honest limits: outers on a posted sheet may start where the approach context dictates (safety outranks the side rule -- the ruled tier order); non-circle smooth shapes still measure their candidates (only exact circles get the symmetry shortcut); the live app serves this after the next owner-turn restart.