mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-10 17:54:15 -04:00
No-hole parts now choose the outside entry through the S03-S08 pipeline at the part boundary: rank the native catalogue toward the NEXT cut's placed-material centre, lazily certify each emitted lead with the shared validator, cap at maxEntries with side coverage. The next cut is the next unfinished part on the supplied order (re-read after every learned-order replan) or, in sequence-free fallback, the nearest dependency-ready remaining part with stable ordinal ties; the last part has no target and ranks by tier then arrival distance — never the plate origin. Target and arrival are converted to prepared LOCAL coordinates exactly once; geometry is already rotated. The look-ahead rank survives Follow's ordering: children sort by nearest source first (the sequence-free tour stays nearest-first), then contour, then the selection rank — plain OrderBy(Distance) can no longer undo the facing. Measured fixture (three squares, 0.15 leads, origin start): legacy cut every sheet at its arrival-nearest lower-left corner with 10.5-unit cross-sheet rapids totalling 21.0; look-ahead cuts the +X-facing corner with the same 21.0 total but each inter-part rapid now starts at the facing edge instead of trailing across the whole sheet. Uncertain validator answers are never precheck-refused: they skip the selected slots but flow to the emitted-prefix Check and complete replay, which stay the authority — a refused-looking incomplete is reported, not hidden. A fully evaluated catalogue with no fitting lead surfaces 'No tested lead-in fits on part N, contour M'; budget exhaustion stays a budget finding. Lead prechecks count separately from DFS expansions; the pipeline itself is one counted expansion per contour. Full backtracking, dependencies, locked/fixed programs, cutoff handling, emitted-prefix Check and complete replay are unchanged; budgets and CuttingPartOrder untouched. Hole parts keep the legacy path until S12.