def rescue_strategy
      suggested_strategies = []

      if self.steps.compact.any? { |step| step.state == :error }
        suggested_strategies << SuggestedStrategy[self, rescue_strategy_for_self]
      end

      self.planned_actions.each do |planned_action|
        rescue_strategy = rescue_strategy_for_planned_action(planned_action)
        next unless rescue_strategy # ignore actions that have no say in the rescue strategy
        suggested_strategies << SuggestedStrategy[planned_action, rescue_strategy]
      end

      combine_suggested_strategies(suggested_strategies)
    end
def rescue_strategy
      suggested_strategies = []

      if self.steps.compact.any? { |step| step.state == :error }
        suggested_strategies << SuggestedStrategy[self, rescue_strategy_for_self]
      end

      self.planned_actions.each do |planned_action|
        rescue_strategy = rescue_strategy_for_planned_action(planned_action)
        next unless rescue_strategy # ignore actions that have no say in the rescue strategy
        suggested_strategies << SuggestedStrategy[planned_action, rescue_strategy]
      end

      combine_suggested_strategies(suggested_strategies)
    end
What strategy should be used for rescuing from error in
 the action or its sub actions

 @return Strategy

 When determining the strategy, the algorithm starts from the
 entry action that by default takes the strategy from #rescue_strategy_for_self
 and #rescue_strategy_for_planned_actions and combines them together.