code: @Override
      public void solve(DefaultSolverScope<Solution_> solverScope) {
          CustomPhaseScope<Solution_> phaseScope = new CustomPhaseScope<>(solverScope);
          phaseStarted(phaseScope);
  
          CustomStepScope<Solution_> stepScope = new CustomStepScope<>(phaseScope);
          for (CustomPhaseCommand<Solution_> customPhaseCommand : customPhaseCommandList) {
              solverScope.checkYielding();
              if (termination.isPhaseTerminated(phaseScope)) {
                  break;
              }
              stepStarted(stepScope);
              doStep(stepScope, customPhaseCommand);
              stepEnded(stepScope);
              phaseScope.setLastCompletedStepScope(stepScope);
              stepScope = new CustomStepScope<>(phaseScope);
          }
          phaseEnded(phaseScope);
      }
docs: ************************************************************************