Skip to content

refactor: move explainability and incremental calculator#2233

Merged
triceo merged 1 commit into
TimefoldAI:mainfrom
triceo:incremental
Apr 13, 2026
Merged

refactor: move explainability and incremental calculator#2233
triceo merged 1 commit into
TimefoldAI:mainfrom
triceo:incremental

Conversation

@triceo

@triceo triceo commented Apr 13, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors explainability/score analysis and incremental score calculation support, moving several formerly OSS APIs (indictments, solution diff, score analysis, incremental score director) behind Enterprise services while updating downstream modules (benchmark, migration tooling, integrations, docs) to the new packages and APIs.

Changes:

  • Moved ConstraintRef into core.api.score.stream and replaced many uses of the old core.api.score.constraint package (which is removed).
  • Replaced SolutionManager.explain(...) usages with SolutionManager.analyze(...) and introduced new incremental score calculator analysis APIs (ConstraintMatchRegistry, ConstraintMatchRegistration).
  • Updated docs and integration/test code to reflect Enterprise-only features and new config/API names.

Reviewed changes

Copilot reviewed 268 out of 273 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tools/migration/src/test/java/ai/timefold/solver/migration/v2/GeneralPackageRenameMigrationRecipeTest.java Updates expected imports for jackson score serializers/deserializers.
tools/migration/src/main/java/ai/timefold/solver/migration/v2/GeneralPackageRenameMigrationRecipe.java Adjusts package rename recipes for jackson score packages.
tools/migration/src/main/java/ai/timefold/solver/migration/v2/GeneralMethodDeleteInvocationMigrationRecipe.java Adds removal recipes for deleted indictWith(..) invocations.
tools/benchmark/src/test/java/ai/timefold/solver/benchmark/impl/statistic/subsingle/constraintmatchtotalstepscore/ConstraintMatchTotalStepScoreSubSingleStatisticTest.java Updates ConstraintRef import location.
tools/benchmark/src/test/java/ai/timefold/solver/benchmark/impl/statistic/subsingle/constraintmatchtotalbestscore/ConstraintMatchTotalBestScoreSubSingleStatisticTest.java Updates ConstraintRef import location.
tools/benchmark/src/test/java/ai/timefold/solver/benchmark/impl/result/PlannerBenchmarkResultTest.java Updates dummy calculator types/imports and fixes comment grammar.
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/SubSingleBenchmarkRunner.java Switches explanation summary generation from explain() to analyze().
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/statistic/subsingle/constraintmatchtotalstepscore/ConstraintMatchTotalStepScoreSubSingleStatistic.java Updates ConstraintRef import location.
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/statistic/subsingle/constraintmatchtotalstepscore/ConstraintMatchTotalStepScoreStatisticPoint.java Updates ConstraintRef import location.
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/statistic/subsingle/constraintmatchtotalbestscore/ConstraintMatchTotalBestScoreSubSingleStatistic.java Updates ConstraintRef import location.
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/statistic/subsingle/constraintmatchtotalbestscore/ConstraintMatchTotalBestScoreStatisticPoint.java Updates ConstraintRef import location.
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/statistic/StatisticRegistry.java Updates ConstraintRef import location.
tools/benchmark/src/main/java/ai/timefold/solver/benchmark/impl/statistic/ConstraintSummary.java Updates ConstraintRef import location.
tools/benchmark-aggregator/src/test/java/ai/timefold/solver/benchmark/aggregator/PlannerBenchmarkResultTest.java Updates dummy calculator/meter classes for XML tests.
spring-integration/spring-boot-autoconfigure/src/test/java/ai/timefold/solver/spring/boot/autoconfigure/dummy/list/constraints/incremental/DummySpringListIncrementalScore.java Updates incremental calculator generics/nullness annotations and removed callbacks.
spring-integration/spring-boot-autoconfigure/src/test/java/ai/timefold/solver/spring/boot/autoconfigure/dummy/basic/constraints/incremental/DummySpringIncrementalScore.java Updates incremental calculator generics/nullness annotations and removed callbacks.
spring-integration/spring-boot-autoconfigure/src/main/java/ai/timefold/solver/spring/boot/autoconfigure/config/SolverProperties.java Javadoc tweaks and imports ConstraintProvider for links.
README.adoc Updates contributing link and wording/formatting around editions.
quarkus-integration/quarkus/runtime/src/main/java/ai/timefold/solver/quarkus/devui/TimefoldDevUIPropertiesRPCService.java Updates ConstraintRef import location.
quarkus-integration/quarkus/runtime/src/main/java/ai/timefold/solver/quarkus/devui/TimefoldDevUIProperties.java Updates ConstraintRef import location.
quarkus-integration/quarkus/runtime/src/main/java/ai/timefold/solver/quarkus/config/SolverRuntimeConfig.java Javadoc wording updates for Enterprise-only settings.
quarkus-integration/quarkus/deployment/src/test/java/ai/timefold/solver/quarkus/TimefoldProcessorGeneratedGizmoSupplierTest.java Updates incremental calculator dummy to new callbacks/nullness.
quarkus-integration/quarkus/deployment/src/test/java/ai/timefold/solver/quarkus/testdomain/dummy/DummyTestdataQuarkusShadowVariableIncrementalScoreCalculator.java Updates incremental calculator generics/nullness and removed callbacks.
quarkus-integration/quarkus/deployment/src/test/java/ai/timefold/solver/quarkus/testdomain/dummy/DummyTestdataQuarkusIncrementalScoreCalculator.java Updates incremental calculator generics/nullness and removed callbacks.
quarkus-integration/quarkus/deployment/src/main/java/ai/timefold/solver/quarkus/deployment/config/SolverBuildTimeConfig.java Javadoc wording updates for Enterprise-only settings.
quarkus-integration/quarkus-jackson/runtime/src/test/java/ai/timefold/solver/quarkus/jackson/diff/PlanningSolutionDiffTest.java Removes test for solution diff serialization (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java Exports new ...jackson.solution package.
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/solver/RecommendedAssignmentJacksonSerializer.java Removes serializer (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/solver/AbstractRecommendedAssignmentJacksonDeserializer.java Removes deserializer base (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/score/constraint/ConstraintRefJacksonSerializer.java Updates ConstraintRef import location.
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/score/constraint/ConstraintRefJacksonDeserializer.java Updates ConstraintRef import location.
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/score/analysis/ScoreAnalysisJacksonSerializer.java Removes serializer (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/SerializablePlanningVariableDiff.java Removes diff serialization helper (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/SerializablePlanningSolutionDiff.java Removes diff serialization helper (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/SerializablePlanningEntityDiff.java Removes diff serialization helper (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/PlanningVariableDiffJacksonSerializer.java Removes diff serializer (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/PlanningSolutionDiffJacksonSerializer.java Removes diff serializer (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/PlanningEntityDiffJacksonSerializer.java Removes diff serializer (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/src/main/java/ai/timefold/solver/quarkus/jackson/diff/package-info.java Removes diff package docs (moved/enterprise-only).
quarkus-integration/quarkus-jackson/runtime/pom.xml Removes explicit Quarkus capability declaration.
quarkus-integration/quarkus-jackson/integration-test/src/main/java/ai/timefold/solver/quarkus/jackson/it/TimefoldTestResource.java Renames test solution type/package.
quarkus-integration/quarkus-jackson/integration-test/src/main/java/ai/timefold/solver/quarkus/jackson/it/testdata/TestdataJacksonPlanningSolution.java Renames/relocates planning solution class.
quarkus-integration/quarkus-jackson/integration-test/src/main/java/ai/timefold/solver/quarkus/jackson/it/testdata/TestdataJacksonPlanningEntity.java Renames/relocates planning entity class.
quarkus-integration/quarkus-jackson/integration-test/src/main/java/ai/timefold/solver/quarkus/jackson/it/testdata/TestdataJacksonPlanningConstraintProvider.java Renames/relocates constraint provider and updates entity refs.
quarkus-integration/quarkus-jackson/deployment/pom.xml Reorders/adds runtime dependency earlier in the list.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/testdomain/JacksonTestdataSolution.java Updates jackson score serializer/deserializer imports.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/PlanningSolutionDiffTest.java Removes test for solution diff serialization (moved/enterprise-only).
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/SimpleScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/SimpleBigDecimalScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/HardSoftScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/HardSoftBigDecimalScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/HardMediumSoftScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/HardMediumSoftBigDecimalScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/BendableScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/test/java/ai/timefold/solver/jackson/api/score/BendableBigDecimalScoreJacksonRoundTripTest.java Removes obsolete imports after package move.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/SerializablePlanningVariableDiff.java Removes diff serialization helper (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/SerializablePlanningSolutionDiff.java Removes diff serialization helper (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/SerializablePlanningEntityDiff.java Removes diff serialization helper (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/PlanningVariableDiffJacksonSerializer.java Removes diff serializer (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/PlanningSolutionDiffJacksonSerializer.java Removes diff serializer (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/PlanningEntityDiffJacksonSerializer.java Removes diff serializer (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/preview/api/domain/solution/diff/package-info.java Removes diff package docs (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/solver/RecommendedAssignmentJacksonSerializer.java Removes serializer (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/solver/AbstractRecommendedAssignmentJacksonDeserializer.java Removes deserializer base (moved/enterprise-only).
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/SimpleScoreJacksonSerializer.java Moves serializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/SimpleScoreJacksonDeserializer.java Moves deserializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/SimpleBigDecimalScoreJacksonSerializer.java Moves serializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/SimpleBigDecimalScoreJacksonDeserializer.java Moves deserializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/PolymorphicScoreJacksonSerializer.java Updates imports after package move.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/PolymorphicScoreJacksonDeserializer.java Updates imports after package move.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardSoftScoreJacksonSerializer.java Moves serializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardSoftScoreJacksonDeserializer.java Moves deserializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardSoftBigDecimalScoreJacksonSerializer.java Moves serializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardSoftBigDecimalScoreJacksonDeserializer.java Moves deserializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardMediumSoftScoreJacksonSerializer.java Moves serializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardMediumSoftScoreJacksonDeserializer.java Moves deserializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardMediumSoftBigDecimalScoreJacksonSerializer.java Moves serializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/HardMediumSoftBigDecimalScoreJacksonDeserializer.java Moves deserializer into new ...api.score package.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/constraint/ConstraintRefJacksonSerializer.java Updates ConstraintRef import location.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/constraint/ConstraintRefJacksonDeserializer.java Updates ConstraintRef import location.
persistence/jackson/src/main/java/ai/timefold/solver/jackson/api/score/analysis/ScoreAnalysisJacksonSerializer.java Removes serializer (moved/enterprise-only).
docs/src/modules/ROOT/pages/using-timefold-solver/running-the-solver.adoc Updates EE/OSS wording and replaces NOTE blocks.
docs/src/modules/ROOT/pages/using-timefold-solver/benchmarking-and-tweaking.adoc Rewords NOTE block into inline NOTE.
docs/src/modules/ROOT/pages/optimization-algorithms/move-selector-reference.adoc Rewords EE-only notes and references.
docs/src/modules/ROOT/pages/integration/_config-properties.adoc Rewords EE-only note for move-thread-count.
docs/src/modules/ROOT/pages/frequently-asked-questions.adoc Rewords licensing/EE references and links.
docs/src/modules/ROOT/pages/constraints-and-score/performance.adoc Rewords EE-only notes, adjusts headings.
docs/src/modules/ROOT/pages/constraints-and-score/overview.adoc Updates incremental calculator messaging and important note wording.
core/src/test/resources/ai/timefold/solver/core/api/solver/testdataSolverConfig.xml Switches test config from incremental to easy calculator.
core/src/test/resources/ai/timefold/solver/core/api/solver/testdataShadowedSolverConfig.xml Removes incremental-calculator-based test config.
core/src/test/resources/ai/timefold/solver/core/api/solver/testdataOverconstrainedSolverConfig.xml Removes incremental-calculator-based test config.
core/src/test/java/ai/timefold/solver/core/testdomain/unassignedvar/TestdataAllowsUnassignedConstraintProvider.java Changes constraint definition for unassigned test domain.
core/src/test/java/ai/timefold/solver/core/testdomain/shadow/TestdataShadowedConstraintProviderClass.java Adds constraint provider for shadow test domain.
core/src/test/java/ai/timefold/solver/core/testdomain/score/lavish/TestdataLavishSolution.java Uses Java 21 List#getFirst() in helpers.
core/src/test/java/ai/timefold/solver/core/testdomain/multivar/TestdataMultiVarConstraintProvider.java Adds new multivar constraint provider.
core/src/test/java/ai/timefold/solver/core/testdomain/list/unassignedvar/TestdataAllowsUnassignedValuesListIncrementalScoreCalculator.java Removes incremental calculator test implementation.
core/src/test/java/ai/timefold/solver/core/testdomain/list/shadowhistory/TestdataListWithShadowHistoryConstraintProvider.java Adds constraint provider for list shadow history test domain.
core/src/test/java/ai/timefold/solver/core/testdomain/list/pinned/TestdataPinnedListIncrementalScoreCalculator.java Removes incremental calculator test implementation.
core/src/test/java/ai/timefold/solver/core/testdomain/list/pinned/index/TestdataPinnedWithIndexListIncrementalScoreCalculator.java Removes incremental calculator test implementation.
core/src/test/java/ai/timefold/solver/core/testdomain/constraintweightoverrides/TestdataConstraintWeightOverridesIncrementalScoreCalculator.java Removes incremental calculator test implementation.
core/src/test/java/ai/timefold/solver/core/testdomain/constraintverifier/TestdataConstraintVerifierJustificationProvider.java Removes indictWith usage and updates constraint name.
core/src/test/java/ai/timefold/solver/core/testconstraint/TestConstraint.java Updates ConstraintRef import and constructor signature changes.
core/src/test/java/ai/timefold/solver/core/impl/score/stream/common/uni/UniConstraintBuilderTest.java Updates ConstraintRef import and constraint constructor signature.
core/src/test/java/ai/timefold/solver/core/impl/score/stream/common/tri/TriConstraintBuilderTest.java Updates ConstraintRef import and constraint constructor signature.
core/src/test/java/ai/timefold/solver/core/impl/score/stream/common/quad/QuadConstraintBuilderTest.java Updates ConstraintRef import and constraint constructor signature.
core/src/test/java/ai/timefold/solver/core/impl/score/stream/common/ConstraintStreamFunctionalTest.java Removes indictment-related test hook.
core/src/test/java/ai/timefold/solver/core/impl/score/stream/common/bi/BiConstraintBuilderTest.java Updates ConstraintRef import and constraint constructor signature.
core/src/test/java/ai/timefold/solver/core/impl/score/stream/common/AbstractSolutionManagerTest.java Removes indictment/explanation assertions tied to removed APIs.
core/src/test/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorTest.java Removes incremental score director tests (moved/enterprise-only).
core/src/test/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorSemanticsTest.java Removes incremental score director semantics tests (moved/enterprise-only).
core/src/test/java/ai/timefold/solver/core/impl/score/constraint/ConstraintMatchTest.java Moves test into impl package and adapts to new constructor shape.
core/src/test/java/ai/timefold/solver/core/impl/domain/solution/ConstraintWeightOverridesTest.java Updates ConstraintRef import location.
core/src/main/java/module-info.java Removes exports of old API packages and adjusts internal exports for enterprise modules.
core/src/main/java/ai/timefold/solver/core/preview/api/domain/solution/diff/PlanningVariableDiff.java Marks solution diff as EE-only in Javadoc.
core/src/main/java/ai/timefold/solver/core/preview/api/domain/solution/diff/PlanningSolutionDiff.java Marks solution diff as EE-only in Javadoc.
core/src/main/java/ai/timefold/solver/core/preview/api/domain/solution/diff/PlanningEntityDiff.java Marks solution diff as EE-only in Javadoc.
core/src/main/java/ai/timefold/solver/core/preview/api/domain/solution/diff/package-info.java Adds EE-only note to solution diff package docs.
core/src/main/java/ai/timefold/solver/core/impl/solver/RecommendationConstructor.java Removes internal recommendation constructor (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/impl/solver/DefaultRecommendedAssignment.java Removes default recommended assignment impl (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/impl/solver/Assigner.java Removes assignment recommendation helper (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/SessionBasedAssertionBuilder.java Removes indictment map wiring from assertions.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/ScoreDirectorFactoryCache.java Updates ConstraintRef import and method signature formatting.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/DefaultSingleConstraintAssertion.java Switches constraint match totals map to use ConstraintRef keys and removes indictments.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/DefaultShadowVariableAwareSingleConstraintAssertion.java Removes indictment handling during initialization.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/DefaultShadowVariableAwareMultiConstraintAssertion.java Removes indictment handling during initialization.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/DefaultMultiConstraintAssertion.java Switches constraint match totals map to use ConstraintRef keys and removes indictments.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/ConfiguredConstraintVerifier.java Updates ConstraintRef import location.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/AbstractMultiConstraintAssertion.java Removes indictment collections and builds message via analysis/summary.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/test/AbstractConstraintAssertion.java Adds enterprise-backed score explanation summarization fallback.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/uni/UniConstraintConstructor.java Removes indicted mapping type parameter from constructor API.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/uni/UniConstraintBuilderImpl.java Removes indictWith(...) support.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/uni/InnerUniConstraintStream.java Removes default indicted objects mapping helper.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/tri/TriConstraintConstructor.java Removes indicted mapping type parameter from constructor API.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/tri/TriConstraintBuilderImpl.java Removes indictWith(...) support.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/tri/InnerTriConstraintStream.java Removes default indicted objects mapping helper.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/quad/QuadConstraintConstructor.java Removes indicted mapping type parameter from constructor API.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/quad/QuadConstraintBuilderImpl.java Removes indictWith(...) support.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/quad/InnerQuadConstraintStream.java Removes default indicted objects mapping helper.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/InnerConstraintFactory.java Updates ConstraintRef import location.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/ConstraintConstructor.java Simplifies constructor type parameters (removes indicted mapping).
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/bi/InnerBiConstraintStream.java Removes default indicted objects mapping helper.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/bi/BiConstraintConstructor.java Removes indicted mapping type parameter from constructor API.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/bi/BiConstraintBuilderImpl.java Removes indictWith(...) support.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/AbstractConstraintStreamScoreDirectorFactory.java Removes supportsConstraintMatching() override.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/AbstractConstraintStream.java Removes default indicted mapping hook.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/AbstractConstraintBuilder.java Removes indicted mapping plumbing when building constraints.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/common/AbstractConstraint.java Removes indicted mapping storage and related API.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/uni/UniLongImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/uni/UniBigDecimalImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/uni/BavetAbstractUniConstraintStream.java Updates constraint building without indicted mapping default.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/tri/TriLongImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/tri/TriBigDecimalImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/tri/BavetAbstractTriConstraintStream.java Updates constraint building without indicted mapping default.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/quad/QuadLongImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/quad/QuadBigDecimalImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/quad/BavetAbstractQuadConstraintStream.java Updates constraint building without indicted mapping default.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Scorer.java Updates ConstraintRef import location.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BiLongImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BiBigDecimalImpactHandler.java Updates match supplier construction without indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetAbstractBiConstraintStream.java Updates constraint building without indicted mapping default.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSession.java Removes indictment map exposure and keys match totals by ConstraintRef.
core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraint.java Updates constructor signature to remove indicted mapping.
core/src/main/java/ai/timefold/solver/core/impl/score/ScoreUtil.java Removes now-unused int parsing helper.
core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/DefaultConstraintMetaModel.java Updates ConstraintRef import location.
core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirector.java Switches constraint match totals map key to ConstraintRef and removes indictments.
core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java Delegates incremental score director factory creation to enterprise service.
core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactory.java Removes supportsConstraintMatching() default method.
core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java Removes OSS incremental score director factory (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java Updates constraint matching API surface and clarifies lack of ScoreAnalysis support.
core/src/main/java/ai/timefold/solver/core/impl/score/constraint/ConstraintMatchPolicy.java Updates Javadoc links after package removals.
core/src/main/java/ai/timefold/solver/core/impl/move/MoveTesterScoreDirector.java Removes indictments and updates constraint match totals map key type.
core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhase.java Updates imports after moving types to impl.
core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ShadowVariableUpdateHelper.java Removes indictments and updates constraint match totals map key type.
core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/DefaultPlanningVariableDiff.java Removes solution diff implementation (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/impl/domain/solution/ConstraintWeightSupplier.java Removes indirection interface (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/impl/bavet/common/InnerConstraintProfiler.java Updates ConstraintRef import location.
core/src/main/java/ai/timefold/solver/core/impl/bavet/common/BavetAbstractConstraintStream.java Removes indicted mapping handling when constructing constraints.
core/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java Adds EE-only notes on incremental score calculation config.
core/src/main/java/ai/timefold/solver/core/api/solver/SolutionUpdatePolicy.java Removes obsolete explain() reference.
core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintBuilder.java Removes indictWith from public API and updates EE-only justification note.
core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintBuilder.java Removes indictWith from public API and updates EE-only justification note.
core/src/main/java/ai/timefold/solver/core/api/score/stream/test/SingleConstraintAssertion.java Removes indictment assertion methods.
core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintBuilder.java Removes indictWith from public API and updates EE-only justification note.
core/src/main/java/ai/timefold/solver/core/api/score/stream/DefaultConstraintJustification.java Updates nullness annotations and links after constraint package changes.
core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintRef.java Moves ConstraintRef into core.api.score.stream.
core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintMetaModel.java Removes obsolete import after ConstraintRef move.
core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintJustification.java Removes obsolete ConstraintMatch reference and clarifies EE-only analysis note.
core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java Updates Javadoc linkage to match new analysis APIs.
core/src/main/java/ai/timefold/solver/core/api/score/stream/Constraint.java Removes obsolete import after ConstraintRef move.
core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintBuilder.java Removes indictWith from public API and updates EE-only justification note.
core/src/main/java/ai/timefold/solver/core/api/score/constraint/package-info.java Removes now-deleted constraint explanation package docs.
core/src/main/java/ai/timefold/solver/core/api/score/constraint/Indictment.java Removes indictment public API (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTotal.java Removes constraint match total public API (moved/enterprise-only).
core/src/main/java/ai/timefold/solver/core/api/score/calculator/IncrementalScoreCalculator.java Removes entity add/remove callbacks and adds EE-only notes.
core/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchRegistry.java Introduces new registry API for incremental calculators to report matches.
core/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchRegistration.java Introduces cancelable registration handle for matches.
core/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchAwareIncrementalScoreCalculator.java Removes old constraint-match-aware incremental calculator API.
core/src/main/java/ai/timefold/solver/core/api/score/calculator/AnalyzableIncrementalScoreCalculator.java Adds new enterprise analysis hook for incremental calculators.
core/src/main/java/ai/timefold/solver/core/api/score/analysis/package-info.java Adds new score analysis API package docs and EE-only note.
core/src/main/java/ai/timefold/solver/core/api/score/analysis/MatchAnalysis.java Converts MatchAnalysis from record to interface and updates EE-only note.
.specify/templates/checklist-template.md Removes Specify template file.
.specify/templates/agent-file-template.md Removes Specify template file.
.specify/scripts/bash/setup-plan.sh Removes Specify setup script.
.github/workflows/release-changelog-template.md Tweaks EE licensing wording in changelog template.
Comments suppressed due to low confidence (1)

core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java:16

  • ConstraintBuilder’s public Javadoc links to an internal/non-exported impl ConstraintMatchTotal type (and imports it) which users can’t access; update the documentation to reference the public ScoreAnalysis/constraint name concepts and remove the impl import.
package ai.timefold.solver.core.api.score.stream;

import ai.timefold.solver.core.impl.score.constraint.ConstraintMatchTotal;

import org.jspecify.annotations.NullMarked;

@NullMarked
public interface ConstraintBuilder {

    /**
     * Builds a {@link Constraint} from the constraint stream.
     * The constraint will be placed in the {@link Constraint#DEFAULT_CONSTRAINT_GROUP default constraint group}.
     *
     * @param constraintName shows up in {@link ConstraintMatchTotal} during score justification
     */
    default Constraint asConstraint(String constraintName) {

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 268 out of 273 changed files in this pull request and generated 4 comments.

Comment thread docs/src/modules/ROOT/pages/integration/_config-properties.adoc Outdated
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
56.7% Coverage on New Code (required ≥ 70%)

See analysis details on SonarQube Cloud

@triceo triceo merged commit 284ceec into TimefoldAI:main Apr 13, 2026
21 of 22 checks passed
@triceo triceo deleted the incremental branch April 13, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants