kerfmaster pin list · Estimator & quoting
intentmixedd8d9What we want to build. Never claimed the present, so it cannot be stale — and must never be read as a description of the code.
Content last changed 2026-08-21 — computed from the item itself, not typed.
Contract — Report stage
This contract describes a stage we intend to build — it is NOT a description of the code.
takes gcodemachine-profile
makes delivery
fails if Time computed from cut length alone — acceleration is where naive estimators lose money.
Contract last changed 2026-08-06 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.
1 open question blocks this pin
⚠ Known defects
This item's subject has known defects in the code. Recorded and deliberately NOT fixed — recording a defect is not a licence to fix it. Source: cadmaster/defects.json → cadmaster/KNOWN_DEFECTS.md, not this page — the text below is generated from the register so the two can never disagree.
Cut length ÷ feed rate is the formula everyone uses and it is wrong in a specific, predictable direction.
A machine only reaches its nominal feed rate on a run long enough to accelerate into it. A part made of long straight cuts gets close. A part made of a hundred small features — letters, small holes, tight radii — spends its life accelerating and decelerating and never reaches feed rate at all. Same cut length, very different time.
The novi sign is exactly this case: 91 boundaries, mostly small lettering, 1,245 in of beam-on (1,233 contour + 12.5 of lead-in). Quoting it at nominal feed rate would be optimistic, and optimistic is the expensive direction.
We have the toolpath broken into its actual primitives, so we know the length of every individual move and the turn angle between consecutive moves. That is precisely the input an acceleration model needs. A conservative first pass: cap the achievable speed on each segment by both its own length and the corner angle at each end, then integrate. No new geometry work — it reads the program we already emit.
Do not ship a model in place of a measurement. The route with the least risk of being confidently wrong:
Standing rule applies: run the control first. The shop's own timed jobs are the control here, exactly as their production NC was the control for the cut-path work.
⚑ Build state, 2026-08-21: the conservative first pass is implemented in quote.py accel_cut_min() exactly as sketched above: corner cap v = feed·cos(turn/2) (straight-through keeps feed, a reversal stops, every pierce is a standing start), centripetal cap v = √(accel·r) on arcs, per-segment trapezoid integration. Direction verified with test rates: accel time ≥ naive on both programs, and the novi sign (small lettering) pays a larger penalty than the O0104 kit (large smooth shapes) — 4.7% vs 2.9% at the test numbers. UNCALIBRATED until the shop times a job (15e); the structure is the point, the constants are rows.