0308a862b8 fix(opus55): honor part priority and use host scoring and tolerances
Opus55 ignored NestJobPart.Priority, so the shared contract test (lower
number wins scarce stock) failed; lower-number priority now precedes its
placement score. SheetEconomics is replaced by the host's NestJobCost so
it optimizes exactly what the benchmark scores, and its footprint margin
comes from NestTolerances.SafeClearanceMargin plus four Clipper grid
units - the same 0.003 total as before, which keeps its contact points.

Synthetic benchmark (5 jobs, salvage 0.5): all valid, cost unchanged at
5452.79, time 611 -> 456 ms.

Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 09:29:27 -04:00

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.

S
Description
No description provided
Readme MIT
372 KiB
Languages
C# 98.2%
PowerShell 1.8%