solverforge-solver 0.11.1

Solver engine for SolverForge
Documentation
# solverforge-solver

`solverforge-solver` contains SolverForge's runtime phase assembly, move
implementations, selector builders, construction heuristics, local search, and
retained solver lifecycle.

## Grouped Scalar Reachability

Normal scalar construction is single-slot: each nullable scalar variable is
assigned independently through its descriptor/runtime scalar binding. That
behavior remains the default whenever a construction heuristic has no
`group_name`.

Use grouped scalar construction when a model has nullable scalar variables that
must change together before a hard-feasible state is reachable. A model declares
named `ScalarGroupContext` entries, and a construction heuristic opts in with
`group_name`. The grouped route evaluates a whole `ScalarGroupCandidate` as one
compound scalar move, applies all legal edits atomically, and marks every
touched scalar slot complete through the normal committed mutation path.

`GroupedScalarMoveSelector` exposes the same declared groups during local search.
It is a first-class scalar neighborhood, not cartesian-product composition.

## Compound Conflict Repair

`CompoundConflictRepairMoveSelector` is the stock conflict-aware repair
primitive. Domain providers still supply candidate edit hints, but the framework
owns selector limits, duplicate filtering, legality checks, not-doable filtering,
hard-improvement filtering, scoring, tabu identity, and affected-entity
reporting through `CompoundScalarMove`.

Configured constraint keys resolve against scoring metadata by exact identity:
package-qualified constraints use `ConstraintRef::full_name()` strings, while
package-less constraints use the short name.

This keeps app-specific logic as domain candidate generation only. Applications
should not add seed repair, relaxed hard constraints, fake variables, or private
solver orchestration to make coupled scalar states reachable.