Skip to content

21.0.0

Choose a tag to compare

@dlbbld dlbbld released this 27 Jun 17:57
· 111 commits to main since this release
152de9c

Unwinnability soundness and endgame helpmate theorems

A correctness release for the CHA unwinnability / adjudication path, with stricter FEN legality checking. No public type or signature was removed or changed, but several adjudication verdicts and validation outcomes are observably different, so this is a major bump.

Behavioral

  • Unwinnability soundness fix. UnwinnableSemiStatic no longer applies an unsound shortcut that dropped a limited pawn from the semi-static visitor set, which could over-claim UNWINNABLE on positions where a pawn-net helpmate exists. The fix removes those false draws; the trade-off is that some pawn-wall fortress draws the shortcut also (correctly) proved are now reported UNDETERMINED rather than UNWINNABLE — sound, but less complete. Affects Board.unwinnableFull / Board.unwinnableQuick and the Adjudicator.
  • Endgame helpmate-existence theorems (KNNvK, KRRvK, KQQvK). The complete analyzer now decides these three material classes directly via the basic-helpmate-existence theorem (tracking the sibling project's 1.2.0 release) instead of running the (sometimes long) cooperative-mate search. A performance and proof-provenance improvement, not a completeness one: the search already proved these classes WINNABLE; the theorem answers immediately with a theorem-certified verdict (WinnableProof.THEOREM, no mate line).
  • Strict FEN rejects unreachable check configurations. Board.fromFenStrict (and PGN import of a [SetUp "1"] / [FEN ...] header) now rejects positions whose check configuration cannot arise from any legal move: a double check by two same-coloured bishops, two rooks, two queens, or two knights, or three or more simultaneous checkers. The new reason is StrictFenSemanticValidationProblem.INVALID_POSITION_IMPOSSIBLE_CHECK. A FEN accepted before that encodes such an impossible check is now rejected.

Internal

  • chasolver (Rust) cross-validation oracle. A differential-test harness validates ashlar against Miguel Ambrona's Rust chasolver (successor to his C++ cha / D3-Chess), confirming the Rust implementation adheres to the C++ and that ashlar never contradicts either on a legal position. Test-only; no shipped change.
  • Stockfish board-replay survey added for board-pipeline cross-checking. Test-only.