Your first cut
This is the operator-grade walkthrough — what actually happens on the floor between Job created and Cut committed to history. The quickstart covers signup-to-first-cut; this page goes deeper.
Prerequisites
- An account with
operatorrole or higher - At least one row in
inventory.rollswithstatus = active - A job in
pendingstatus with parts (polygons + quantities) attached - Auto Nest mode (the default). For manual placement, see Free-roam.
Open the job
Navigate to /dashboard/jobs, filter by status = pending, and open the target job. Verify the material spec, customer info, and any attachments in the right sidebar.
If material is unmatched to available inventory, the Assign Roll button is disabled. Add stock via purchase orders first.
Assign material
Click Assign Roll in the job sidebar. The modal queries inventory.rolls and inventory.offcuts filtered by material_id. Offcuts appear only if their remaining_area is sufficient for the smallest required part.
Select by barcode (scan the physical roll’s printed label) or by material filter. This writes job.roll_id and transitions the job to in_progress.
Launch the cutting engine
Click Pack to trigger Auto Nest. The Next.js app opens a WebSocket to the Rust pipeline, sending job_id and roll_id. The engine acquires a Postgres advisory lock on the roll for the duration of the solve.
Typical solve window: 1–3 seconds. The progress indicator shows the current sparrow GLS iteration count.
Review and commit
Inspect:
- Yield % — placed part area divided by
roll.usable_width × roll.usable_length - Layout preview — SVG render of every placed part with operator-readable labels
- Unplaced parts — anything that didn’t fit, with the reason
Click Commit cut to POST /api/cuts/commit. This:
- Inserts a row into
cut_historywith fulllayout_json - Decrements
roll.remaining_area - Generates offcut records with
parent_roll_idlineage - Releases the advisory lock
- Returns the printable cut list
Committed cuts are immutable. There is no UI undo. Corrections require a new job or an admin adjustment, both of which write to audit_log. Confirm the layout before committing.
What happens next
- Print the cut list and walk the layout to the cutting table
- Scan the job barcode at the table to load the layout
- Cut each part in the order shown
- Mark each cut part scanned-out via
/dashboard/scan - When all parts are cut, the job auto-progresses to
completedper the jobs lifecycle