Input validation should be performed by (or based on) ChangeOp objects. This way, soft constraints can be enforced when part of a change, while ignoring them when unrelated aspects of an entity are changed.
Also, by binding the validation to the ChangeOp, there is a central place to specify what kind of change should apply what kind of validation.
This means that the validation of labels and descriptions should be done in the relevant ChangeOp (see bug 49583). Similarly, snak validation should be moved to the respective ChangeOp.
Whiteboard: u=dev c=story p=0 s=0