How a puzzle gets two answers

The miner keeps a position only when the winning move is unique. For most positions that is a centipawn question: the runner-up has to lose the win, or win a whole piece less. Mates saturate the centipawn scale, so they got their own rule: the best move mates strictly faster than the second-best move.

That is a race, not uniqueness. Mate in two beats mate in three, the position passes, and nothing in the record says the mate in three exists. By September, 29% of the served mate puzzles had a second mating move at the first ply. Nobody reported it. A solver who is told they are wrong assumes they are wrong.

The patch, and why it went

The first fix went into the grader: a move that was not the stored one was searched for a forced mate and accepted if one was found. The search ran on the request path, so it stopped three moves deep, and longer puzzles stayed traps with a special prompt over them. Too shallow, too clever, and none of it should be specific to xiangqi. Chess puzzle sites settled this years ago.

The lichess rule

Lichess generates a mate puzzle only if the mating move is unique at every solver move. A runner-up that also mates, at any length, means no puzzle. At play time the solver plays the stored line, with one exception: any move that delivers mate right now is accepted. That needs no search. It is a board check.

The two halves fit. Everything the grader would have to search for, the generator already refused to publish, so the grader can be dumb. The miner now works this way (the gate is one function), the three-move search is gone, and so is the "fastest mate" prompt; what the grader accepts instead is a board check. The one exception matches lichess’s: a position where the stored move mates in one stays a puzzle even if other moves also mate in one, because the grader takes any of them.

The chariot on a9 mates on a10. The chariot on i9 mates on i10. Both are accepted, and a position like this is still a puzzle. This is the grader’s own test fixture.

382 puzzles withheld

Reading the audit evidence for every served mate puzzle: 661 of 965 had a second mating move somewhere in the line. Most were on the last move, where the stored move mates in one and so does something else, which the exception covers. 472 had a second mate at a move that was not a mate in one. 90 were already withheld for another reason. The other 382 were withheld on 2026-09-11.

Mate puzzlesCount
In the corpus965
With a second mating move somewhere in the line661
Second mate at a move that is not a mate in one472
Already withheld for another reason90
Withheld on 2026-09-11382
The funnel from every mate puzzle to the ones pulled.

That is 27% of the served xiangqi puzzles. The corpus went from 1,415 to 995, and every puzzle left has one answer, checked at every move. The strict rule costs mates: the pilot published about one puzzle for every three games, and the mate half of that will drop by something like 40%. I will know the real number after the next thousand-game batch. Fewer puzzles that are all puzzles is the right trade.

Three things follow from this. The next thousand games get mined under the strict rule, and the yield number goes in the mining explainer. The puzzles that stayed have started carrying the names of the patterns they show (马后炮, 铁门栓, 双车错), which gets its own post once there is a page per pattern. And the rule settles mates only: a position where two different moves both win a piece is still refused outright, and whether to accept a set of answers there is the open question.

Try one that has one answer

Today’s puzzle, from the corpus that stayed. If you find a mate the site does not accept, that is now a bug, and I want to hear about it.

Solve xiangqi puzzlesHow the miner works