unifierv0.3.2

Changelog

Generated from CHANGELOG.md in the project repository. Never maintained twice.

0.3.2

14 September 2026

  • addedMinimumDistance constraint and ModelBuilder::add_minimum_distance: two variables must be at least a given distance apart. Propagation prunes the other side once one side is fixed.
  • addedMaximumBucketLoad constraint and ModelBuilder::add_maximum_bucket_load: caps the summed demand × occupied time of a group of BucketedTasks inside every bucket, described by half-open BucketRanges (for example one per day). Optional tasks count only while their presence variable is 1.
  • addedBucketBlockPattern constraint and ModelBuilder::add_bucket_block_pattern: the consecutive blocks a group of tasks occupies across all buckets must form one of the allowed block-length multisets, such as [2, 1, 1].
  • addedBucketRange, BucketedTask, MaximumBucketLoad and MinimumDistance are re-exported at the crate root.

0.3.1

4 September 2026

  • fixedLnsSolver no longer returns an assignment of domain minimums, which could violate constraints, when it has nothing to destroy or ends without a feasible solution; it falls back to the repair solver instead.
  • fixedHardSoftScore's ordering also compares the summed soft score last, so it agrees with equality.

0.3.0

4 September 2026

  • addedLexicographic soft-score levels: HardSoftScore has strong, medium and weak next to the summed soft, HardSoftScore::tiered builds such a score, and ScoreLevel names the levels.
  • addedObjective::category and Objective::level (defaults: the objective's name and ScoreLevel::Weak), CategorizedObjective to set both for any objective, and ModelBuilder::add_scored_objective.
  • addedPeriodicValues constraint and ModelBuilder::add_periodic_calendar: allowed offsets in a repeating period plus absolute unavailable ranges, stored independently of the horizon.
  • addedLnsSolver::solve_from: repair from a caller-provided baseline assignment, even one that changed constraints have made infeasible.
  • changedScoreCalculator totals each soft level separately.
  • changedLnsSolver only keeps feasible solutions as its best solution and shared incumbent.
  • breakingHardSoftScore has new public fields, so struct literals no longer compile; use HardSoftScore::new or HardSoftScore::tiered.
  • breakingHardSoftScore prints every level, for example Feasible(strong=0, medium=0, weak=-11) instead of Feasible(-11).
  • breakingModelBuilder::add_constraint returns the new ConstraintId.

0.2.0

4 September 2026

  • addedValidatedGraph::check_incremental: evaluates only the constraints touched by changed variables, without starting a search, and returns ConstraintViolations.
  • addedStructured constraint explanations (Constraint::explain, Explanation), with specialized messages for NoOverlap, Cumulative and Precedence.
  • changedRequires pathwise 0.2.0 instead of 0.1.0.
  • breakingModelBuilder::compile_scheduling_model returns the ResourceId to ConstraintId mapping it built (Result<HashMap<ResourceId, ConstraintId>, _> instead of Result<(), _>), so a violation can be attributed to its resource.

0.1.1

1 September 2026

  • addedCriterion benchmarks for the solvers.
  • fixedStale references in the README.

0.1.0

1 September 2026

  • addedFirst release: constraint graph with validation, built-in and global constraints, hard/soft scoring, five solvers (Backtracking, Branch & Bound, Local Search, LNS, parallel portfolio) and scheduling primitives.