kerfmaster pin list · The interface — recorded intent (build later)
recordStates what the code does today. Auditable against the code — this is the only type that can go stale.
Content last changed 2026-09-15 — computed from the item itself, not typed.
Built 2026-09-01 (Aristide 'F' — brick F of the approved execution plan). Jordan's ruling on the MetaCam Basic-tab menu (pin metacam-basic-tab-menu): automated or not, “all buttons like these need a home” — automation sets the default, the manual button is the operator's override. The healing pipeline already fits arcs, joins ends and drops micro segments on every file; brick F gives the operator the same moves by hand.
ENGINE heal_edit.py (suite test_healedit.py, 23 controls): marks(prims, kind, ...) — the five read-only lenses: Mark Open Polylines and Highlight Duplicate Segments DELEGATE to qc's own detectors (one detector per defect, no re-derivation); Mark Small Segments (typed length threshold; a whole small CLOSED contour — a tiny hole, or a micro circle riding as two semicircle arcs — is a FEATURE and never marks), Mark Non-Tangent Corners (turn angle at every welded degree-2 junction, travel-aligned tangents), Mark Large Radius (arcs at/over a typed radius). apply(prims, edits) — the three edits, each addressed by POINT (ids renumber; points are the identity), refusals raised as EditInvalid in the module's own words: Join closes the open gap nearest the click on the sketcher's line-flexible/arc-rigid rule (two lines meet at the midpoint, a line end moves to a rigid arc end, two arcs get an exact connector line — chain_contours' own move); Remove Small Segments drops every prim under the threshold (never a whole small closed feature) and closes each hole with the same join move; Fit Arc re-fits the maximal line run at the click into ONE true arc through the run's exact endpoints — a tangent straight segment absorbed by the run is given back by a shrink loop (the click names the CURVE, not its extent), a fully closed run becomes a CIRCLE as two semicircle arcs (the circle diet), and the gate is the FINAL arc's own distance to every vertex AND every segment midpoint (a square's corners all lie on its circumcircle — vertices alone would pass a fit the edges miss by their full sag; caught in the build). Replay semantics: strict=True (a newly posted edit) raises; strict=False (the pipeline replaying a saved list over changed geometry) records “skipped on replay: <the same words>” — never silent, never blocking.
SERVER — one geometry, every consumer: _apply_healedits(jdir, prims) replays the saved list after every fresh heal, wired into ALL NINE prim call sites in the same commit (run_pipeline, dragcheck, review, quote, post, postnest, deliver, delivernest, and run_partnest's REFERENCED-job heal — a part list packs the edited outlines too). GET /healmarks?kind= computes a lens on the edited prims (dragcheck pattern: read-only, nothing persisted, refusal = plain 400 in the engine's words) and returns the ruled threshold SEEDS (job tol, heal.JOG_DEG, tables.arc_center_max) so the UI never invents a number. GET/POST /healedits saves the whole list (the partlist pattern — a save replaces the list): a bad edit refuses as a plain 400 in the engine's own words BEFORE anything is saved; a good save re-runs the pipeline — the replay report persists beside the list, heal stage carries operator_edits/edits_applied (a skipped edit flags, warn never block), and the standing stale rule comes free: downstream judgments drop, O-numbers kept, deliveries marked replanned.
UI — a third dockable panel: “Heal / QC” joins Tools and Checks in the brick-11 panel system (tears off, docks either side, collapses, rides workspaces; layouts saved before brick F get the new panel backfilled at its ground-state slot rather than losing it). Lens buttons show the engine's count and draw dashed rings at the engine's own mark points; threshold inputs are unit-suffix fields seeded from the engine's response. Join and Fit Arc are ARMED CLICKS (crosshair, Escape disarms, a refusal keeps the mode armed so the operator can click a better spot); every recorded edit lists with its engine note and a per-edit remove; Clear all returns the pure automated heal. Honest note on-screen: marks are lenses, edits are recorded and replayed, an edit resets downstream stages.
Proven live over the public URL (app/verify_healqc.js, Playwright, 14 checks, scratch sketch fixture — nav209 untouched): the 20-thou gap marks and a real-mouse Join click closes it (QC clean, the live review DROPPED by the stale rule), a coarse 8-gon becomes a true 2.0000 in circle by Fit Arc and unfits when that edit is removed, Remove Small Segments takes a 70-thou chamfer, an impossible fit refuses 400 in the engine's words with the saved list untouched, a fresh page re-heals WITH the edits, Clear all brings the gap flag honestly back, and a part-list job refuses the lenses in honest words. Suites: test_healedit 23 (new) + test_robust 50 / test_warns 17 / test_sketch 21 / test_tooling_doc 37 / test_rules 11 / test_nc_warn 12 / test_drag 13 / test_dragcheck 15 / test_nestseq 12 / test_part_list 24 / test_customer 26.
Honest limits: the three edits are the ones with proven engine moves — the corner-treatment block (Chamfer, Fillet, weld-prep cuts) and the spline/3D blocks stay recorded reference (record, don't build); an edit list replays by point, so a drastic geometry change (sketch re-edit) may skip edits — reported in words on the panel, never silent; 'by whom' awaits operator accounts.
Drag-to-snap (2026-09-10): the loose-end drag is a recorded heal edit like every other -- op snap_end, addressed by point, replayed on every re-heal, removable per row. The curve is never bent: line direction / arc circle are the carrier. Band-select (segments + anchor points, Illustrator style) is the committed next build.