Gpt6Astra reverse-engineered the validator: hand-tuned paddings and a copied check sequence (ValidationOverlap) to match its rounding. It now reads parts with JobPartGeometry, takes clearance from NestTolerances, checks candidates with NestLayoutCheck.Clears, and assembles results with NestJobResultBuilder and NestJobCost; its tests use the shared kit. Its contact search, beam search and extra Automatic angles are unchanged. Synthetic benchmark (5 jobs, salvage 0.5): all valid, 2 sheets each, cost 5574.07 -> 5470.07; time 1871 -> 2400 ms from the stricter shared check on arc-heavy jobs. Co-Authored-By: Codex <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OpenNest Engines
Independent nesting engine plugins for OpenNest.
Each engine is a standalone class library that OpenNest discovers at runtime via
NestingEngineRegistry.LoadPlugins() — drop the DLL into an Engines/ folder next to
the OpenNest app or OpenNest.Benchmark build output.
| Engine | Approach |
|---|---|
| Gpt6Astra | Contact-based placement |
| Opus55 | Frontier-advance no-fit-polygon packing |
| Qwen38FlashNext | Bottom-left greedy insertion over convex NFPs with an exact clearance gate |
Building
Engines compile against an OpenNest checkout, expected as a sibling clone:
src/
OpenNest/ git clone https://git.thecozycat.net/aj/OpenNest.git
OpenNest-Engines/ this repo
Use a different location with /p:OpenNestRoot=<path> (or the OpenNestRoot
environment variable).
./Build-Engines.ps1 # build all engines + deploy to the benchmark
./Build-Engines.ps1 -Engines Opus55 # just one
dotnet test OpenNest.Engine.Opus55/tests/OpenNest.Engine.Opus55.Tests.csproj
Each engine's README covers its algorithm and benchmark results.
Writing a new engine
./New-Engine.ps1 -Name Nova
This copies _Template/ to OpenNest.Engine.Nova/: an INestingEngine stub, a README
spelling out what counts as an independent engine, BENCH-RULES.md (how a model's run
works: workspace limits, git, the real-part archive, reporting), and starter acceptance tests checked by
the benchmark's own NestValidator (they fail until Solve() is implemented).
To work inside an OpenNest checkout instead, stamp it into an Engines/ folder there and
bring the shared build files along; they detect that layout automatically:
./New-Engine.ps1 -Name Nova -Destination <OpenNest>/Engines -IncludeBuildFiles
Layout
Each engine lives in OpenNest.Engine.<Name>/ with an optional tests/ subproject.
Directory.Build.props supplies the target framework and the OpenNest.Engine
reference, so an engine's .csproj can be nearly empty.