Repository navigation
21.0.0
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.
UnwinnableSemiStaticno longer applies an unsound shortcut that dropped a limited pawn from the semi-static visitor set, which could over-claimUNWINNABLEon 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 reportedUNDETERMINEDrather thanUNWINNABLE— sound, but less complete. AffectsBoard.unwinnableFull/Board.unwinnableQuickand theAdjudicator. - 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 isStrictFenSemanticValidationProblem.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.