releases
solverforge 0.20.x: Guided Search and Grouped-Scalar Neighborhoods
Accepted-count foraging, pooled construction scratch, guided scalar search, corrected late acceptance, and score-authoritative grouped neighborhoods across solverforge 0.20.0–0.20.4.
solverforge 0.20.x follows solverforge 0.19.14 and was published on
crates.io (2026-10-12 through 2026-10-13). The line starts with accepted-count
foraging and covers patches through 0.20.4. Rust 1.95 remains the workspace
floor. For the current
manuals, use the core overview and
0.21.x release note.
What Changed
Accepted-count foraging and pooled scratch (0.20.0–0.20.2)
Grouped-scalar default local search uses AcceptedCount(256): each step
compares up to 256 accepted candidates, or drains the union, before applying
the best. Explicitly configured foragers keep their chosen policy. The
previous default stepped with FirstLastStepScoreImproving and no cap,
stopping at the first step-improving candidate and discarding the remaining
accepted work; the forager change alters default search depth, not a
configuration contract.
Precedence-route cycle checks, precedence scoring, and grouped-scalar construction reuse scratch buffers. Construction and search batch inner-loop control polls and latch observed stop requests; phase-boundary limits remain binding. Assignment indexes recycle empty row buffers, and fully forced rule edges avoid redundant membership reads. These patches do not add model APIs.
Guided native scalar search (0.20.3)
search_entity_order_key and search_value_order_key on
#[planning_variable], with matching ScalarVariableSlot builders, guide
native change enumeration. Swap uses the entity key for its left traversal.
Lower keys are tried first, equal keys retain seeded order, and missing keys
sort last. Construction-order hooks remain construction-only. Construction
also reuses rule verdicts already computed during blocker discovery.
Score-authoritative neighborhoods and late acceptance (0.20.4)
Grouped-scalar families use pressure and scarcity to order bounded discovery, not to replace the model’s score. The final edit set still obeys domains, required rows, capacity, and assignment rules; the score, acceptor, and forager decide among legal candidates. Families share the candidate budget by round-robin pulls. Pair and cycle coordinates stream without eager Cartesian materialization or unrelated internal walk cutoffs.
Sparse hypothetical overlays preserve committed membership during augmenting, ejection/reinsert, and required-batch discovery. Final validation subtracts departures before arrivals and checks post-edit sequence edges, including vacated source edges.
Diversified late acceptance accepts equality with the step score or strict
improvement over the worst history score. Its ring advances per evaluated
candidate, with exact worst-score occurrence tracking; the former tolerance
configuration and with_default_tolerance constructor are removed. Plain late
acceptance resets its entire history on a new phase-best score.
Published Version Boundaries
| Surface | Version | Notes |
|---|---|---|
| Historical core line | solverforge 0.20.0–0.20.4 |
Rust 1.95; use matching source and crate APIs; 0.20.0–0.20.1 registry and release artifacts remain available for those patches |
| CLI | solverforge-cli 3.3.3 |
Scaffolds core 0.19.7, UI 0.9.0, maps 2.1.4, MCP rmcp 3.5.0 |
| Python | solverforge-py 0.6.10 / PyPI solverforge 0.6.10 |
Runtime 0.19.7 and UI 0.9.0 |
| Worked use cases | Eight released apps | Runtime 0.19.7 and UI 0.9.0 |
Independent CLI, Python, and app packages do not inherit a core upgrade.
Patch History
| Version | Date | Notes |
|---|---|---|
0.20.4 |
2026-10-13 | Score-authoritative grouped-scalar neighborhoods, steered family budgets, sparse final-edit validation, corrected DLAS and best-anchored late acceptance; removes DLAS tolerance. |
0.20.3 |
2026-10-12 | Native scalar search_entity_order_key / search_value_order_key hooks and reuse of blocker rule verdicts. |
0.20.2 |
2026-10-12 | Batched control polls, recycled assignment-index rows, and forced-edge short-circuiting; no new model API. |
0.20.1 |
2026-10-12 | Pooled precedence-route and grouped-scalar construction scratch; no API change. |
0.20.0 |
2026-10-12 | Grouped-scalar default local search forages with AcceptedCount(256); no API change. |
0.19.14 |
2026-10-12 | Dense-key existence bookkeeping and the borrowed-row key rule on every later chained join. |
0.19.13 |
2026-10-11 | Per-key occurrence existence engine and caller-owned notification buffers. |
Upgrade Checklist
- Remove DLAS
tolerancesettings and replace custom uses of the removed tolerance constructor withDiversifiedLateAcceptanceAcceptor::new(size). - Compare late-acceptance and grouped-scalar solve quality at your own time limit; candidate ordering and acceptance trajectories can differ.
- Use search-order hooks for local-search guidance, not construction hooks.
- Upgrade CLI-generated apps deliberately: CLI 3.3.3 still targets core 0.19.7.
- For an upgrade to the current source line, follow the 0.21.x checklist.
Where to read next
Read Local Search and Configuration. The full 0.20.x range and upstream changelog record the patch boundaries.