Skip to content

Releases: maelic13/rarog

Rarog 2.2.0

Choose a tag to compare

@maelic13 maelic13 released this 24 Jun 17:56

Rarog 2.2.0 fits the engine's evaluation to data. Phase 3 rebuilt the eval as a
fully parameterised, trace-instrumented function (every term seeded inert, so the
rewrite was bench-identical), and Phase 4 then fit that enlarged eval to a 2.19M-position
self-play set — a staged offline Texel tune, each stage SPRT-gated. This is the single
largest strength jump in the project so far.

Against an external field, Rarog 2.2.0 plays roughly +240 Elo stronger than 2.1.0,
placing it at approximately 3000 CCRL.

Added

  • King-danger evaluation — a single danger accumulator (attacker units, safe checks,
    weak king-ring, king flank, pawnless flank, queen relief) feeding a non-linear
    danger→score curve.
  • Threat evaluation v2 — per-victim threat-by-minor/rook tables, a refined
    weakly-defended-piece term (which retired the old flat hanging penalty), safe-pawn-push
    threats, and weak-piece / restricted-square terms.
  • Per-count mobility tables for knight/bishop/rook/queen, replacing the flat per-move bonus.
  • Expanded pawn-structure & passed-pawn evaluation — rank-scaled connected pawns,
    supported / free-stop / safe-stop / candidate passers, blocked-passer and ideal-blockader
    terms, plus assorted positional terms (outposts, rook files/7th, bishop long-diagonal,
    space, king-centrality danger).
  • Material-imbalance evaluation — symmetric per-piece-pair quadratic.
  • Exact endgame knowledge — a KPK bitbase plus scale-factor handling for known
    drawish/won material (KBNK mating drive, wrong-corner bishop, opposite-coloured bishops,
    bare-rook and insufficient-material draws).
  • Eval cache + lazy-eval fast path — a whole-position cache and a fast path that skips
    the expensive positional terms when the material+PST margin is already decisive.
  • Offline Texel-tuning tooling under tools/texel-tuner/ and tools/texel/.

Changed

  • Material values and piece-square tables refit against the now-complete term set
    (classical piece ratios preserved).
  • The bench fingerprint changed as eval behaviour changed.

Binaries

Use the most advanced asset your CPU supports (pext for BMI2/PEXT CPUs, avx2 for
x86-64-v3, plain x86-64 for maximum compatibility, arm64 for ARM). Binaries are built
with portable CPU targets and attached automatically below.

Full changelog: v2.1.0...v2.2.0

Rarog 2.1.0

Choose a tag to compare

@maelic13 maelic13 released this 19 Jun 19:33

The release focuses on a repo-contained SPRT/SPSA testing
harness and a long sequence of individually gated search-tuning and
robustness fixes. The single largest change is a Stockfish-style
time-management rewrite that fixed a movetime budget bug — by far the
dominant contributor to the cumulative strength gain.

Highlights

  • Time management rewrite (+81 Elo, confirmed by SPRT): fixed a bug where
    a small movetime budget (e.g. 100 ms/move) collapsed search to depth 1
    because the move-overhead subtraction could reduce the budget to ~1 ms.
    Clock-mode budgeting now follows Stockfish's structure (optimum/maximum
    scaling, falling-eval / best-move-instability / effort-factor stopping).
  • Time-safety valve: eliminated clock-mode time forfeits at fast time
    controls (28 forfeits in a ~2,200-game gauntlet → 0), without regressing
    normal-time allocation. Re-confirmed across two independent test harnesses.
  • Search tuning, each independently SPRT-confirmed: quiescence TT-bound
    stand-pat refinement (+6.5 Elo), per-move quiet futility pruning (+8 Elo),
    a harness-corrected LMR retune (+4 Elo), and an SPSA-tuned pruning/margin
    pass (+6 Elo).
  • New repo-local testing/tuning harness: fastchess-based SPRT, SPSA via
    weather-factory, PGO test-build scripts — all repo-contained, no
    machine-global paths.
  • Minor robustness/perf cleanup: shrunk a hot-path struct, removed a
    per-call board allocation, removed a provably-dead search arm.

Evaluated and rejected (for transparency)

Several speculative ports were tried and did not survive SPRT testing, so
they were reverted rather than shipped: a ProbCut port (−24.5 Elo), history
persistence across searches (−12.4 Elo), a singular-extension
double-extension cap (inconclusive), and an LMR "do-deeper" re-search margin
(−1.4 Elo).

Full changelog: see CHANGELOG.md

Rarog 2.0.2

Choose a tag to compare

@maelic13 maelic13 released this 01 Jun 21:11

Rarog 2.0.2 is a tournament-stability patch release.

Fixed

  • Fixed a rare quiescence-search panic that could occur when a deep tactical/check sequence reached the final fixed search-stack slot.
  • This crash could prevent Rarog from reporting bestmove; some GUIs, including Little Blitzer, could then classify the event as an illegal move even though no illegal move was actually produced.

Added

  • Added a direct regression test for the quiescence maximum-ply guard.
  • Added regression coverage for the two Little Blitzer artifact positions that verifies Rarog returns legal root moves.

Rarog 2.0.1

Choose a tag to compare

@maelic13 maelic13 released this 01 Jun 18:34

Patch release focused on search strength, time management, and release build reliability.

Added

  • Added Internal Iterative Reduction for PV nodes when no usable transposition-table move is available.
  • Added TT PV-node tracking so pruning and reductions can treat PV-touched nodes more carefully.
  • Added history-based capture pruning for losing captures.
  • Added negative capture-history updates for good captures searched before a beta cutoff.
  • Added correction-history updates for Lower and Upper bound nodes, not only Exact/PV nodes.
  • Added a light simple logo asset alongside the dark variant.
  • Added regression coverage for short movetime searches, long endgame searches, and long reversible games.

Changed

  • Improved aspiration windows with exponential widening after fail-high or fail-low results.
  • Increased correction-history table size from 16k to 64k entries.
  • Unified capture-history beta-cutoff bonus with the quiet-history bonus formula.
  • Extended singular extensions to depth 4 and above.
  • Extended quiet-history pruning to depth 7.
  • Improved LMR re-search node-type handling.
  • Parallelized transposition-table clear operations.
  • Increased engine and search worker thread stack sizes to avoid stack overflow in deeper tactical/endgame searches.
  • Improved time management by avoiding a new iteration when the previous iteration suggests it may overrun the hard time limit.
  • Hardened PGO release training with bench timeouts and child-process cleanup.

Fixed

  • Fixed short fixed-time searches so go movetime 100 completes at least depth 1 before returning bestmove.
  • Fixed a long-game board-history limit by restoring dynamically growing move history.
  • Fixed TT PV flag handling so PV status is not incorrectly preserved across overwritten entries.
  • Fixed release PGO training so a stuck or incomplete bench run fails cleanly instead of hanging.

Rarog 2.0.0

Choose a tag to compare

@maelic13 maelic13 released this 30 May 08:27

This is the first release under the new Rarog name.

The engine was previously released as Lynx through version 1.4.3. It has been renamed to avoid confusion with an existing chess engine. Old Lynx releases remain available historically; new releases will use the Rarog name going forward.

Changed

  • Renamed the engine from Lynx to Rarog.
  • Updated the UCI engine identity to Rarog 2.0.0.
  • Updated executable names and release asset names to use rarog.
  • Updated Cargo package metadata, repository links, README, changelog, tests, and build helpers.
  • Renamed the internal PEXT build cfg from lynx_pext to rarog_pext.

Compatibility Note

If you had Lynx configured in a chess GUI, add this release as a new UCI engine using the new Rarog executable. Existing Lynx binaries and old release assets are unchanged.

Lynx 1.4.3

Choose a tag to compare

@maelic13 maelic13 released this 29 May 14:22

Patch release with a small retained search update and release-build polish.

Changed

  • Raised the ProbCut margin from beta + 160 to beta + 180.
  • Relaxed late-move pruning thresholds so deeper late quiet moves are pruned less aggressively.
  • Improved capture move ordering by using full SEE values for profitable captures instead of only threshold SEE.
  • Renamed PGO build outputs to include -pgo before the executable suffix, so PGO and non-PGO builds can coexist in target/dist.

Build Notes

PGO remains available through local xtask builds:

cargo xtask build --arch avx2 --pgo
cargo xtask build --arch pext --pgo

PGO training remains bench-only.

Lynx 1.4.2

Choose a tag to compare

@maelic13 maelic13 released this 29 May 10:16

Lynx 1.4.2 is a release-build and CPU-target update. It adds a dedicated BMI2/PEXT x86-64 build, switches release asset generation to a cross-platform Rust xtask, adds optional PGO release builds, and removes the incomplete UCI MultiPV path.

The single-PV search and handcrafted evaluation behavior remain aligned with 1.4.1.

Added

  • Added a dedicated pext x86-64 release asset for CPUs with BMI2/PEXT support.
  • Added compile-time PEXT sliding-piece attack tables.
  • Added a runtime BMI2 check for PEXT builds, so unsupported CPUs get a clear error instead of an illegal-instruction crash.
  • Added cross-platform release builds through cargo xtask build --arch <x86-64|avx2|pext|arm64>.
  • Added optional PGO builds through cargo xtask build --arch <asset> --pgo.

Changed

  • Replaced AVX-512 release assets with BMI2/PEXT assets.
  • GitHub release assets are now built through cargo xtask build.
  • Compacted PEXT slider metadata so PEXT builds no longer carry unused magic-bitboard fields.
  • Documented PGO and asset-selection guidance in the README.

Removed

  • Removed UCI MultiPV support and the sequential MultiPV root-search path. This was incomplete analysis functionality and is not needed for normal tournament play.

Asset Guide

Use the most advanced binary your CPU supports:

Asset suffix Use when
x86-64 Most compatible Intel/AMD 64-bit build.
avx2 Intel/AMD CPU supports x86-64-v3/AVX2.
pext Intel/AMD CPU supports BMI2/PEXT. Benchmark against avx2 on your CPU.
arm64 ARM64 Linux, Windows on ARM, or Apple Silicon macOS.

If unsure, use x86-64 for Intel/AMD systems or arm64 for ARM systems.

Lynx 1.4.1

Choose a tag to compare

@maelic13 maelic13 released this 28 May 20:07

This is the first public 1.4-series release. It includes the unreleased 1.4.0 TT/hash-move safety work together with 1.4.1 search hotpath and move-ordering improvements.

Highlights

  • Hardened TT/hash move handling so stale, aliased, or corrupted TT moves cannot enter search or emitted PVs.
  • Added validated TT-first move picking.
  • Improved UCI ponder support with TT-derived ponder fallback.
  • Reduced overhead in search hotpaths after the TT safety work.
  • Improved quiet move ordering with direct-check bonuses and expanded low-ply history.

Fixed

  • Fixed malformed TT/hash moves being accepted as searchable moves.
  • Fixed illegal PV risk from stale or corrupted TT moves, including SMP/hash-aliasing cases.
  • Fixed validation of impossible moves, wrong-side moves, friendly-occupied destinations, malformed king moves, and malformed special-move encodings before make_move.
  • Fixed fast legal validation for recaptures that remove a checking piece, such as ...gxf6 after Nxf6+.

Search And Move Ordering

  • Reworked move picking to emit a validated TT move first.
  • Skipped duplicate generated moves after the TT move has already been emitted.
  • Added a direct-check ordering bonus for quiet checking moves.
  • Expanded low-ply quiet history from 4 plies to 8 plies.
  • Skipped duplicate TT capture scoring in staged move picking.
  • Batched Lazy SMP shared node accounting so threaded search avoids aggregate atomic node increments on every node while still reporting exact final totals.

Ponder And PV Safety

  • Added TT-derived ponder fallback from the child position when the searched PV does not already contain a ponder move.
  • Ensured TT moves are canonicalized and legally validated before use in search, quiescence, PV construction, or ponder fallback.
  • Added PV replay safety coverage for tournament-derived malformed TT/hash-move positions at Threads=1 and Threads=8.

Tests And Validation

  • Added board-level pseudo-legal and legal move validation APIs for raw UCI or TT-shaped moves.
  • Added board benchmark coverage for direct legal move validation.
  • Added regression tests for:
    • friendly-occupied king moves
    • impossible king movement
    • malformed tournament-derived TT moves
    • pseudo-legal pinned moves
    • TT-first move picking
    • TT-derived ponder fallback
    • direct-check quiet move ordering
    • expanded 8-ply low-ply history boundaries
    • UCI PV replay legality with one and eight search threads

Lynx 1.3.4

Choose a tag to compare

@maelic13 maelic13 released this 28 May 16:10

Patch release focused on completing UCI ponder behavior and Lazy SMP threaded search semantics.

Fixed

  • Fixed ponderhit handling so converting a ponder search to a normal search preserves elapsed thinking time instead of restarting the search clock.
  • Fixed threaded search accounting so UCI nodes, tbhits, stop, quit, and ponderhit state are shared across the main and helper threads rather than being reported or limited from the main thread alone.

Changed

  • Enabled threaded search for node-limited and MultiPV searches.
  • Reworked parallel best-result selection to use weighted helper votes, with decisive scores, PV availability, depth, score, and the main thread used as tie-breakers.

Lynx 1.3.3

Choose a tag to compare

@maelic13 maelic13 released this 28 May 12:05

Patch release focused on UCI tournament compatibility, protocol diagnostics, and illegal-move prevention.

Added

  • Added UCI go perft N support for counting legal leaf nodes from the current position.
  • Added advertised UCI Ponder option.
  • Added process-level UCI regression tests that launch the engine binary and verify protocol behavior.

Changed

  • Invalid position commands now report a clear critical UCI error and exit instead of continuing from the previous board state.
  • Unknown UCI commands and unknown options now print explicit diagnostics.
  • Empty go now starts an unbounded search until a limit or control command stops it.
  • UCI coordinate move parsing now accepts uppercase square text such as E2E4.
  • setoption now waits for an active search to finish before applying engine configuration.

Fixed

  • Fixed compatibility with tournament managers that emit non-standard fullmove number 0 in FEN by normalizing it to fullmove 1.
  • Fixed root draw positions, including fifty-move claim and dead-material positions, so Lynx still returns a legal move when legal moves exist.
  • bestmove 0000 is now reserved for positions with no legal moves.