How Koga decides
- When a pawn reaches the last rank it normally becomes a queen, the strongest piece. Choosing a rook, bishop, or knight instead is an under-promotion.
- Koga only calls this a tactic when the lesser piece is genuinely better than a queen would have been — not merely a cosmetic choice in a position that is already winning every which way.
- In a crushing position any promotion wins, so a lesser piece is often picked for no real reason. Those are reported as a plain promotion, not an under-promotion.
- When an engine score is available, Koga compares the played piece against a queen on the very same square. The under-promotion is accepted only if the lesser piece scores clearly better (by a comfortable margin); otherwise it is treated as cosmetic.
- Knight for mate or check — promoting to a knight delivers checkmate (or a decisive check) that a queen on the same square cannot.
- Avoiding stalemate — a queen would leave the opponent with no legal move, throwing away the win; a rook or bishop keeps the position alive and winning.
- Avoiding a queen blunder — promoting to a queen would walk into a forced mate against us, so a lesser piece is the only winning choice.
- Koga reads the promotion piece straight from the move played, and also scans the player's moves deeper in the engine's main line.
- A rook or bishop promotion that appears later inside the line goes through the same stalemate and mate probes as the immediate move (the immediate move can also be scored by an engine; a later one cannot): it is an under-promotion only when a queen would stalemate, walk into a stalemate trap or lose to a forced mate. Engines write =R in won endings where =Q wins the same, and that is a plain promotion. A knight deeper in the line is still taken at face value: a later e8=N+ fork is never cosmetic.
Test positions (the examples that guard against regressions)
Knight promotion that mates (queen would only stalemate)
A constructed endgame. Black plays g1=N#, delivering checkmate. Promoting to a queen instead would leave White with no legal move — stalemate and a thrown-away win. The mating knight is the genuine under-promotion; Koga scores the finished positions directly, no engine needed.
Real game: knight promotion that mates, alongside the mate label
Lichess QAnl6. The knight promotion g8=N# delivers checkmate that a queen on g8 cannot, so it is a genuine under-promotion. Because the promotion is *how* mate is delivered, Koga keeps under-promotion as a co-headline alongside checkmate rather than hiding it behind the mate.
Saavedra: rook promotion to dodge stalemate
The Saavedra study. White plays c8=R rather than c8=Q. After c8=Q Black answers Rc4+, and capturing the rook with Qxc4 stalemates Black — a draw. The rook keeps the win, so it is a real under-promotion.
Rook promotion because a queen stalemates at once
A real endgame position. Promoting to a queen on d8 would immediately stalemate the black king — an instant draw. The rook leaves Black a legal move while keeping the position winning, so d8=R is a true under-promotion.
Knight promotion because a queen loses by force
A real position where promoting to a queen on c8 walks into a forced mate against White (…Qxd6+ Kxd6 and Black's heavy pieces finish). The played c8=N+ sidesteps that line and keeps White winning, making the knight a genuine under-promotion.
Cosmetic rook promotion (NOT flagged)
A constructed, already-won position. The pawn promotes on e8 to a rook, but a queen would win just as easily — there is no concrete reason for the lesser piece. Koga reports a plain promotion, not an under-promotion.
Cosmetic knight promotion (NOT flagged)
A constructed, already-won position. The pawn promotes on e8 to a knight that gives no check and serves no concrete purpose a queen would not serve better. It is reported as a plain promotion, not an under-promotion.
Cosmetic mating promotion (NOT flagged)
Lichess n5QUx. Black plays …b1=R#, but …b1=Q# mates just as well, so the minor piece is not required. The cosmetic rule applies even when the promotion delivers mate: Koga reports a plain promotion, not an under-promotion. Only a mating minor promotion the queen cannot replicate (e.g. QAnl6 g8=N#) is a genuine under-promotion.
Cosmetic rook promotion deeper in the line (NOT flagged)
Lichess UHf4SDkl, 43…f6 (a ChessMood coach's game, reported 22 Sep 2026: "+11 both moves"). The best move is f6, not a promotion; the engine line continues 44.Bf4 a1=R, where a1=Q wins the same and no stalemate or mate trick exists. Koga reports a plain promotion for the line, not an under-promotion.
Cosmetic mating promotion in the line (NOT flagged)
Lichess 0rESt. The forced line ends 1…Qxc2+ 2.Ka2 b1=R#, but …b1=Q# mates equally, so the rook is not required. The cosmetic rule applies even when the mating promotion sits deeper in the line, not just on the move being judged: Koga reports a plain promotion. Only a mating minor promotion the queen cannot replicate (e.g. QAnl6 g8=N#) is a genuine under-promotion. The board is shown right after 1…Qxc2+: the king on b1 must go to a2, and the b2-pawn then promotes on b1 with mate.
Golden puzzles — every real Lichess puzzle Koga is tested against for this tactic (10)
Lichess 88YNz
Lichess 88YNz (rating 908). Solution: e8=N+ Kf8 Nxf6. Koga intentionally does not flag Under Promotion here — this minor-promotion fork needs engine evidence; the broad rule caused false positives.
Lichess 6AByk
Lichess 6AByk (rating 1950). Solution: Qxb6 Qxb6 c8=N+ Kd7 Nxb6+.
Lichess 0D1rh
Lichess 0D1rh (rating 818). Solution: g1=N+ Kf2 Nxf3. Koga intentionally does not flag Under Promotion here — this minor-promotion fork needs engine evidence; the broad rule caused false positives.
Lichess 6VZpZ
Lichess 6VZpZ (rating 1645). Solution: b8=N+ Kb6 Rxf1.
Lichess 0Fh2r
Lichess 0Fh2r (rating 1095). Solution: f2 Nd5 f1=N+.
Lichess 8NGrX
Lichess 8NGrX (rating 1075). Solution: dxe1=N+ Kh1 Rf1#.
Lichess 9bjTk
Lichess 9bjTk (rating 2155). Solution: d1=N+ Kf4 Qf5#. Koga intentionally does not flag Under Promotion here — this minor-promotion mate case needs engine evidence; the broad rule caused false positives.
Lichess 65kp7
Lichess 65kp7 (rating 1339). Solution: b8=N+ Ke6 Nxc6.
Lichess 9wOXd
Lichess 9wOXd (rating 2039). Solution: d6+ Kd8 e7+ Kd7 exf8=N+ Kd8 Bxc4.
Lichess 10q1p
Lichess 10q1p (rating 2057). Solution: fxg7+ Kg8 Qxh7+ Kxh7 gxf8=N+ Kg8 Nxe6.