← back to pin list

Manual nest adjustments — the operator's move is applied, then audited

kerfmaster pin list · Big capabilities

recordfixed d36States what the code does today. Auditable against the code — this is the only type that can go stale.

Content last changed 2026-08-20 — computed from the item itself, not typed.

⚠ Known defects

This item's subject has a known defect in the code. Source: cadmaster/defects.jsoncadmaster/KNOWN_DEFECTS.md, not this page — the text below is generated from the register so the two can never disagree.

What the code does today (2026-08-18): split_parts.py <src> <label> [w] [h] [material] [margin|-] [moves.json]. The moves file names parts (p001) and gives the target lower-left of each part's outline bbox in nest coordinates; rotation and sheet membership stay as packed; keys starting _ are comments. Moves land after nest_y_first and before audit_clearance, so min_part_gap_in/min_lead_clear_in measure the moved nest, and stats.manual_moves records from→to per part. nest_extent_in (outline extents per sheet) was added beside it — physical edge distance is that plus the job's G52.

Why margin became a parameter: the packer's 0.5" baked margin sat ON TOP of the post-time G52X.2Y.2 (materials.json: the shift is per-job, applied at post, never baked into DXF coordinates) — 0.7" physical where the shop runs 0.2. Jordan's -86 ring move only fits the strip above the grid in true part coords; at margin 0 the physical edge is exactly the shop's G52 0.2. The two smallest rings go up top by his layout — smallest-up-top is what buys top-edge clearance; measured 0.161" physical on the taller ring, stated in the delivery.

This is the first operator-adjustment loop of the eventual interface (drag a part, the audit re-scores live) — built as data in JSON + generator, per the build rule, not as UI.

Moves are binding on rebuilds (2026-08-20, D36): the ac2a0af full rebuild re-ran all four split60 builds without the moves argument and silently reverted Jordan's -86/-93 layouts to the auto pack — Aristide caught it on the printed O0086 packet ("why are these 2 rings not on top anymore?"). split_parts.main now refuses to run a label whose moves/<label>_moves.json exists unless the file is passed (moves='none' is the explicit opt-out), and a moves file can pin the margin its layout was built at (_margin — tl101686 pins 0.0), because packing at any other margin re-flows the base nest under the hand placements. Restored layouts verified against e9e4fcb/145e386 stats exactly; ring lead dots re-measured −41..−45°.