anchor.diff:  The method `FeasibleScore.isFeasible()` now also checks if the solution was fully initialized during score calculation.
   
   
  -----[.upgrade-recipe-major]
  +[.upgrade-recipe-major]
  +=== `EasyScoreCalculator`: `calculateScore()` changed
  +
  +The `EasyScoreCalculator` interface method `calculateScore(solution)` has been changed to `calculateScore(solution, initScore)`.
  +Change the method signature to add the `initScore` and then pass it to the `Score.valueOf()` method.
  +
  +Before in `*.java`:
  +[source, java]
  +----
  +public class CloudBalancingEasyScoreCalculator implements EasyScoreCalculator<CloudBalance> {
  +
  +    public HardSoftScore calculateScore(CloudBalance cloudBalance) {
  +        ...
  +        return HardSoftScore.valueOf(hardScore, softScore);
  +    }
  +
  +}
  +----
  +
  +After in `*.java`:
  +[source, java]
  +----
  +public class CloudBalancingEasyScoreCalculator implements EasyScoreCalculator<CloudBalance> {
  +
  +    public HardSoftScore calculateScore(CloudBalance cloudBalance, int initScore) {
  +        ...
  +        return HardSoftScore.valueOf(initScore, hardScore, softScore);
  +    }
  +
  +}
  +----
  +
  +OptaPlanner keeps track of the `initScore` internally, but it needs to be passed into the `Score` creation because a `Score` is immutable by design.
  +
  +
  +[.upgrade-recipe-minor]
  +=== IncrementalScoreCalculator`: `calculateScore()` changed
  +
  +The `IncrementalScoreCalculator` interface method `calculateScore()` has been changed `calculateScore(initScore)`.
  +Change the method signature to add the `initScore` and then pass it to the `Score.valueOf()` method.
  +
  +Before in `*.java`:
  +[source, java]
  +----
  +public class CloudBalancingIncrementalScoreCalculator extends AbstractIncrementalScoreCalculator<CloudBalance> {
  +
  +    public HardSoftScore calculateScore() {
  +        return HardSoftScore.valueOf(hardScore, softScore);
  +    }
  +
  +}
  +----
  +
  +After in `*.java`:
  +[source, java]
  +----
  +public class CloudBalancingIncrementalScoreCalculator extends AbstractIncrementalScoreCalculator<CloudBalance> {
  +
  +    public HardSoftScore calculateScore(int initScore) {
  +        return HardSoftScore.valueOf(initScore, hardScore, softScore);
  +    }
  +
  +}
  +----
  +
  +
  +[.upgrade-recipe-major]
   === `Score`: `valueOf(...)` changed and `valueOfInitialized(...)` added
   
  -
  +Each `Score` implementation now requires an `initScore` parameter.
  +Inside a `ScoreCalculator`, it's must be passed from the `calculateScore()` method (see above).
  +
  +Outside of a `ScoreCalculator`, if you're constructing a score for an initialized solution,
  +just replace `valueOf()` with `valueOfInitialized()`:
   
   Before in `*.java`:
   [source, java]
   ----
           SimpleScore score = SimpleScore.valueOf(1234);
  -
   ----
   
   After in `*.java`:
  
positive.code: === `EnvironmentMode`: `PRODUCTION` renamed
  
  The `EnvironmentMode` `PRODUCTION` has been renamed to `NON_REPRODUCIBLE`
  because most enterprises use `REPRODUCIBLE` in production.
  For backwards compatibility, `PRODUCTION` still exists, but it's deprecated and will be removed in a future version.
  
  Before in `*SolverConfig.xml` and `*BenchmarkConfig.xml`:
  [source, xml]
  
negative.code: Before in `*.java`:
  [source, java]
  ----
      public void bestSolutionChanged(BestSolutionChangedEvent<CloudBalance> event) {
          if (event.isEveryProblemFactChangeProcessed()
                  && event.isNewBestSolutionInitialized()) {
              ...
  