Review fixes for ledger-first Make Nests:
- The release renest (offer, staged run, codes, note) moves into
OpenNest.Desktop.ReleaseRenest, shared by the headless panel, the
live main window and the tests. Codes are given inside each commit, so
the live tab's Auto Nest undo step records them; before, undo and redo
dropped every ledger code.
- A bundle repeats one code per sheet: a later nest of the run lost the
whole bundle once an earlier nest took one sheet. Taken sheets are now
counted per code (LedgerCodeFilter.ExcludeCopies).
- A stage whose layout is not kept lists every copy it asked for as not
placed (the proposal cannot be kept), and a rejected ledger layout
says "MaterialLedger not used: Auto Nest could not keep a layout on
its stock" instead of a bare "No MaterialLedger stock used".
- "no free stock" is said only when the ledger had none; otherwise the
note counts what was left out (on other nests, taken by earlier nests
of this release, too small, unknown shape).
- The ledger is not read for a nest with nothing to nest, the live read
runs under the tab's stop token, a reason's own full stop is not
doubled, and the sheet count is the codes given.
Auto Nest leaves out ledger item codes already on other open server nests,
and save and post re-check a nest's codes before going on.
- Server: GET /api/nests/stock-item-codes?exclude= lists the codes on
non-deleted Draft, Quote and To Be Cut nests. Codes are stored in
nest_stock_codes (schema v14) at every archive write; the upgrade reads
each current archive once.
- Data: INestRepository.GetStockCodesInUseAsync, LedgerCodesInUse (5 s,
failures become an unknown answer), the pure LedgerCodeFilter for ledger
rows (reusable by release-time nesting) and LedgerCodeCheck for the
re-check.
- Desktop: the Auto Nest ledger summary counts "(N on other nests)" or says
other nests were not checked. Save, Save As and post open Ledger Stock
Changed when codes are taken: proceed after a per-attempt
acknowledgement, remove the codes (undoable), or cancel. A ledger that
cannot be read skips the check with a status note.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>