Skip to content

Accept alternative checkmating moves in puzzles#10

Open
Qelxiros wants to merge 1 commit into
mainfrom
puzzle-accept-alternative-mates
Open

Accept alternative checkmating moves in puzzles#10
Qelxiros wants to merge 1 commit into
mainfrom
puzzle-accept-alternative-mates

Conversation

@Qelxiros

Copy link
Copy Markdown
Collaborator

Summary

Puzzle validation previously accepted only the single scripted UCI move from the Lichess solution line. That's too strict in one well-defined case: when a player finds a different checkmate than the one scripted. A mate ends the game — the puzzle is solved regardless of which mating move was played. This matches how Lichess itself handles it.

Change

validateAndApply now accepts an off-solution move if pos.Update(mv).Status() == chess.Checkmate, and marks the puzzle solved immediately (even if the scripted line had more moves — e.g. the player found a shorter mate).

The relaxation is intentionally narrow — only mating alternatives are accepted:

  • The puzzle data is a single PGN line with no eval annotations, so there's no reliable signal for "equally good non-mate move."
  • Accepting non-forced alternatives would break multi-move puzzles, since the scripted engine reply only makes sense as a response to the scripted move.

ELO submission is driven by client-side solved/unsolved state (the server doesn't re-validate moves), so this client-side change is sufficient.

Tests

  • TestPuzzleAcceptsAlternativeMate — multiple queen mates available; scripted line is Qh1#, player plays Qh2# → accepted, state Success.
  • TestPuzzleRejectsNonMateAlternative — an off-solution non-mating move (Qa2) → still Failure.

All client tests pass.

🤖 Generated with Claude Code

Puzzle validation previously accepted only the single scripted UCI move
from the Lichess solution line. When a player finds a different checkmate
than the one scripted, the puzzle is still solved — a mate ends the game
regardless of which mating move is played (matching Lichess's own rule).

validateAndApply now accepts an off-solution move if it delivers mate, and
marks the puzzle solved immediately. The relaxation is intentionally narrow:
only mating alternatives are accepted, since the puzzle data carries no eval
signal for non-mate alternatives and the scripted engine reply only makes
sense in response to the scripted move.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

@ikopke23 ikopke23 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

W comms

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants