How Koga decides

Definition Promoting to less than a queen — on purpose
  • 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.
Cosmetic filter Why most minor promotions are NOT flagged
  • 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.
Concrete reasons When a lesser piece truly beats a queen
  • 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.
When we look Where the promotion is read
  • 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 minor promotion that appears later inside a forced line is taken at face value as an under-promotion; the cosmetic check above applies only to the immediate move being classified.

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.

✓ detectedKnight · matetest_terminal_promotion_comparison_does_not_need_engine_response
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . k
. . . . . . . .
. . . . . . . K
. . . . . q . .
. . . . . . n .
Piece that moves
King
Attacking piece

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.

✓ detectedKnight · mate♟ Lichess QAnl6test_knight_promotion_mate_emits_underpromotion_as_motif
. . . . . . N .
p . p . R . . .
. . . p . k . .
. p . . . P . .
. . . . . . K .
. . . . . . . .
P . . . . . . .
. . r . . . . .
Piece that moves
King
Attacking piece

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.

✓ detectedRook · stalemate avoidancetest_saavedra_stalemate_avoidance_kept_as_underpromotion
. . R . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . r . . . .
. . . . . . . .
. . K . . . . .
k . . . . . . .
Piece that moves
King
Targeted / won piece

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.

✓ detectedRook · stalemate avoidancetest_queen_promotion_immediate_stalemate_kept_as_underpromotion
. . . R . . . .
. . . . . k . .
. R . . . . . .
. . . . B . p .
. . . . . p B .
. . . . . P . .
. . . . . . K P
. . . . . . . .
Piece that moves
King

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.

✓ detectedKnight · avoids losing linetest_queen_promotion_loses_to_forced_mate_kept_as_underpromotion
. . N . . . . R
. . . K . k . .
. . . P . . . .
. . . . . . . .
. . . . . P . .
. . . . . . . .
. . . q . . . .
. . . r . . . .
Piece that moves
King
Attacking piece

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.

✗ not detectedRook · cosmetictest_cosmetic_rook_promotion_treated_as_promotion
. . . . R . . .
. . . . . . . k
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . K . . .
Piece that moves
King

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.

✗ not detectedKnight · cosmetictest_cosmetic_knight_promotion_no_check_treated_as_promotion
. . . . N . k .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . K . . .
Piece that moves
King

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.

✗ not detectedRook · cosmetic mate♟ Lichess n5QUxtest_cosmetic_mating_rook_promotion_is_promotion_not_underpromotion
. . . . . . . .
. . . Q . p p .
P . . . p . k .
. . . p . . . p
. . . b . . . .
. . . . . . . .
. . . . . R P P
. r . . . . K .
Piece that moves
King

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.

✗ not detectedRook · cosmetic mate (in line)♟ Lichess 0rESttest_cosmetic_mating_rook_promotion_deep_in_pv_is_promotion
. . r . k b . r
. . . . . p p p
p B . . . . . .
. . . Q . . P P
. . . . . P . .
P . . . . . . .
. p q . . . . .
. K . R . . . R
Piece that moves
King

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.

✗ not detectedKnown boundary♟ Lichess 88YNz
. . . . . . . .
. . . . P p k .
. . . . . q p .
. . . . . . . p
p . . Q . . . .
P . . . . P . .
. . . . . P K .
. . q . . . . .

Lichess 6AByk

Lichess 6AByk (rating 1950). Solution: Qxb6 Qxb6 c8=N+ Kd7 Nxb6+.

✓ detectedrating 1950♟ Lichess 6AByk
. Q . . . . . .
. . P . k . . .
. n q p . . . p
. . . . p p . .
. . . . . . . .
. . . . . . P K
. P . . . P . P
. . . . . . . .

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.

✗ not detectedKnown boundary♟ Lichess 0D1rh
. . . . . . . .
. . . . . . . .
. . . . . . q .
. . . . . . . .
. . . . . . . .
. . . . N Q . .
. . . . K . p k
. . . . . . . .

Lichess 6VZpZ

Lichess 6VZpZ (rating 1645). Solution: b8=N+ Kb6 Rxf1.

✓ detectedrating 1645♟ Lichess 6VZpZ
. . . . . . . .
. P . . . R . .
. . k . p . . r
. . . p . . . .
. . . P . . . .
. . . . . . . p
P . . . . . . K
. . . . . q . .

Lichess 0Fh2r

Lichess 0Fh2r (rating 1095). Solution: f2 Nd5 f1=N+.

✓ detectedrating 1095♟ Lichess 0Fh2r
. . . . . . . .
. . . . . . . .
. . . . . . . p
. . . . . k p P
. . . . . . . .
. . N p . p . .
. . . K . . . .
. . . . . . . .

Lichess 8NGrX

Lichess 8NGrX (rating 1075). Solution: dxe1=N+ Kh1 Rf1#.

✓ detectedrating 1075♟ Lichess 8NGrX
. . . Q . . . .
. . . . . . k .
. . . . . . . .
. P . . . . . p
P . Q . . p p .
. . . . . r . .
. . . p p . K P
. . . . R . . .

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.

✗ not detectedKnown boundary♟ Lichess 9bjTk
. . . . k . . .
p . Q . . p . .
. . . . p . . .
. . . . P . . .
. . . P . . . p
P . P . K P . .
. P q p R . . .
. . . . . . . .

Lichess 65kp7

Lichess 65kp7 (rating 1339). Solution: b8=N+ Ke6 Nxc6.

✓ detectedrating 1339♟ Lichess 65kp7
. . . . . . . .
K P . k . . . .
. . q B . . . .
P . n . P . p .
. . . . . . P .
. . . . . . . .
. . . . . . . .
. . . . . . . .

Lichess 9wOXd

Lichess 9wOXd (rating 2039). Solution: d6+ Kd8 e7+ Kd7 exf8=N+ Kd8 Bxc4.

✓ detectedrating 2039♟ Lichess 9wOXd
. . . . . r . .
. . . . k B p .
. . . . P . P r
. . p P K . . .
. . q . . . . p
. . . . . . . .
. . . . . P P .
. . . . . . . .

Lichess 10q1p

Lichess 10q1p (rating 2057). Solution: fxg7+ Kg8 Qxh7+ Kxh7 gxf8=N+ Kg8 Nxe6.

✓ detectedrating 2057♟ Lichess 10q1p
. . . . . r . k
p p . . n . p p
. . p . q P . .
. . . p . . . .
. . . . . . . .
. . B Q . . P .
P P . . . . . P
. . . . . . . K