← back to pin list

15. The estimator — quote from the real program, not from a guess

kerfmaster pin list · Estimator & quoting

intentmixedWhat 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 gcodesheet-layoutmaterial-table

makes delivery

fails if A quote from a guess when the real toolpath was available; a firm quote given at fast-estimate confidence.

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

Requested by Aristide, 2026-08-01: "We need to develop an estimator tool. To assist inside sales in making correct quotes."

Why we are better placed than any off-the-shelf estimator

Every estimator we have seen quotes from an approximation: perimeter length × a feed rate, plus a pierce count, plus a fudge factor. They approximate because they do not have the program. We do. By the time the pipeline finishes we know the real cut length, the real pierce count, the real rapid travel, and — once nesting lands (item 3) — the real sheet yield.

Measured on the novi sign right now, from the posted production program:

Those are not estimates. They are counted out of the file the machine will run. That is the whole edge, and it already exists as a by-product of the cutting work — the estimator is mostly a matter of attaching rates to numbers we compute anyway.

What is missing

The rates. Feed rates, pierce times, machine hourly cost, sheet cost — all shop knowledge, all Jordan's and Aristide's, none of it inferable from geometry. See 15e; it is the blocker for the whole section, exactly as scale is the blocker for vector input.

Two rules that shape everything below

  1. Show the working. A single number that turns out wrong teaches nobody. A quote comes out as a breakdown — machine time, material, gas, handling, secondary ops — so sales can see which assumption moved and the table can be corrected when the shop reports back.
  2. Never quote low. Where an input is uncertain the estimate rounds toward cost, and the uncertainty is stated. Same discipline as the tab table: round up when unsure, because the asymmetric error is the expensive one.

Related: 15a cost model, 15b machine time, 15c material and yield, 15d fast vs firm, 15e what we need from the shop.

⚑ Build state, 2026-08-21 (first piece of the customer-surface order Aristide agreed, 7g): quote.py is wired — the COUNTED half (beam-on incl. leads, pierce count, rapid travel, segment/corner profile, exact arc lengths r·sweep out of the posted NC via the audit's own parser) and the PRICED half (every 15a line item priced against rates.json through tables.rate(), or reporting the exact rows it waits on). Validated against this pin's own novi numbers: 91 pierces exact; beam-on 1245.2 vs the 1245.4 recorded 2026-08-01 (the program was re-posted since with the micro-segment cleanup, which moves leads — 0.016% apart); rapid 278.1 vs 295.7 for the same reason. O0104 demo kit: 66 boundaries, beam-on 692.0 in, rapid 467.9 in, 42 tabs. With the table all-null (as shipped) the run prints a 13-row BLOCKED list — which IS Jordan's worksheet, by name.

⚑ 2026-08-21, seed pass (Aristide: “just for fun and clarity, put seed data in... when Jordan gives you the data, you override it”): every rate row now carries a SEED value, provenance strength assumed, who “Claude (seed)” — plausible magnitudes so the money flows end-to-end, NOT the shop's numbers. The all-null state described above is history, kept for the record. With seeds in: 11 of 11 line items price on the demo kit (O0104: cut 6.97 min accel-model, material $75 at the seeded ‘charged’ remnant policy), and the daisy approval sheet shows an indicative figure whose shop sheet carries the warning “rate provenance feeding this figure: assumed”. Jordan's worksheet rows overwrite seeds field by field; a non-measured rate can never pass silently as the shop's number. The 13 worksheet rows are still OWED — seeds demonstrate the flow, they answer nothing.