transitions should defend against invalid states when invoked explicitly