How Koga decides
- After the move, a single one of our pieces attacks two or more enemy pieces at the same time. The opponent can only answer one threat, so we win the other.
- Each target must be worth taking: it is either undefended, or worth strictly more than the forking piece, so capturing it gains material. The enemy king always counts as a target.
- A target that is defended and worth no more than the forker is just an even or losing trade, not a real fork threat — we ignore it.
- We only count targets the forking piece did NOT already attack from its old square. A piece that was hitting one of the targets before the move is no fresh threat — the fork has to be made by this move.
- Exception for captures: when the move captures a piece that was blocking the forker's own line, that line opens up and the pieces behind it become genuine new targets.
- Defended targets that are not worth more than the forker can still count when the move adds one more attacker and a static exchange shows we come out ahead on that square.
- If the forking piece is captured on the very next move and the whole sequence does not win material, the fork was only a sacrifice to set up something else. We keep the geometry on record (as enabling) but do not headline it as a fork.
- A fork that gives check, or one where the forking piece survives the opponent's reply, is treated as real: the opponent must save one target and lets the other go.
- We also look a little deeper: a check-fork can pay off through the king's forced reply (the king is dragged onto the forking piece and the recapturing piece is then won), even when the other target is never actually taken.
- A fork (one piece, two targets) and a discovered/double attack (a piece moves to unmask a second attacker) can describe the same move. We keep whichever wins the heavier material.
- When the fork's targets are the bigger prize, the fork is the headline and the rival pattern is dropped; when the other pattern wins more, the fork steps aside.
Test positions (the examples that guard against regressions)
Knight check-fork
A constructed position. The knight has gone to c7, giving check to the king on e8 while also attacking the rook on a8. The king must move, so the rook is lost.
Rook check-fork
A constructed position. The rook lands on d6 with check to the king on g6 and at the same time attacks the undefended bishop on a6 along the sixth rank.
Forking two undefended pawns
A constructed position. The knight on e5 attacks the pawns on d7 and f7 with the black king far away on a8. Both pawns are undefended, so even though they are low value the double attack wins one of them.
A defended target that exchange-math still wins
After ...Qe4+ the queen checks the king on h1 and also attacks the knight on f4. The knight is defended, but adding the queen's attack tips the exchange in Black's favour (…Rxf4 wins it), so it counts as the second fork target. The c2 knight was already attacked before the move, so it is not a new target.
Fork wins more than the rival pattern
A constructed position. Nc7+ check-forks the king on a8 and the queen on e8, and the same move also uncovers the rook on b1 attacking the bishop on b6. The fork wins a queen while the uncovered attack only wins a bishop, so the fork is the headline and the rival pattern is dropped.
Check-fork that pays off through the king's reply
Lichess 004nd. Nxf6+ captures the pawn on f6 and forks the king on g8 and the rook on d7. Black has only two legal replies. Taking with Qxf6 loses the queen for the knight after Qxf6. The king's one flight, Kf7, sidesteps that but runs into Nxd7, so the knight escapes the fork having grabbed the rook — White wins the exchange either way. The board is shown just before Nxf6+, so the knight still stands on e4 and the pawn it takes is on f6.
Fork created by capturing one's own blocker
Lichess 00HEx. Rxd1+ takes the bishop that was blocking the rook's first rank. Removing it gives check to the king on g1 and at the same time opens a new attack down the d-file on the knight on d4 — a fork on king and knight. Shown just before the capture: the rook is still on c1 and the bishop it takes sits on d1.
Heavy-piece fork where the forker survives
Lichess 00Rvy. Qd5 forks the rook on a8 and the bishop on d3. There is no check, but the queen is not captured on the next move (the rook just runs with Rf8), so the geometry is real — the opponent saves one piece and White takes the other with Qxd3.
Rook fork on a queen and a minor piece
Lichess 00zDb. Rc4 attacks the queen on d4 and the bishop on a4 along the fourth rank. The queen steps away (Qd3) and the rook collects the bishop with Rxa4 — a clean fork where the forking rook is never taken.
Fork kept when a rival pattern is only a phantom
Lichess zv50i. ...Nxc2+ forks the king on e1, the rook on a1 and the pawn on e3, and seems to uncover the queen onto d1. But that uncovered attack wins nothing (d1 is well guarded), so it is discarded and the genuine knight fork stands.
Only one target — not a fork
A constructed position. Nc7+ checks the king on e8 but attacks no other enemy piece. A single threat is not a fork.
Both targets defended by the king
A constructed position. The knight on e5 attacks the pawns on d7 and f7, but both are defended by the king on e8 and neither capture gives check. The king simply recaptures, so there is nothing to win — no fork.
Rival pattern wins more — fork dropped
A constructed position. Nc7+ check-forks the king on a8 and the bishop on e8, and the same move uncovers the rook on b1 attacking the rook on b6. The fork's prize is only a bishop while the uncovered attack wins a rook, so the fork is suppressed in favour of the heavier pattern.
Sham fork — forker is recaptured for nothing
Game OHhqWJDj. Rxg6+ lands on the sixth rank hitting the king on g8, the queen on f6 and the bishop on h6, but the rook is immediately taken by Qxg6 and the sequence wins no material. The point of the move is the destruction and a later pin, not the fork, so the fork is recorded only as supporting geometry, not as the headline.
Golden puzzles — every real Lichess puzzle Koga is tested against for this tactic (10)
Lichess 0050w
Lichess 0050w (rating 1063). Solution: Rxg3+ Bxg3 Rg5+ Kf7 Rxg3.
Koga flags fork as a follow-up here — it fires later in the line, on Rg5+, not on the move shown above.
Lichess 00ISm
Lichess 00ISm (rating 907). Solution: Nxg5+ Kh6 Nxe6.
Lichess 00Lyc
Lichess 00Lyc (rating 1975). Solution: Qb5+ Rd3 Qxe8.
Lichess 00O8m
Lichess 00O8m (rating 1409). Solution: d5 Qe5 dxc6.
Lichess 00UI2
Lichess 00UI2 (rating 2007). Solution: fxe4 fxe4 Nxe4 dxe4 Rd6+ Kf7 Rxa6.
Koga flags fork as a follow-up here — it fires later in the line, on Rd6+, not on the move shown above.
Lichess 00KNK
Lichess 00KNK (rating 1977). Solution: Nf6+ Kf8 Nxh7+ Ke7 Bf6+ Qxf6 Qxf6+.
Lichess 00HzX
Lichess 00HzX (rating 1693). Solution: Qc1+ Kh2 Qxh6.
Lichess 003Tx
Lichess 003Tx (rating 1517). Solution: Nd2+ Ka1 Rc1#. Koga intentionally does not flag Fork here — the mating attack is the real tactic, so the fork is suppressed (back-rank mate).
Lichess 00Rcs
Lichess 00Rcs (rating 866). Solution: Ng3+ Kf4 Nxh1.
Lichess 00bns
Lichess 00bns (rating 959). Solution: Ne7+ Kf8 Nxg6+.