since I do not like it very much to memorize states when checking constraints
Any memorization should just be stored on the JobInsertionContext, yes? Have something like a statemanager stored on this object, so constraints can create a state on their pickup evaluation and re-use it on their delivery? You wouldn’t store the state globally (i.e. not in the main statemanager).