'Make invalid states unrepresentable' considered harmful
https://www.seangoedecke.com/invalid-states/
good software design should allow the system to represent some invalid states.
at some point you will be forced to do something that violates your tidy constraints