My issue is that I would have it that the SoftDelete trait can be implemented in a later phase of development with no impact to the behaviour of the class it is used in besides introducing the status field and adding the behaviour.

I beleive that if SoftDelete prevents a true deletion of the record and updates the status field without triggering validation() or beforeSave() then it behaves more transparantly at the level of my_document->delete().

Maybe this is not safe.

In any case I readjusted my validation logic to handle the fact that validation is triggered in softDelete() and it now handles.