remove extra cancel recovery overload and fold the logic into validateRecovery