anchor.diff:  :awestruct-priority: 0.5
   :awestruct-upgrade_recipe_version: 8
   
  -
   // TODO Once 8.0.0.Beta1 is out, remove these lines and add a link to this page in ./index.adoc
  -*OptaPlanner 8 is in _alpha_ development.
  +*OptaPlanner 8 is in early stages of development.
   There is no use in waiting for it.
   Please use and download the latest 7.x release instead.*
   
  -== From 7.43.0.Final or higher to 8.0.0.Beta1
  -
  -[.upgrade-recipe-minor]
  -=== Removed JavaScript expression support in configuration
  -
  -Various elements of both the solver configuration and benchmark configuration no longer support nested
  -JavaScript expressions.
  -Users need to replace these with either auto-configuration or with integer constants.
  -
  -Before in `solverConfig.xml`:
  -
  -[source,xml]
  -----
  -    <solver>
  -        ...
  -        <moveThreadCount>availableProcessorCount - 1</moveThreadCount>
  -        ...
  -    </solver>
  -----
  -
  -After in `solverConfig.xml`:
  -
  -[source,xml]
  -----
  -    <solver>
  -        ...
  -        <moveThreadCount>1</moveThreadCount> <!-- Alternatively, use "AUTO" or omit entirely. -->
  -        ...
  -    </solver>
  -----
  -
  -Before in `benchmarkConfig.xml`:
  -
  -[source,xml]
  -----
  -    <plannerBenchmark>
  -      ...
  -      <parallelBenchmarkCount>availableProcessorCount - 1</parallelBenchmarkCount>
  -      ...
  -    </plannerBenchmark>
  -----
  -
  -After in `benchmarkConfig.xml`:
  -
  -[source,xml]
  -----
  -    <plannerBenchmark>
  -      ...
  -      <parallelBenchmarkCount>1</parallelBenchmarkCount> <!-- Alternatively, use "AUTO" or omit entirely. -->
  -      ...
  -    </plannerBenchmark>
  -----
  -
  -
  -== From 7.39.0.Final or higher to 8.0.0.Beta1
  -
  -=== Backwards incompatible changes to the public API in 7.0
  -
   Because this is a new major version number (8.0), which is the foundation for the 8.x series for the next few years, it allows us to make backwards incompatible changes to the public API _for the long term benefit of this project_.
   
   We kept these backwards incompatible changes to a strict minimum and will not introduce any additional ones during the 8.x era.
   
   Any backwards incompatible changes are annotated with a [.label.label-danger.label-as-badge.label-public-api]#Public API# badge.
   
  -== General
  +== Backwards incompatible changes to the public API since 7.x
   
   //[.upgrade-recipe-major.upgrade-recipe-public-api]
   //=== Java 11 or higher required
  
positive.code: https://docs.optaplanner.org/latest/optaplanner-docs/html_single/index.html#integrationWithPersistentStorage[serialize
  via JSON or other formats].
  
  == OptaPlanner Core
  
  [.upgrade-recipe-major.upgrade-recipe-public-api]
  === `SolverFactory.getScoreDirectorFactory()` replaced by `ScoreManager`
  
  
negative.code: }
  ----
  
  [.upgrade-recipe-major]
  === Score calculators become public API
  
  The interfaces `EasyScoreCalculator`, `IncrementalScoreCalculator` and `ConstraintMatchAwareIncrementalScoreCalculator`
  have moved to a new package in the public API.
  Their deprecated counterparts have been removed.
  The deprecated class `org.optaplanner.core.impl.score.director.incremental.AbstractIncrementalScoreCalculator`
  has also been removed.
  Replace the use of the removed interfaces and classes with their counterparts in the public API.
  
  Before in `*EasyScoreCalculator.java*`:
  
  [source,xml]
  ----
    ...
    import org.optaplanner.core.impl.score.director.easy.EasyScoreCalculator;
    ...
  
    public class CloudBalancingEasyScoreCalculator implements EasyScoreCalculator<CloudBalance> {
      ...
    }
  ----
  
  After in `*EasyScoreCalculator.java*`:
  
  [source,xml]
  ----
    ...
    import org.optaplanner.core.api.score.calculator.EasyScoreCalculator;
    ...
  
    public class CloudBalancingEasyScoreCalculator implements EasyScoreCalculator<CloudBalance, HardSoftScore> {
      ...
    }
  ----
  
  Before in `*IncrementalScoreCalculator.java*`:
  
  [source,xml]
  ----
    ...
    import org.optaplanner.core.impl.score.director.incremental.AbstractIncrementalScoreCalculator;
    ...
  
    public class CloudBalancingIncrementalScoreCalculator extends AbstractIncrementalScoreCalculator<CloudBalance> {
      ...
    }
  ----
  
  After in `*IncrementalScoreCalculator.java*`:
  
  [source,xml]
  ----
    ...
    import org.optaplanner.core.api.score.calculator.IncrementalScoreCalculator;
    ...
  
    public class CloudBalancingIncrementalScoreCalculator implements IncrementalScoreCalculator<CloudBalance, HardSoftScore> {
      ...
    }
  ----
  
  Before in `*ConstraintMatchAwareIncrementalScoreCalculator.java*`:
  
  [source,xml]
  ----
    ...
    import org.optaplanner.core.impl.score.director.incremental.AbstractIncrementalScoreCalculator;
    import org.optaplanner.core.impl.score.director.incremental.ConstraintMatchAwareIncrementalScoreCalculator;
    ...
  
    public class CheapTimeConstraintMatchAwareIncrementalScoreCalculator
          extends AbstractIncrementalScoreCalculator<CheapTimeSolution>
          implements ConstraintMatchAwareIncrementalScoreCalculator<CheapTimeSolution> {
      ...
    }
  ----
  
  After in `*ConstraintMatchAwareIncrementalScoreCalculator.java*`:
  
  [source,xml]
  ----
    ...
    import org.optaplanner.core.api.score.calculator.ConstraintMatchAwareIncrementalScoreCalculator;
    ...
  
    public class CheapTimeConstraintMatchAwareIncrementalScoreCalculator
          implements ConstraintMatchAwareIncrementalScoreCalculator<CheapTimeSolution, HardMediumSoftLongScore> {
      ...
    }
  ----
  
  [.upgrade-recipe-major.upgrade-recipe-public-api]
  === `PlannerBenchmarkFactory`: `createFromSolverFactory()` removed
  