kerfmaster pin list · UI / workflow decisions
recordmixedStates what the code does today. Auditable against the code — this is the only type that can go stale.
Content last changed 2026-09-20 — computed from the item itself, not typed.
BUILT 2026-09-20, one brick. THE RECORD: approach defaults (approach = lead-in + pierce, his glossary) per feature class (outer / inner / circle -- the start-defaults classes, one modal grammar), fields lead_length / shape (straight|radiused) / angle (deg off perpendicular) / lead_out; SPARSE PER FIELD -- saving one field to a scope never touches that scope's other fields, every field carries its own provenance ({v, source:{who, date, group?}}). RESOLUTION mirrors start defaults per FIELD: job > material > machine > shop > the Rev2 lead_in table seed; a typed per-feature override always outranks the lot. THE GROUP SAVE (his 'one better'): scope 'materials' + a picked list -- a BULK WRITE of the same sparse update to each picked material's own record, deliberately NOT a new scope tier, so resolution stays predictable and a later single-material save simply overwrites its row; provenance names the group it rode in with; picks validate against the Rev2 sheet so a typo can never invent a material. ONE MACHINERY: server._defaults_save carries start_defaults AND approach_defaults (run_startdefaults refactored onto it -- the start-point modal gains the same 'a group of materials...' option), client matPicker (family filter + thickness min/max + tick/untick shown; a TICKED row never hides under a filter) serves both modals. ENGINE: write_gcode_macrob(lead_defaults={cls: length}) -- consumed exactly like an operator per-feature lead_length (which outranks it), pierce-standoff still judged at the TABLE value (a default never relaxes a gate, aid-the-operator), lead source reads default:approach (full length) / rule:shortened-to-fit (honest shortening), None = byte-identical legacy; wired at every plan/post site (review, dragcheck, quote, single post, both nest posts, plassign batch, _pl_build part-list plans, plpost post_kw). Server doors GET/POST /api/jobs/