← back to pin list4d. Start points & lead geometry
kerfmaster pin list · Big capabilities
recordmixedd3d5d6d7closed d18States what the code does today. Auditable against the code — this is the only type that can go stale.
Content last changed 2026-08-28 — computed from the item itself, not typed.
Contract — Starts & leads stage
This contract describes the code as it runs today.
takes healed-geometrytopologymachine-profile
makes boundaries-with-starts
fails if A start at a sharp point of the design; a start chosen before its lead, so the boundary ends up pierced with no lead; a corner inside the tab span, unreported.
Contract last changed 2026-08-06 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.
⚠ 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.
- D3 — Pierce standoff never scales with thickness: lead_min does not exist
Both boards call emit.MACHINE_DEFAULT.get("lead_min", 0.150). MACHINE_DEFAULT has no lead_min key, so every call gets the 0.150 literal. There is no path by which a thicker material raises the standoff.
Cost today: None on 1/8" steel. Silent under-standoff on anything thicker than 0.150".
Verified: 2026-08-03 at 36a55a3. 'lead_min' in emit.MACHINE_DEFAULT -> False; both call sites read. - D5 — 52 tight pierces are measured on every post and reach nobody
emit collects stats["pierce_tight"] -- 52 of 91 boundaries on novi, one dict each carrying the boundary id and its actual clearance -- and stats["start_compromised"]. Neither is read by any other module: grepping both names across every .py in cadmaster/ returns emit.py alone. No board HTML, no CSV, no print. viewer/index.html contains the word "pierce" zero times.
Cost today: The shop gets no warning on 52 of 91 pierces. This is the one entry with a live cost to a cut.
Verified: 2026-08-03 at 36a55a3. Re-posted novi: len(pierce_tight) == 56, len(pierce_clear) == 91. grep -c pierce viewer/index.html == 0. MEASURED 2026-08-04 (pierce_headroom.py), answering Jordan's question of whether routing could eliminate the tight pierces. Of 90 non-outer boundaries: 43 meet the 0.150" rule exactly (0.150 is the ceiling the lead rule imposes, not just the target -- measured max on the part is 150.1 thou), 1 misses with room available (BND40, 130.9 achieved vs 235.1 possible), and 46 CANNOT reach it by any start point, lead direction or lead length, because the best clearance anywhere inside those slugs is 76.8-123.9 thou, median 97.2. So the answer to Jordan is no, and the reason the report matters is exactly that: the 46 are not fixable and the shop has to be told about them. Separately, on 13 of the 46 we take 10-25 thou less than the part offers, which CLAUDE.md's 'point furthest from any edge' rule would recover. HEAT-MARK CLAIM RETRACTED, 2026-08-05. I wrote that the 46 impossible pierces mean "expect a heat mark" and offered them as a customer-side note. Aristide: "we ran this test, and see no heat mark issues at all." Checked instead of argued: pierce_headroom on the shop's own master (1785523984_296697_65733.NC) -- the program that was actually cut -- gives the SAME 46 impossible boundaries, and it achieves as low as 53.1 thou where ours achieve 81-120 on the equivalent slugs. Their validated program runs TIGHTER than ours at these boundaries and produced no marks. So the 46 are not a defect, not a warning and not a customer note; they are normal for a part with slugs this narrow, and CLAUDE.md already anticipates them ("where the standoff cannot be met... take the point furthest from any edge"). The only thing that belongs in the report is the GAP between what we achieve and what the slug allows -- 1 boundary that could reach target and does not, plus 13 leaving 10-25 thou unused. Their master has 4 in the first category and none of ours is worse than theirs. Physically these sit in the letters: 11 of the 13 are letter counters in one row at y=16.7, 0.83-1.36" across. RULING, Aristide 2026-08-05: "Pierce standoff does outrank the tipping point." Standoff was tier 3 of the start-point score but quantised into 25-thou bands (PIERCE_BAND), and the tipping arm was tier 4; on three letter counters all 18 start candidates fell in ONE band, so tipping decided outright and cost 8.5 thou of standoff. PIERCE_BAND is retired -- tier 3 now compares clearance raw, still capped at the standoff target, so tipping goes on deciding everywhere the rule is already met. In the same change _pick_lead searches lead ANGLE AND LENGTH for maximum clear air instead of placing the pierce at half the ray's clear distance; its docstring had claimed the furthest-from-any-edge point since it was written and the code did not do it (the half-chord is exactly right on a round hole and arbitrary on an asymmetric slug). MEASURED, novi re-posted, boundaries matched physically by bbox centre because ids are cut-order dependent: pierce_tight 56 -> 52; BND40 130.9 -> 150.0 thou, so the one boundary that could reach target and did not now reaches it; boundaries taking >10 thou less than their own slug offers 13 -> 4; total unused clearance across the impossible set 268.4 -> 99.6 thou. slug_tabs 70, slug_omitted 20, start_compromised 0 and short_leads 0 all unchanged. THE PRICE, and it is Jordan's number: risk.analyse goes 36/117.2/32.3/176.3 -> 31/159.3/45.1/269.8. Rapid crossings improve (36 -> 31) but total tipping moment rises 53%, because the tab is no longer pulled toward the slug's centroid. This narrows Jordan's 2026-07-31 ruling that minimising the tipping hazard is worth paying for, and he has not seen the figure. ALSO EXPOSED, not caused: one boundary went 150.0 -> 140.0 thou, i.e. below target while emit scored it at target. emit measures clearance against contours flattened at seg=32, which sits inside a true arc by up to 0.0048*r -- about 10 thou at r=2in -- so its clearance is optimistic on large arcs. Pre-existing; newly visible because the tie-break changed. - D6 — start_compromised is always empty, including when it should not be
A start point is marked compromised only when the longest primitive on the contour is shorter than the tab span. A tight-radius arc that is merely long enough passes as clean, so a tab centred on a 0.179" radius arc is recorded as fine. On novi, start_compromised == [] on all 91 boundaries.
Cost today: One unreported compromised start on novi; unknown on files we have not posted.
Verified: 2026-08-03 at 36a55a3. Re-posted novi: start_compromised == []. - D7 — One tab span exceeds the code's own corner threshold, unreported
emit.CORNER_DEG = 10.0 is the code's own definition of a real corner. Measured on a fresh post, 1 of 70 tab spans turns further than that: 10.58 degrees at BND 70, whose longest primitives are two 0.1794" radius arcs -- under the FLAT_ARC_R gate, so the contour offers no flat and the last-resort branch takes the longest primitive. The tab lands on a bend, and D6 is why nothing says so.
Cost today: One tab on the novi part sits on a bend rather than a flat.
Verified: Measured earlier this session at this same HEAD, with a control: re-posting with start_rule=False reproduces the pin's "before" figures exactly (53 of 70, median 71.15, worst 155.77 against the pinned 53 / 71 / 156), so the checker is sound. NOT re-run today -- git confirms 0ded91a..36a55a3 touched only CLAUDE.md, PINLIST.md and pinlist/*, so no pipeline code has changed since. This is the one number on the page that is second-hand, and is marked so deliberately. - D18 — The post declared one thickness in its header and cut with the lead length of another (CLOSED)
write_gcode_macrob's signature carried material='MSO7,0.250' and lead_len=0.15 side by side. Any caller that left the defaults alone -- which is every _post.nc on every comparison board -- printed 1/4 in steel into (MATERIAL) and M100[] and then pierced with a lead sized for 1/8 in.
Cost today: The geometry _post.nc on published boards is an inspection artifact, not a program that was sent to a machine, and the production posts were unaffected. No part was cut wrong.
Verified: 2026-08-06. Fixed in the same commit: kerf, lead_len, standoff and margin default to None, meaning resolve from the declared material through tables.py; an explicit argument still wins.
Status: OPEN. Jordan, 2026-07-29: "We're going to have to agree on an interface in the software that will enable the operator to define these." So this is part of the pick surface in item 4b, but the rules themselves are still undecided.
What we measured from the shop's novi program
- Length — 0.150 nominal: exactly 0.150 on 43 of 91 boundaries, shortened where the feature will not take it, down to 0.019.
- Angle — between the lead and the first cut move, 49.6° to 177.9°, median 108.9°. 90° is the largest single bucket but only 27 of 91, so it is not a simple perpendicular ramp.
- Pierce point — lands in scrap. On a circular hole it sits essentially at the centre of the slug with the lead running radially out to the circle.
What we cannot read off one file
- What picks the start point on a contour in the first place.
- The shortening rule when the nominal will not fit — what it fits against, and the minimum acceptable lead before the feature is treated differently.
- What sets the angle, given it is clearly not perpendicular.
- Lead-out — whether there is one at all, separate from the slug-retention tab.
One rule we already hold
A lead or pierce must never land inside a bridge, a tab or a slug-retention tab. All three are deliberately narrow spans of material, and piercing into one destroys the thing it was sized to do. This constrains start-point choice regardless of how the rest is decided.
ANSWERED 2026-07-30 (Aristide and Jordan) — question 1, the start point
"The starting point for the laser, where it creates the drop retention tab, can never be at a sharp point in a design. So never in a corner, always on a flat, or if it's a circle, 90°."
Note what this rule really governs. The start point is the tab location — the tab is the span left uncut immediately before the contour closes, so it sits at the start — and the pierce sits there too. One choice therefore fixes three things at once: where the tab lands, where the pierce mark lands, and where comp switches on.
Why a corner is wrong. Material folded around a corner tears rather than snapping, so the tab breaks out ragged instead of on one clean line; and the leftover nub then sits on the most visible feature of the shape, which is exactly where the eye goes. A flat gives the break a single straight line.
How cadmaster implements it
- Rank the flats by clearance, not by primitive type. A 3" gentle arc keeps the tab further from a corner than a 0.05" straight does, and across a 0.033" tab an arc of 1" radius or more departs from straight by under two ten-thousandths — it is a flat as far as the tab is concerned. Straightness only breaks ties.
- Centre the span on its flat, so the tab has equal clearance to the corner either side. A tab pushed hard against one end would break out into the very corner it was moved away from.
- A loop with no corners at all — a circle or a smooth closed curve — takes the quadrant position, implemented as the topmost point of the loop. For a true circle that is exactly 90°, however the circle is stored, and it is deterministic: every circle in a job gets its tab in the same place, so the operator always knows where to look.
- The choice is lead-aware. Geometry alone is not enough — the best flat can be the one wall with nothing beside it to pierce into. Candidates are tried in rank order and the first whose lead also lands in scrap wins. Choosing the flat first and the lead afterwards produced two boundaries that pierced with no lead at all, straight onto the cut path.
- A shape with no flat to offer — a teardrop, say, which is three tight arcs — takes its longest primitive, putting the span as far from the corners as the shape allows, and is reported if a corner still falls inside the span.
Measured effect on the novi sign
Checked by parsing the posted NC back and measuring the turn angle across each tab span — a tab straddling a corner shows up as a large turn.
- Before: 53 of 70 tabs sat across a corner, median turn 71°, worst 156°.
- After: 1 of 70 over the code’s own 10° threshold, median turn 0.02°, worst 10.58° at BND 70.
- Pierces landing on finished metal: 0 of 91 — the tightest pierce still has 0.0763" of clear air. Shortest lead improved from 0.0774 to 0.0962.
- Geometry: 89 of 91 boundaries within half a thou of the master NC, median 0.068 thou, worst 0.776.
The before/after numbers are the control for the checker as well as the result: a measurement that reported zero on both files would have proved nothing.
Re-measured 2026-08-02 at HEAD 0ded91a, and the "after" has moved. Method, so it is reproducible: post the novi sign with start_rule=True, parse the program back with compare_nc.parse, and take the angle between the direction arriving at the last cut move and the direction leaving the first — the turn the tab span straddles. The control is the same post with start_rule=False, and it reproduces the pinned "before" exactly (53 of 70, median 71.15°, worst 155.77°), so the checker is the same checker and the change is real.
The one failure, and its mechanism. BND 70 is a shape whose longest primitives are two 0.1794" radius arcs — under the FLAT_ARC_R gate, so it has no flat to offer and the last-resort branch takes the longest primitive. A 0.033" tab there straddles a 10.58° turn. It is not reported: stats["start_compromised"] comes back empty, because clean is only False when the longest primitive is shorter than the span, and a tight arc is long enough to pass. So the rule’s own "report it if a corner still falls inside the span" never fires for the case it exists for. Recorded as a known limit; not fixed.
Still open on this item
Questions 2, 3 and 4 above are untouched — the lead shortening rule, what sets the lead angle (clearly not perpendicular in the shop's program), and whether there is a lead-out distinct from the slug tab.
src — Aristide and Jordan, 2026-07-30. Implementation, ranking and the lead-aware coupling are cadmaster's.
The start/stop point is now a SAFETY decision — 2026-08-04
This item has always been about three things landing together: where the tab sits, where the pierce goes, and where the cut begins. A fourth has joined them, and it is the one with a machine behind it.
Measured across all four programs we hold, the dominant hazard is a rapid leaving a boundary and crossing the piece it has just cut — 30 of our 36 crossings, 76% of our risk, and 90–96% of the risk in the shop's own reordered files. That move is fixed by the end point of one boundary and the start point of the next, not by the cut order, so it belongs here. Jordan's ruling puts this lever first: optimise the start/stop point, and only detour the rapid (item 4e) where no safe start/stop point exists.
So the choice is now tab-aware, lead-aware AND exit-aware. The existing rule already tries flats in rank order and takes the first whose lead lands in scrap; the new term is whether the departure from that point can reach the next boundary without crossing the slug just made. Not built. Recorded here so the requirement is not discovered again later.
Can the tight pierces be eliminated? Measured, 2026-08-04
Jordan asked directly whether better routing could take the tight pierces to zero, and said the shop's own read is that on this file it cannot. That is answerable rather than debatable, so it was answered: pierce_headroom.py computes, for every boundary, the best clearance any start point could possibly get — the largest circle that fits in the scrap the pierce has to live in — and compares it with what the posted program actually achieves.
Of the 90 non-outer boundaries on the novi part, against the 0.150″ rule:
- 43 already meet it, and meet it exactly. A pierce on the inward normal of a 0.150″ lead sits 0.150″ from its own wall, so 0.150 is not just the target, it is the ceiling the lead rule imposes. Measured maximum anywhere on the part: 150.1 thou.
- 1 genuinely misses with room to spare — BND40 takes 130.9 thou where 235.1 was available. One boundary, ours to fix.
- 46 cannot reach it at all. Not with a different start point, not with a different lead direction, and not with a longer lead: the best clearance available anywhere inside those slugs runs 76.8 to 123.9 thou, median 97.2. The slug is narrower than 0.300″, which is Jordan's own example of the case that cannot be met.
So Jordan is right, and now it is a number rather than an opinion: 100% elimination is impossible on this file. The part does not contain the room. That is not a defect in our routing and no amount of cleverness recovers it.
But 13 of those 46 we are making worse than we need to. On boundaries that can never reach 0.150 we still leave 10 to 25 thou of available clearance unused — BND55 and BND76 take 85.1 thou where 110.1 was there for the taking. CLAUDE.md already says what to do here: "take the point in the scrap furthest from any edge and list it in the report". We do neither. Taking the furthest point is a real improvement on 13 boundaries, and the reporting half is defect D5.
Method and caveat, so this can be re-run and argued with: headroom is the inscribed-circle radius of the boundary's interior, computed coarse-to-fine, assuming the pierce for every non-outer boundary sits inside it. It is an upper bound — it does not check that a lead can reach that point without crossing anything. So the impossible count of 46 is if anything an under-estimate. The outer profile pierces outside itself and is reported separately, not guessed at. python3 pierce_headroom.py <posted.nc> [target].
⚑ Superseded as a threshold (Jordan, 2026-08-28 — ruling): “If your .300 is coming from a rule rather than the table we gave you, then you need to drop the .300 and use the table moving forward.” The 0.300" figure was his worked example of where clear-air fails, never a constant — the governing numbers are the Rev2 row’s own columns (lead_in; Small Threshold for small inside contours). Clear-air remains the physical placement rule. No 0.300 literal exists in code (verified same day).