mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-27 17:21:34 -04:00
BestFitFinder gathered each rotation strategy's candidates, and PairEvaluator gathered evaluated results, in ConcurrentBags, so their order depended on which worker finished first. The stable area sort then broke equal-area ties in that arbitrary order, and fills, which try candidates in order and keep the first of equal layouts, could nest the same parts differently between runs. Both now fill index-addressed slots: candidates keep rotation-angle and slide-offset order, results keep candidate order, and ties break the same way every run. The candidates produced and their scores are unchanged. The Strip whole-job pin in FillStackCharacterizationTests is re-pinned (A66602F707290A36 -> FD03A4529D37E32C). That job ties between best-fit pairs; the old pin recorded whichever tied pair the bag happened to return first. The new layout places the same 26 parts, passes LayoutAssert.Valid and gave the same digest in five separate test processes. The other 28 pins are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>