How Koga decides
- After the move, the piece that just moved bears on two enemy targets at the same time, and the opponent cannot answer both. A target counts when it is a piece worth a knight or more that is either undefended, or worth more than the piece attacking it.
- Giving check counts as one of the two threats: a move that both checks the king and attacks a second valuable piece is a double attack, because the opponent must deal with the check and loses the other piece.
- A threat to deliver checkmate next move also counts — if the opponent does nothing, mate follows — provided that mate is a genuinely separate threat from the piece being attacked.
- The two threats need not both come from the moved piece. A move can attack one piece directly and, at the same time, leave a second enemy piece newly hanging somewhere else — attacked by one of our pieces with no defender, when it was safe before the move.
- Likewise, the move can attack a piece while the line also ends in a forced mate delivered by a different piece. The attacked piece and the mate are two distinct problems the opponent cannot both solve.
- Same piece, same square — if the only “second” threat is the same piece delivering mate on the very square it already attacks, that is one threat dressed up as two, and it is not counted. A different piece mating on that square does count.
- A single target with check — a move that only gives check, or only attacks one piece, is not a double attack. There must be two separate problems.
- Attacker is given away — if the piece making the threats is immediately captured in the main line and neither target is ever actually won, the double attack fizzles and is dropped.
- Double attack is Koga’s general name for two simultaneous threats. When a more specific pattern describes the same geometry, that pattern is reported instead and the double attack is suppressed.
- A knight (or any piece) attacking two targets at once is a fork, and is reported as a fork rather than a double attack.
- A move that uncovers a waiting piece behind it is a discovered attack; that, too, takes precedence over the generic double-attack label.
Test positions (the examples that guard against regressions)
A knight fork is reported as a fork, not a double attack
A constructed position. The knight lands on c7 attacking both the king on e8 (check) and the rook on a8 — exactly two threats. But a knight hitting two targets at once is a fork, so Koga reports the fork and suppresses the generic double-attack label.
Same piece, same square — one threat, not two
A constructed position. After Rxb1 the rook on b1 pins the white rook on e1 to the king on g1, and the threatened follow-up Rxe1 is mate. But the mate is delivered by the SAME rook on the SAME square it already attacks (e1), so that is a single threat, not a genuine double attack. Koga reports the pin instead and does not flag a double attack.
The attacker is given away — the double attack fizzles
From a real game (11.Nxf7). The knight on f7 geometrically attacks both the queen on d8 and the rook on h8, which looks like a double attack. But the knight is a sacrifice: the king simply takes it on f7 next move, so neither target is ever won. Because the attacking piece dies and the threats never materialize, Koga drops the double attack.