fix(fsm): save state transitions as they happen