code: @Override
      public void afterProblemFactAdded(Object problemFact) {
          if (kieSession.getFactHandle(problemFact) != null) {
              throw new IllegalArgumentException("The problemFact (" + problemFact
                      + ") was already added to this ScoreDirector.\n"
                      + "Maybe that specific instance is already in the "
                      + PlanningSolution.class.getSimpleName() + "'s problem fact members ("
                      + getSolutionDescriptor().getProblemFactMemberAndProblemFactCollectionMemberNames() + ").\n"
                      + "Maybe use before/afterProblemPropertyChanged() instead of before/afterProblemFactAdded().");
          }
          kieSession.insert(problemFact);
          super.afterProblemFactAdded(problemFact);
      }
docs: public void beforeProblemFactAdded(Object problemFact) // Do nothing