What's new in v1.8.6
⚡ CPU engine optimization
Algorithmic shortcuts for terminal evaluation in the CPU solver. No frontend changes — same SpotLibrary bundles, Game/Stack selector, login flow as v1.8.5.
Two new fast paths:
- Fold-terminal evaluator — O(nc²) dense matrix → O(1326) blocker-sum aggregation. Fold payoffs don't depend on hand strength, only card compatibility, so the matrix path is replaced by direct blocker tallies.
- Showdown rank-prefix — singleton-bucket showdown terminals now use rank-prefix sums + two card-blocker subtractions instead of the O(nc²) category table scan. Multi-original canonical buckets still take the matrix path for correctness.
Defaults flipped:
cpu_persistent_omp: 0 → 1 (persistent OpenMP team is now production default; was an opt-in Sprint 3 gated path in v1.8.0+).
New driver script knobs:
--dcfr-schedule(defaultpostflop) tunes CFR variant scheduling.--cpu-persistent-ompis now wired explicitly inbulk-presolve.mjsandpatch-mono-failures.mjs.
Diagnostics:
- Solver JSON output now includes a
cpu_diagnosticssub-object — canonical combo count, active range densities, run/block stats. Useful for understanding why a particular spot is fast or slow without enabling verbose logging.
🔧 Sidecar binary refresh
v1.8.6 ships with the freshly-built May 21 sidecar (deepsolver_core.exe, 1.88 MB) — was May 10 in v1.8.5. Includes all the algorithmic shortcuts above.
Verification
- 12/12 smoke tests pass
- 3 parity tests (
CpuKernelParity,CpuParityFast,CpuParityExtended) pass → numerical correctness preserved end-to-end - New monotone smoke test (
AsKsQs full ranges, 20 iter) catches mono-specific regressions cheaply
What this does NOT fix
- GPU OOM on wide-range × monotone boards (the v1.8.3 problem) is unchanged. Those 22 spots still fall through to the frontend OOM auto-retry path with single flop sizing.
This is a perf-only patch. v1.8.5 users will auto-update via Tauri's passive updater.