← back to pin list

Brick 37: consolidation -- trailing columns move into later sheets' envelopes

kerfmaster pin list · UI / workflow decisions

recordStates what the code does today. Auditable against the code — this is the only type that can go stale.

Content last changed 2026-09-03 — computed from the item itself, not typed.

Built 2026-09-03, inside part_list_nest.pack -- born from Jordan's marked screenshot: the greedy fill prefers the earliest sheet, so LV00151-2018 landed alone in sheet 1's remnant (used X 110.2 for an 86.9 fill) while sheet 3 still had room inside the 114.6 it already spends. The pass runs after the fill + filler passes and before the pack's own audit: for each earlier sheet, take the FRONTIER row (a real full-height column in the transposed frame) and try every member against LATER sheets only, through the same slide arithmetic every placement uses (bridges larger-governs, lead envelopes reserved, capped bands honoured); a candidate is accepted ONLY if the target sheet's used X does not grow -- the source slab is freed and no slab is spent, so the move is free material by construction and runs automatically (the auto-never-spends-the-slab rule is satisfied, not excepted). ALL-OR-NOTHING per column: if any member fails, the whole trial rolls back (row profiles snapshot/restored, trial placements and hunt entries removed) so a column is never stranded half-moved. Cascades: the next frontier row is tried until one refuses. Every move is REPORTED in the layout document (moves: id, from, to, note) and the Nest drawer names them -- never silent; the one final audit judges the consolidated layout like any other.

PROVEN: test_pl_consolidate.py 13 NEW controls (the move, the no-growth gate proven by packing with and without the moved part, all-or-nothing rollback with the target untouched, single-sheet no-op, leads riding the move, moves only ever go LATER); real Lathrup list re-packed through the server's own run_partnest under the job lock: 10+8+11 became 9+8+12, 2018 moved to sheet 3's envelope, sheet 1's used X 110.18 -> 86.94 (23.2 in of full-height slab freed), sheets 2/3 used X unchanged to the digit, audit +0.005 over ruled; suites green: part_list 24, pl_spread 18, pl_tool 18, pl_seq 27, pl_post 26, partrotate 19, pl_deliver 27.

Honest limits: moves go frontier-column-whole into EXISTING envelopes only -- the pass never opens a row on a later sheet and never moves parts INTO an earlier sheet (that direction is pocket_backfill's, operator-gated because it can spend a slab); the engine change rides in the server process, so the live app packs this way after the next restart (this build's re-pack ran the same codepath offline).