The short version: I opened with 1.a3, promised my bishop a home on g2, and then sent it to d3 instead. I missed the same free pawn twice. I opened the c-file with my own queen standing on it, captured the one pawn that was shielding her, and then tried to trap the rook that took her instead of recapturing. Twenty-seven moves after I pushed the g-pawn, a black bishop landed on g3 and a queen arrived on h2. My opponent’s first words afterward were a question about this website.
| Game | ThreeSadPandas–gmh04 |
| Event | Rated correspondence game |
| Dates | September 6–8, 2026 |
| Time control | 1 day per move |
| Opening | Anderssen’s Opening (A00), 1.a3 |
| Ratings | ThreeSadPandas 1737 (provisional); gmh04 1836 |
| Rating change | ThreeSadPandas −167; gmh04 +15 |
| Engine | Stockfish 18, five million nodes per search |
| Series | The Engine Room — Every move gets cross-examined |
Every so often a loss is instructive enough that you owe it to yourself to write it up. This one was instructive enough that my opponent asked me to.

So, gmh04: this one is for you. Below is the complete game, every move cross-examined, the engine’s verdict at each critical moment, and an honest accounting of how White went from a perfectly playable position to a queen-and-bishop mate.
About that rating change. Minus one hundred and sixty-seven is what a provisional rating does when it meets a decisive result against a settled opponent. The number is cosmetic. The game is not.
This review uses the same reproducible method as the other Engine Room analyses: Stockfish 18 examines three candidate moves before every move played, then performs a separate search on the resulting position. The complete report and exact PGN are preserved in the repository. As usual, the full evaluation ledger waits until after the story.
Replay the game
The official Lichess board is oriented from White’s side.
The original remains available as PBbmdAu5 on Lichess.
The complete game score
Correspondence games carry no clock annotations, so there is no ticking to watch this time. There was a full day available for every move. The whole game took a little over two days. Keep that in mind when we reach the moves where nobody looked at the board.
[Event "rated correspondence game"]
[Site "https://lichess.org/PBbmdAu5"]
[Date "2026.09.06"]
[Round "-"]
[White "ThreeSadPandas"]
[Black "gmh04"]
[Result "0-1"]
[GameId "PBbmdAu5"]
[UTCDate "2026.09.06"]
[UTCTime "09:24:59"]
[WhiteElo "1737"]
[BlackElo "1836"]
[WhiteRatingDiff "-167"]
[BlackRatingDiff "+15"]
[Variant "Standard"]
[TimeControl "1 day per move"]
[ECO "A00"]
[Opening "Anderssen's Opening"]
[Termination "Normal"]
1. a3 c5 2. b4 cxb4 3. axb4 a6 4. g3 Nf6 5. e3 d6 6. c3 e5 7. Nf3 Be6
8. Na3 b5 9. Bb2 Be7 10. Bd3 h6 11. h4 O-O 12. Qc2 Nbd7 13. c4 Rc8
14. O-O d5 15. cxd5 Rxc2 16. Rac1 Rxb2 17. Rb1 Rxb1 18. Rxb1 Bxd5
19. e4 Bxe4 20. Bxe4 Nxe4 21. d3 Nc3 22. Ra1 Qb6 23. Rc1 Bxb4
24. Re1 Bxa3 25. Nxe5 Nxe5 26. Rxe5 Bd6 27. Re1 Bxg3 28. Rf1 Ne4
29. dxe4 Re8 30. Re1 Qxf2+ 31. Kh1 Qh2# 0-1Phase one: a promise made on move four
1.a3
Anderssen’s Opening. Adolf Anderssen used it three times against Paul Morphy in their 1858 match and lost the match anyway. The move does almost nothing. Stockfish rates the ordinary first moves at about +0.31 and 1.a3 at −0.04. It is not losing. It hands Black the first move for free, with the small consolation that no bishop will ever pin a knight on c3 from b4.
I play it because it takes people out of their preparation and because a correspondence game is long enough to absorb a wasted tempo. Those are real reasons. They are also the reasons people give for a great many bad habits.
1…c5 2.b4 cxb4 3.axb4
The point of 1.a3, at least the way I play it: a wing gambit with the a-pawn already supporting the recapture. Black takes, White takes back, and the two sides have traded a queenside pawn for Black’s c-pawn.
Stockfish actually preferred that Black decline with 2…d5 or 2…Nf6. After 3.axb4 the position is +0.19, so the gambit did its small job: White is marginally better than after 1.e4.
Note the structure that results. White’s pawn stands on b4. White’s rook on a1 looks straight down an open a-file. The only thing on that file is whatever Black chooses to put there. This matters in six moves.
3…a6
Black puts a pawn on a6, attacked by nothing and defended by the rook on a8. Solid on its face; the engine mildly prefers 3…Nf6 or 3…d5 and gives +0.37 after the game move.
What 3…a6 actually does is put a pawn on the a-file directly in front of the rook. If that pawn ever captures sideways, the rook on a8 faces the rook on a1 with nothing in between. Keep that thought.
4.g3
I want to spend a paragraph on this move, because the whole game is a commentary on it.
The idea of 4.g3 is a fianchetto: the light-squared bishop goes to g2, where it sits on the long diagonal and looks at the rook on a8 behind the half-open a-file. That is a perfectly reasonable plan. Stockfish slightly prefers 4.e3 or 4.b5, but 4.g3 is fine at +0.16.
The problem is not the move. The problem is that the bishop never went to g2. A pawn move in front of your own king is a structural commitment. You either follow through on the plan it implies or you have weakened your king for nothing. I did the second thing, and on move 27 Black’s bishop captured the g3 pawn and used the square to set up mate.
4…Nf6 5.e3?!
Stockfish wanted 5.b5, 5.Bb2, or 5.Bg2, all of which are worth roughly +0.2. It dislikes 5.e3 by about half a pawn and gives −0.29 after it.
Notice the pattern that begins here. At every turn for the next six moves the engine says “put the bishop on g2,” and at every turn I find a pawn move instead. I was playing moves rather than a plan.
5…d6 6.c3?!
Black returns the favor with a small slip. 5…b5 would grab queenside space and prepare …Bb7; the game move lets White back to +0.34.
I answer with another pawn move. Stockfish wanted 6.Bg2 at +0.33. After 6.c3 the evaluation is −0.20. White has now played five pawn moves and zero piece moves. Black has three pawn moves and one knight move. Neither side is developing quickly, but only one side has an open diagonal in front of the king with no bishop on it.
6…e5 7.Nf3 Be6 8.Na3?!
Black takes the center. I develop a knight. Black brings a bishop to e6, a little unusual but fine, eyeing c4 and clearing the way for the other bishop.
Then I put the other knight on the rim. The idea was to support a later c4 and to have a piece ready to hop to b5 or c4 if the chance arose. Stockfish wanted 8.Bg2, for the fourth move running, and gives −0.50 after 8.Na3.
But the rim knight, entirely by accident, is about to have its moment.
Phase two: the same free pawn, twice
8…b5?
Black grabs space and blunts the knight’s route to c4. It looks natural. It is the first real mistake of the game by either side, and Stockfish swings from −0.50 to +0.55.
Look at the a-file. White’s rook on a1 sees the pawn on a6 and, behind it, Black’s rook on a8. The a6 pawn is pinned: not in the legal sense, but in the sense that if it ever captures away from the file, the rook on a8 is lost.
So after 8…b5, White has 9.Nxb5! Black cannot answer 9…axb5 because 10.Rxa8 takes a rook for free. Black’s best is something like 9…Nc6 10.Na3, and White is simply a pawn up with a healthy position at +0.51.
I did not see it.
9.Bb2?
The bishop finally develops, to b2 instead of the g2 square the pawn structure has been begging for. The engine gives −0.44 and a centipawn loss of nearly a full pawn, because the free pawn on b5 is still sitting there.
9…Be7?
Black also misses that b5 is hanging. Stockfish wanted 9…Nc6 or 9…Nbd7, either of which shores up the queenside. After 9…Be7, 10.Nxb5 is available for the second move in a row: 10.Nxb5 Nc6 11.Na3 O-O and White is a pawn up at +0.33.
I did not see it the second time either.
10.Bd3??
This is the move that turns the game. Evaluation before: +0.33 with the right move. Evaluation after: −2.69. A swing of three pawns, from a small edge to being effectively down a piece.
Three things are wrong with 10.Bd3.
First, it definitively abandons the fianchetto. The pawn on g3 is now a permanent weakness in front of the king, and the h1–a8 diagonal is a highway with nobody on it. The king will castle behind a pawn on g3 with no bishop on g2 to cover the holes.
Second, it walks the bishop into a fork. Black has a pawn on e5 and a knight on f6 behind it. After 10…e4! the pawn attacks the bishop on d3 and the knight on f3 at the same time. White cannot save both. Stockfish’s main line runs:
10…e4 11.Bxe4 Nxe4 12.Nxb5 Bd7 13.Nbd4 Qc8
Black is up a piece for two pawns at about −2.7. Retreating with 11.Be2 or jumping with 11.Nd4 is no better.
Third, it ignores the free pawn on b5 for the second time.
I want to be honest about what I was thinking. I was thinking “the bishop needs a square, d3 is central, it looks at h7.” I was not thinking about what Black’s e-pawn does next move. That is the entire content of the blunder check I keep telling myself to run: before you play a move, ask what your opponent’s checks, captures, and threats are afterward. 10…e4 is a threat. I never asked.
10…h6?
gmh04 misses the fork. Stockfish drops Black’s advantage from −2.72 to −0.74. The h6 idea is not bad in itself, denying g5 to my pieces, but the fork was simply winning material.
So both players have now missed a clean tactic twice in a row: I missed Nxb5 on moves 9 and 10, and Black missed …e4 on move 10. This is what club chess looks like from the inside. Tactics do not announce themselves. They sit on the board for two moves and wait to see if anyone notices.
11.h4?
I still have not noticed. Stockfish gives −2.90, because the …e4 fork is still there and because h4 is yet another pawn move in front of my own king. The engine wanted 11.c4, challenging b5 and getting the queenside going.
At this point I had pushed g3, h4, e3, and c3, my king was on e1, and I had castled nowhere. The idea behind h4 was to stop …g5 and to prepare h5 in some far-off future. Neither was a concern in the position. It was another move played for what it looked like rather than what it did.
11…O-O
Black misses …e4 a second time and castles. Perfectly reasonable, and the evaluation settles at −1.52. White is worse but no longer losing a piece by force.
The comeback, such as it is, has been given a second chance. Please hold your applause.
Phase three: building a firing squad and standing in front of it
This is the sequence that decided the game, and it is worth slowing down for, because every move in it is individually plausible and collectively suicidal.
12.Qc2?!
The queen goes to c2 to connect with the bishop on d3 and prepare c4. Stockfish wanted 12.Be2, admitting the bishop went to the wrong square, and gives −2.22 after the game move.
Look at the geometry. The queen is on c2. In front of her stands the pawn on c3. Behind that, the c-file runs all the way to c8, where Black’s rook does not yet sit but easily could.
12…Nbd7 13.c4?
Black develops. I open the c-file with my own queen standing on it. Stockfish preferred 13.Ng5, hitting the bishop on e6, and gives −2.89 after 13.c4.
At the time I saw c4 as active. It challenges b5, and if Black takes, a piece recaptures on a fine central square. What I did not see is that the pawn on c4 is now the only thing between Black’s future rook on c8 and my queen. If that pawn ever leaves the file, the queen is exposed.
13…Rc8
And there is the rook. Stockfish actually wanted the sharper 13…d5 immediately, but Rc8 is a fine positional move and it sets up the tactic that wins the game. The rook stares down the file at the c4 pawn and, through it, at the queen.
14.O-O d5!
The king castles on move fourteen. The engine wanted 14.Be2 but castling was long overdue and I do not regret it.
Black replies with the best move and forces the question. The pawn on d5 attacks c4. White has to decide what to do about the c4 pawn, and every option involves the c-file.
Here is the position. White: king g1, queen c2, rooks a1 and f1, bishops b2 and d3, knights a3 and f3, pawns b4, c4, d2, e3, f2, g3, h4. Black: king g8, queen d8, rooks c8 and f8, bishops e6 and e7, knights d7 and f6, pawns a6, b5, d5, e5, f7, g7, h6.
What does the c4 pawn do? It shields the queen from the rook. What happens if it captures on d5? It stops shielding the queen. That is the entire calculation, and it is one move deep.
15.cxd5??
I captured. Evaluation before: −2.77 with the right move. Evaluation after: −4.96.
Stockfish’s suggestion was 15.Bf5, trading off the bishop on e6 while, crucially, keeping the c4 pawn on the file. Even 15.c5 or 15.Bxe5 were better than the game.
I cannot reconstruct what I thought I was doing beyond “pawn takes pawn, and if the bishop recaptures I have ideas.” I did not ask what Black could capture after my move. The answer was my queen.
15…Rxc2
The rook slides down the open file and takes the queen. Black has given up nothing yet.
This is bad but it is not yet the end. The rook on c2 is attacked by the bishop on d3 and the knight on a3. White can recapture and the material would be queen for rook: down about four points in a position that was already worse. Stockfish gives 16.Nxc2 at −4.61. Awful. Still a game. Players hang on for a long time down a queen for a rook when the opponent’s king is a little loose.
16.Rac1??
Instead I played this. Evaluation: −6.58.
What was the idea? The rook on a1 comes to c1, adding a third attacker against the rook on c2. Three attackers against one rook. It looks like a trap. It is not a trap, because the rook on c2 is not obliged to sit there and be captured. It has a bishop to eat on the way out.
16…Rxb2
The rook takes the bishop on b2, where nothing attacks it. White has now lost queen and bishop for a rook that has not even been captured yet.
17.Rb1? Rxb1 18.Rxb1 Bxd5
I attack the rook. Stockfish would rather I at least take the bishop on e6 with 17.dxe6 while it was available, and gives −8.60 after 17.Rb1. Black trades rooks, then collects the d5 pawn, and the smoke clears at −8.58.
Let me count the material, because it is grimmer than it sounds. White has a rook, a bishop, two knights, and six pawns. Black has a queen, a rook, two bishops, two knights, and six pawns. Over four moves Black gave up one rook and received a queen, a bishop, and a rook. Black is up a queen and a bishop with pawns level.
There is no coming back from this. The rest of the game is Black’s technique and White’s stubbornness, and it contains one more lesson worth the ink.
Phase four: gmh04 keeps it simple
A stronger player does not need the fanciest win when up a queen and a bishop. They need a safe one. gmh04 traded pieces, picked off pawns, and never gave anything back. The engine’s occasional preference for something flashier is beside the point.
19.e4 Bxe4 20.Bxe4 Nxe4 21.d3 Nc3
I try to create some activity by hitting the bishop. A pair of bishops comes off and Black nets the e4 pawn. I kick the knight with 21.d3, and it retreats to c3, attacking the rook on b1 and the pawn on b4 at once.
Stockfish preferred the sharper 21…Nxg3, cashing in the g-pawn that has been weak since move four, but Nc3 is a perfectly good practical choice: every black piece stays safe and a pawn falls anyway. Evaluation around −9.1.
22.Ra1 Qb6 23.Rc1?
The rook steps out of the knight’s reach. The queen comes to b6, defending b5, eyeing b4, and pointing down the b6–g1 diagonal toward my king. The f2 pawn is the only thing on that diagonal. Remember it.
Then I attack the knight on c3 with 23.Rc1. Stockfish rates this at −11.37 and would have preferred 23.Nc2. The trouble is that the rook has walked onto the one square the knight can reach with tempo:
23…Ne2+ 24.Kf1 Nxc1
The knight checks, then takes the rook.
23…Bxb4 24.Re1 Bxa3
gmh04 chose something simpler than the knight check. Bishop takes the b4 pawn and defends the knight on c3. The engine says 23…Ne2+ was almost two pawns stronger, but this is the practical choice: win a pawn, defend everything, keep going. Up a queen and a bishop, you do not calculate knight checks. You avoid losing anything.
My rook flees to e1. The bishop takes the knight on a3, the knight I put on the rim on move eight and never moved again. Black now has queen, rook, bishop, and two knights against my rook and knight. Evaluation −10.19.
Phase five: the pawn from move four
25.Nxe5?
The knight takes the e5 pawn, which is defended by the knight on d7. The idea was that after 25…Nxe5 26.Rxe5 White has at least won a pawn and centralized the rook.
Stockfish preferred 25.Re3, which loses more slowly at −10.34. After the game continuation 25…Nxe5 26.Rxe5, it announces mate in 11.
Why is Nxe5 so costly? Because it trades off the last piece that was doing anything for White’s king. The knight on f3 covered h2, g1, and e1. Without it, the dark squares around my king are guarded by nothing but the king itself and the pawn on g3, and Black has a dark-squared bishop and a queen.
26…Bd6 27.Re1 Bxg3
The bishop retreats from a3 to d6, attacking the rook and pointing at g3. The rook retreats. And there it is: the bishop captures the pawn on g3.
The pawn I pushed on move four to prepare a fianchetto that never happened. The pawn that has been a hole in front of my king since 10.Bd3 sent the bishop elsewhere. Now a black bishop sits on g3, one diagonal step from h2, and White has no minor piece left to contest the dark squares.
Can White take it? 28.fxg3 loses instantly: with the f2 pawn gone, 28…Qf2+ arrives down the diagonal from b6, the king has only h1, and the queen takes the rook on e1 with check. So the bishop is immune, and the f2 pawn is now the last thing between Black’s queen and White’s king.
Stockfish says mate in 7.
28.Rf1 Ne4 29.dxe4 Re8
The rook goes to f1 to defend f2. This is the correct idea and the engine’s first choice. Rook and king now both guard f2.
Black offers the knight on e4 to bring the rook to the e-file with tempo. The engine calls this Black’s one inaccuracy in the finish, preferring 28…Ne2+, and the mate count stretches from 7 to 10. It does not change anything. I take the knight. The rook comes to e8, hitting the e4 pawn and taking the open file.
Now the last real decision of the game, and one I want to dwell on because it is the kind of mistake I make in every time control.
White: king g1, rook f1, pawns e4, f2, h4. Black: king g8, queen b6, rook e8, bishop g3, pawns a6, b5, f7, g7, h6. White to move.
The rook on f1 is defending f2. The f2 pawn is attacked by the queen on b6. The bishop on g3 covers h2 and f2 and e1. The king has exactly one job: do not lose in the next two moves.
What is the only white thing under attack? The pawn on e4. Losing it means nothing. But it feels like something, because it is the last thing White has that anyone is bothering to attack.
30.Re1??
I moved the rook from f1 to e1 to defend the e4 pawn.
Evaluation before: mate in 7 with any reasonable move. Evaluation after: mate in 2.
The rook on f1 was the only piece besides the king defending f2. Moving it means f2 is defended by the king alone, and the queen on b6 attacks it. A queen defended by a bishop, sitting next to a king, cannot be captured by that king.
Stockfish’s suggestion was 30.Kh1, which also loses, in seven moves rather than two. Every move loses. The game was over long before this. But 30.Re1 is the move that turns “gmh04 has to find a mate” into “gmh04 has to not fall asleep.”
30…Qxf2+ 31.Kh1 Qh2#
Queen takes f2 with check. The bishop on g3 defends her, so the king cannot take. She covers g2 and h2 along the second rank. The rook I just put on e1 blocks f1. The king has one square, and it goes there.
Queen to h2. The bishop on g3 defends her again. The king on h1 cannot capture. It cannot go to g1, which the queen covers diagonally. It cannot go to g2, which the queen covers along the rank. Checkmate.
The mating pattern is one of the oldest in the book: a queen-and-bishop battery against a castled king, with the bishop sitting on the square where a defensive pawn used to be. The pawn was g3. I put it there on move four with a plan I never carried out, and it took Black exactly twenty-seven moves to collect on it.
Now we may look at the engine ledger
Every score is from White’s perspective. Positive favors White, negative favors Black. Mate scores replace decimals once Stockfish sees a forced finish.
| Moment | Evaluation | What changed |
|---|---|---|
| 1.a3 | −0.04 | The first move is spent; nothing is lost yet |
| 3.axb4 | +0.19 | Black accepted the wing gambit; White is marginally better |
| 5.e3?! | −0.29 | First of several moves that should have been Bg2 |
| 6.c3?! | −0.20 | Five pawn moves, no piece moves |
| 8.Na3?! | −0.50 | The knight goes to the rim |
| 8…b5? | +0.55 | The a-file pin makes b5 a free pawn |
| 9.Bb2? | −0.44 | White misses 9.Nxb5 |
| 9…Be7? | +0.28 | Black leaves b5 hanging a second time |
| 10.Bd3?? | −2.69 | White misses 10.Nxb5 and walks into the …e4 fork |
| 10…h6? | −0.74 | Black misses 10…e4 |
| 11.h4? | −2.90 | Another pawn move in front of the king; the fork is still on |
| 11…O-O | −1.52 | Black misses 11…e4 a second time |
| 12.Qc2?! | −2.22 | The queen steps onto the c-file |
| 13.c4? | −2.89 | White opens the file with the queen on it |
| 14…d5! | −2.71 | Black forces the question about c4 |
| 15.cxd5?? | −4.96 | The shield leaves the file; 15…Rxc2 takes the queen |
| 16.Rac1?? | −6.58 | White declines to recapture with 16.Nxc2 |
| 17.Rb1? | −8.60 | The rook on b2 escapes with a whole bishop |
| 18…Bxd5 | −8.58 | Black is up a queen and a bishop; pawns level |
| 23.Rc1? | −11.37 | The rook walks onto the knight’s checking square |
| 23…Bxb4 | −9.72 | Black declines the knight check and just takes a pawn |
| 24…Bxa3 | −10.19 | The rim knight leaves the board without having moved again |
| 26.Rxe5 | Mate in 11 | The last defender of the dark squares has been traded off |
| 27…Bxg3 | Mate in 7 | The pawn from move four falls; the bishop cannot be taken |
| 28.Rf1 | Mate in 7 | Best move; the rook defends f2 |
| 28…Ne4 | Mate in 10 | Black’s only inaccuracy of the finish |
| 30.Re1?? | Mate in 2 | The rook leaves f2 to defend a pawn that does not matter |
| 31…Qh2# | Checkmate | Queen and bishop, on the square the g-pawn used to guard |
Reading the ledger top to bottom, the game has a clear shape.
Moves 9 and 10 are White’s missed opportunity: a clean pawn was available twice, and I walked into a fork instead. Moves 10 and 11 are Black’s missed opportunity: the fork sat there for two moves. Move 15 is the game. Move 16 is the game made worse. Everything from move 25 on is the epilogue, and move 30 is the epilogue told badly.
gmh04 did not play a perfect game. The engine flagged the missed fork twice and a handful of conversion moves where a sharper option existed. But gmh04 did the one thing that matters at our level: when the decisive mistake appeared, they saw it and took the queen. Everything after that was clean, safe, and sufficient. You do not have to find the engine’s first choice to win. You have to see the tactic when it appears, and then not give anything back. gmh04 did both.
What I did well
I got a small edge out of a bad opening
After 3.axb4, Stockfish gave White +0.19. The wing gambit is not good, but Black accepted it, and for a few moves White had the marginally more comfortable game. That is roughly the ceiling for 1.a3 and I reached it.
I castled eventually
14.O-O was not the engine’s first choice, but getting the king off e1 after thirteen moves of pawn pushing was the right priority. The disaster that followed came from the c-file, not from the king’s location.
I defended f2 once
28.Rf1 was the best move on the board. I saw that the bishop on g3 could not be taken, understood that f2 was the critical square, and put the rook on it. Two moves later I moved it away again, which is a separate section.
I did not resign into a lost position
The position after 18…Bxd5 was hopeless. I played on, gmh04 had to demonstrate the technique, and the mating pattern now exists on the board for study. The panda goes down with a bishop still on the square he chose for it on move nine.
What I need to fix
Follow through on a pawn move or do not make it
4.g3 says “the bishop is going to g2.” If the bishop then goes to d3, the weakness stays and the reason for it is gone. The bishop that mated me stood on g3 because I put a hole there and never filled it.
Training question: which pawn moves in front of my king have I already made, and does my plan still use them?
Look at what a pawn is shielding before it moves
15.cxd5 was a one-move blunder. The c4 pawn was the only thing between an enemy rook and my queen. “What can my opponent capture after this move?” is the second question in my own blunder check, and I did not ask it. The moves that most need the routine are the ones that feel automatic, and a pawn capture in the center is exactly that kind of move.
Training question: after this pawn moves, what does the piece behind it see?
When disaster strikes, take the material back
After 15…Rxc2, 16.Nxc2 leaves White down a queen for a rook, which is horrible and also still a chess game. 16.Rac1 tried to be clever, and the rook simply ate a second piece on the way out. The instinct to punish a piece that has just done damage is almost always wrong. Take it, or if you cannot take it, defend. Do not set traps for a piece that has a free capture available.
Training question: does the piece I am “trapping” have a capture that gets it out?
Do not park the queen on a file you plan to open
12.Qc2 followed by 13.c4 with a black rook heading for c8 is a textbook self-inflicted x-ray. Anything on the same file as an enemy rook, with only pawns between, is a liability. Before opening the file, ask who benefits.
Training question: if this file opens, whose heavy piece is looking at whose?
Never move a defender to save a pawn that does not matter
30.Re1 abandoned f2, the only square that mattered, to protect e4, which mattered to nobody. Down a queen and a bishop, there is nothing to do except make the opponent’s job as hard as possible. That means keeping defenders near the king and never moving a piece off a square where it is doing defensive work.
Training question: what is this piece currently defending, and is that more important than what I want it to do?
Use the day
This was a correspondence game with twenty-four hours per move. The whole game took a little over two days for sixty-two half-moves. I missed Nxb5 twice. gmh04 missed …e4 twice. Both of us spent most of the available time not looking at the board. The tactic you miss is usually the simplest one on the board, a fork or a pin a beginner’s book would flag, and the reason you miss it is that you are looking at your own plan instead of your opponent’s resources.
Training question: before I submit a correspondence move, have I actually set the position up and looked at it from the other side?
Reproducible engine record
The run used:
- Stockfish 18;
python-chess1.11.2;- 4 threads;
- 512 MB hash;
- 5,000,000 nodes for each search;
- MultiPV 3 before every played move;
- a separate 5,000,000-node search after every played move; and
- principal variations limited to 12 plies in the saved report.
Scores are normalized to White’s perspective. Multi-threaded searches may differ by a few centipawns between runs. Those small changes are noise; the swings discussed here are not.
The same repository-owned harness used for the earlier Engine Room work produced this report:
#!/usr/bin/env python3
"""Produce a reproducible, move-by-move Stockfish report for a PGN game."""
import argparse
import json
import shutil
from pathlib import Path
import chess
import chess.engine
import chess.pgn
def score_for_white(info):
return info["score"].pov(chess.WHITE).score(mate_score=100000)
def display_score(info):
score = info["score"].pov(chess.WHITE)
if score.is_mate():
mate = score.mate()
return f"M{mate}" if mate is not None and mate >= 0 else f"-M{abs(mate or 0)}"
value = score.score()
return f"{(value or 0) / 100:+.2f}"
def pv_to_san(board, pv, length=12):
variation = board.copy()
moves = []
for move in pv[:length]:
if move not in variation.legal_moves:
break
moves.append(variation.san(move))
variation.push(move)
return " ".join(moves)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("pgn", type=Path)
parser.add_argument("output", type=Path)
parser.add_argument("--engine", default=shutil.which("stockfish") or "stockfish")
parser.add_argument("--nodes", type=int, default=500000)
parser.add_argument("--multipv", type=int, default=3)
parser.add_argument("--threads", type=int, default=4)
parser.add_argument("--hash", type=int, default=512)
args = parser.parse_args()
with args.pgn.open() as source:
game = chess.pgn.read_game(source)
if game is None:
raise SystemExit("No PGN game found")
engine = chess.engine.SimpleEngine.popen_uci(args.engine)
engine.configure({"Threads": args.threads, "Hash": args.hash})
report = {
"game": dict(game.headers),
"method": {
"engine": engine.id,
"python_chess": chess.__version__,
"nodes_per_search": args.nodes,
"multipv": args.multipv,
"threads": args.threads,
"hash_mb": args.hash,
"score_perspective": "White; positive favors White",
"mate_score_centipawns": 100000,
"pv_length_plies": 12,
},
"positions": [],
}
try:
board = game.board()
for ply, move in enumerate(game.mainline_moves(), start=1):
mover = board.turn
move_number = board.fullmove_number
played_san = board.san(move)
candidates = engine.analyse(
board,
chess.engine.Limit(nodes=args.nodes),
multipv=args.multipv,
)
candidate_rows = []
for rank, info in enumerate(candidates, start=1):
candidate_rows.append(
{
"rank": rank,
"move": board.san(info["pv"][0]),
"score": display_score(info),
"score_cp_white": score_for_white(info),
"depth": info.get("depth"),
"seldepth": info.get("seldepth"),
"nodes": info.get("nodes"),
"pv": pv_to_san(board, info["pv"]),
}
)
best_cp = candidate_rows[0]["score_cp_white"]
best_move = candidates[0]["pv"][0]
board.push(move)
after = engine.analyse(board, chess.engine.Limit(nodes=args.nodes))
after_cp = score_for_white(after)
loss = best_cp - after_cp if mover == chess.WHITE else after_cp - best_cp
report["positions"].append(
{
"ply": ply,
"move_number": move_number,
"side": "White" if mover == chess.WHITE else "Black",
"played": played_san,
"best_move": candidate_rows[0]["move"],
"is_best": move == best_move,
"centipawn_loss": max(0, loss),
"evaluation_after": display_score(after),
"evaluation_after_cp_white": after_cp,
"after_depth": after.get("depth"),
"after_seldepth": after.get("seldepth"),
"after_nodes": after.get("nodes"),
"best_reply_line_after": pv_to_san(board, after.get("pv", [])),
"candidates_before": candidate_rows,
}
)
finally:
engine.quit()
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(json.dumps(report, indent=2) + "\n")
if __name__ == "__main__":
main()
The preserved source files are:
analysis/stockfish/PBbmdAu5.pgn— the exact Lichess PGN;analysis/stockfish/PBbmdAu5-stockfish18.json— the complete five-million-node report; andscripts/analyze_game.py— the reusable analysis harness.
The PGN and report remain internal source evidence rather than public downloads. The script is displayed through the repository-restricted shortcode. Stockfish is free, open-source software; this site invokes a local installation and does not redistribute the engine binary. The evergreen explanation is in What Stockfish Is and How I Use It.
The honest verdict
I lost this game on move fifteen, when I removed the one pawn shielding my queen from a rook. I made it unrecoverable on move sixteen, when I tried to trap the rook instead of taking it. I made it a mating attack on move twenty-five, when I traded off the last piece guarding my king’s dark squares. And I made it a two-move mate on move thirty, when I moved the last defender of f2 to protect a pawn that no longer mattered.
Behind all of that is one structural decision: I pushed g3 on move four and never put the bishop on g2. The hole I created was the square the mating bishop stood on.
None of that was gmh04’s doing. What gmh04 did was see the queen when it was offered, keep every piece safe afterward, and finish cleanly. Then they typed “Thanks for the game, you going to blog this?”
Yes. Obviously. If you are ever up for the rematch, I will tell you in advance: the bishop is going to g2 this time.