Every sheet material is a nesting group backed by a completed nesting_runs row. A product configuration records ordered nesting_run_ids; it never stores a second mutable copy of placements or remnants. group_metadata identifies the component, material, sheet input fingerprint and display labels. A generic calculation has one legacy run and is exposed as the PROJECT group.
The public calculation payload has nesting_groups. Each group includes its sheet dimensions, placements, sheets, remnants, utilization, charged area and returned area. group_payload in backend/app/nesting_workspace.py derives area totals from the saved run. Costing uses those totals directly. The product breakdown only receives a read-only summary without placements or remnants. The old nesting field remains for generic calculations and is null for active products.
Channel Letters contributes BACK and FACE through NESTED_SHEET technology materials. The configuration can contribute any number of such materials. A fingerprint of geometry, selected material, sheet dimensions, gap and margin decides whether to reuse each run. Recalculation replaces only changed groups and keeps the other run IDs and their manual remnant decisions. The shared detect_remnants logic retains the existing offcut, bottom-strip and usable-leftover defaults for every group. Group-scoped placement and remnant endpoints validate that the run belongs to the calculation and current product configuration.
Migration b8e3f9276a10 moves existing product layouts into shared runs. It preserves generic runs, saved revisions, published technologies, prices and quote totals. Historical revisions made before the migration use a read-only adapter; continuing one adopts its layouts into shared runs. This migration is part of the new release and has not been applied to production.