Assigns a shop user to a process step, or removes the current assignment by passing null. Step assignments determine which operator is responsible for work at that step and control how work appears in the Work Queue.
The endpoint validates that:
The step exists (by scanning all paths for the step ID)
If assigning (non-null userId), the user exists and is active
Assigning an inactive or non-existent user returns a 400 error. Passing null always succeeds (no user validation needed for unassignment).
The assignment is stored on the ProcessStep object within its parent path. It does not affect the path's updatedAt timestamp.
Assigning a step to a new user replaces the previous assignment. There is no history of past assignments (though the work queue reflects the current state).
Unassigning a step (passing null) causes it to appear in the "Unassigned" group in the work queue.
The assignedTo field is undefined (omitted from JSON) when unassigned, not null. This is a serialization detail — the domain model uses undefined for absent optional fields.
Assignment does not affect serial advancement. Any user can advance serials at any step regardless of assignment. Assignment is purely organizational.
The step is located by scanning all paths across all jobs. This is a full scan but is fast for expected data volumes.