The short version: Black gives me an advantage. I return it. Black gives me another advantage. I return that one too. Black opens the center, I win a loose bishop, and then Black places the queen on the one square where my knight can take it. Stockfish has notes.

GameThreeSadPandas–Galtor15
DateAugust 28, 2026
Time control30+0 Classical, rated
OpeningFour Knights Game: Italian Variation
Result1–0; Black resigned after 20.Rxd5
RatingsThreeSadPandas 1164; Galtor15 1174
Rating changeThreeSadPandas +10; Galtor15 −7
EngineStockfish 18, five million nodes per search
SeriesThe Engine Room — Every move gets cross-examined

This is the first threesadpandas game analysis built around a full local Stockfish run.

Not “I clicked computer analysis and repeated the punctuation.” Not “the bar went up, therefore wisdom.” I installed Stockfish 18, sent every position through the engine, asked for three candidate moves before every move played, searched another five million nodes after every move, saved the raw report, and kept the exact script in the repository.

This is overboard on purpose.

The goal is to establish a method we can reuse: preserve the game, preserve the settings, expose the code, separate engine fact from human interpretation, and make every dramatic claim answer the annoying but necessary question: what line are you talking about?

Replay the evidence

The official Lichess board is oriented from White’s side.

Replay not loading? Open the game on Lichess.

The original remains available as ZNiRjSxx on Lichess.

The complete game score

[Event "rated classical game"]
[Site "https://lichess.org/ZNiRjSxx"]
[Date "2026.08.28"]
[Round "-"]
[White "ThreeSadPandas"]
[Black "Galtor15"]
[Result "1-0"]
[GameId "ZNiRjSxx"]
[UTCDate "2026.08.28"]
[UTCTime "16:06:25"]
[WhiteElo "1164"]
[BlackElo "1174"]
[WhiteRatingDiff "+10"]
[BlackRatingDiff "-7"]
[Variant "Standard"]
[TimeControl "1800+0"]
[ECO "C50"]
[Opening "Four Knights Game: Italian Variation"]
[Termination "Normal"]

1. e4 { [%clk 0:30:00] } 1... e5 { [%clk 0:30:00] }
2. Nf3 { [%clk 0:29:54] } 2... Nf6 { [%clk 0:29:54] }
3. Nc3 { [%clk 0:29:51] } 3... Nc6 { [%clk 0:29:49] }
4. Bc4 { [%clk 0:29:48] } 4... Bc5 { [%clk 0:29:42] }
5. O-O { [%clk 0:29:45] } 5... O-O { [%clk 0:29:37] }
6. d3 { [%clk 0:29:40] } 6... d6 { [%clk 0:29:24] }
7. Bg5 { [%clk 0:29:38] } 7... a6 { [%clk 0:29:08] }
8. Bxf6 { [%clk 0:29:00] } 8... Qxf6 { [%clk 0:29:04] }
9. Nd5 { [%clk 0:28:53] } 9... Qd8 { [%clk 0:28:50] }
10. Qd2 { [%clk 0:28:40] } 10... b5 { [%clk 0:28:45] }
11. Bb3 { [%clk 0:28:33] } 11... Be6 { [%clk 0:28:08] }
12. c4 { [%clk 0:27:26] } 12... b4 { [%clk 0:28:00] }
13. Rac1 { [%clk 0:26:38] } 13... Na5 { [%clk 0:27:16] }
14. Ba4 { [%clk 0:23:40] } 14... c6 { [%clk 0:27:07] }
15. Ne3 { [%clk 0:23:28] } 15... d5 { [%clk 0:26:18] }
16. cxd5 { [%clk 0:23:18] } 16... cxd5 { [%clk 0:26:09] }
17. Rxc5 { [%clk 0:23:11] } 17... dxe4 { [%clk 0:25:52] }
18. Nxe5 { [%clk 0:22:39] } 18... Qd5 { [%clk 0:25:25] }
19. Nxd5 { [%clk 0:21:05] } 19... Bxd5 { [%clk 0:25:20] }
20. Rxd5 { [%clk 0:20:54] } 1-0

Twenty moves. Both players still had more than twenty minutes. This was not a time scramble. Every disaster arrived during normal business hours.

How to read the engine numbers

Every evaluation below is from White’s perspective. +1.00 means Stockfish prefers White by roughly one pawn’s worth of positional value. −1.00 means it prefers Black by roughly the same amount. The number is not a guaranteed material count, a probability of victory, or a commandment delivered from the mountain. It is Stockfish’s evaluation of the position under this search.

The run used:

  • Stockfish 18;
  • 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.

Because the engine ran with multiple threads, tiny differences can occur between runs. Because “best move” and “position after the played move” are separate searches, a few hundredths of a pawn are noise, not scandal. The large swings are not noise. A two-pawn drop is the engine clearing its throat. A four-pawn drop is the engine pulling the fire alarm.

The full evaluation ledger

This table records Stockfish’s evaluation after every move. Positive favors White.

MoveAfter White’s moveAfter Black’s move
1.e4 e5+0.26+0.25
2.Nf3 Nf6+0.27+0.42
3.Nc3 Nc6+0.18+0.19
4.Bc4 Bc5−0.18+0.18
5.O-O O-O+0.12+0.17
6.d3 d6+0.14+0.14
7.Bg5 a6?+0.18+1.52
8.Bxf6? Qxf6−0.44−0.46
9.Nd5 Qd8−0.38−0.33
10.Qd2 b5−0.53−0.36
11.Bb3 Be6−0.29+0.09
12.c4? b4−1.03−0.32
13.Rac1 Na5?−1.09+0.55
14.Ba4 c6+0.46+1.28
15.Ne3? d5?−0.18+2.14
16.cxd5 cxd5?+2.21+4.65
17.Rxc5! dxe4+4.69+4.74
18.Nxe5 Qd5??+4.22+8.76
19.Nxd5 Bxd5+8.73+9.47
20.Rxd5+9.47—

The ledger tells the whole comedy in miniature. The game crosses equality repeatedly, then stops pretending after move sixteen.

Phase one: four knights, two symmetrical adults

1.e4 e5 2.Nf3 Nf6 3.Nc3 Nc6

The Four Knights Game appears by force of naming. Both sides occupy or attack the center, both king knights come out, both queen knights follow, and nobody has yet tried to become content.

Stockfish’s preferences in these early positions are not moral judgments. It sometimes places d4 ahead of the move played; after 3.Nc3, it gives only a small edge to White. Differences of two or three tenths here describe options, not failures.

4.Bc4 Bc5 5.O-O O-O 6.d3 d6

Both sides choose the Italian setup inside the Four Knights. Bishops point toward f7 and f2. Both kings castle. Both d-pawns support the center.

Stockfish briefly prefers sharper central action such as …Nxe4 in some move orders, but the game remains essentially balanced. After 6…d6, the engine says +0.14. Nobody owns enough advantage to finance a sandwich.

This quiet beginning matters because the first real mistake is not forced by opening ignorance. The pieces are developed. The kings are safe. The position asks for an ordinary improving move.

First swing: 7…a6? gives White a target

7.Bg5

The bishop pins the f6-knight to the queen. Stockfish accepts the move at +0.18. Black can calmly ask the bishop what it intends with 7…h6.

The engine’s top line begins simply:

7…h6 8.Bh4

That is almost offensively normal. Black questions the bishop; White maintains the pin. Stockfish gives 7…h6 about +0.15.

7…a6?

Black instead spends sixteen seconds on a6, preventing a bishop or knight from using b5 and perhaps preparing queenside expansion.

Stockfish jumps from +0.18 to +1.52. The engine assigns the move a loss of about 1.37 pawns relative to its best choice.

Why? The pin on f6 remains unresolved, and White can intensify the position before Black gets another useful move. Stockfish’s best continuation is:

8.Nd5! Be6 9.Bxf6 gxf6 10.Nh4 b5 11.Qh5 Kg7

The point is not that White instantly wins material. The point is accumulation. Nd5 occupies an advanced central square, attacks f6 again, and makes Black’s kingside structure harder to preserve. In Stockfish’s main line, Black answers with …Be6, White exchanges on f6 under better circumstances, Black chooses the g-pawn recapture, and White brings the queen toward h5.

This is a very Stockfish lesson: when a pin creates pressure, do not rush to cash it in merely because exchanging is available. Sometimes the threat is worth more alive.

Second swing: 8.Bxf6? returns the entire advantage

8.Bxf6?

I exchanged the bishop immediately. Black recaptured 8…Qxf6.

Stockfish’s verdict is severe: from roughly +1.31 for the best move before White acts to −0.44 after the move. That is a swing of about 1.75 pawns. In one move, White goes from a clear advantage to a modest Black advantage.

The exchange has several costs:

  • White gives up the bishop pair.
  • Black’s queen recaptures without damaging the pawn structure.
  • The pressure on the pinned knight disappears.
  • Black’s pieces remain healthy and the queen becomes active on f6.

This is not a material blunder. Nothing hangs. It is an option-value blunder: White voluntarily removes the feature that made the position uncomfortable for Black.

The move also exposes a recurring human urge. I created a pin, so I felt compelled to do the pin thing. But the value of a pin is not the certificate of completion received after exchanging the pinned piece. Its value is the restriction it imposes while other pieces improve.

9.Nd5 Qd8

I find Nd5 one move late. It is still Stockfish’s top move, and Black correctly retreats the queen to d8. The engine remains around −0.4: Black is slightly better, but the game is entirely playable.

The contrast is useful. Nd5 was strong before the bishop exchange because it compounded the pin. After the exchange, Nd5 is merely a good centralized knight move that gains a tempo on the queen. Same square. Different position. Chess remains stubbornly context-dependent.

Slow drift: 10.Qd2 through 11…Be6

10.Qd2 b5 11.Bb3 Be6

White develops the queen and connects the rooks. Black gains queenside space with …b5, sends the bishop back to b3, and develops with …Be6.

Stockfish prefers the humble 10.c3, preparing d4 and giving the bishop a retreat square on c2. It still considers Qd2 playable. Black could press more accurately with …Bg4, but after 11…Be6 the position returns to approximately equal at +0.09.

This is the first reminder that an evaluation advantage is not a savings account. Black had a modest edge. Black made a reasonable move that was not the most challenging move. The edge evaporated.

Third swing: 12.c4? fixes the wrong problem

12.c4?

I spent sixty-seven seconds on c4, my longest think to that point. The move attacks the b5-pawn and appears to challenge Black’s queenside space.

Stockfish drops the evaluation from equality to −1.03. Its top choices are the boring moves:

12.c3, approximately +0.05
12.a4, approximately −0.03
12.h3, approximately −0.05

All three keep the position stable. c4 does something more committal:

  • it concedes d4 as a potential outpost;
  • it locks White’s central structure before White has played d4;
  • after …b4, it gives Black queenside space and a tempo against the c3-knight;
  • and it makes the c-file look attractive before the position is ready for a rook.

The engine does not hate pawn moves because pawns are humble. It hates irreversible moves that improve the opponent’s plan more than ours.

12…b4 13.Rac1?!

Black advances with …b4, displacing pressure onto the knight and holding a modest advantage. I respond Rac1, placing the a-rook behind the c-pawn.

Stockfish prefers 13.Ba4, immediately clarifying the bishop and exploiting Black’s alignment. It judges Rac1 about six-tenths worse than its best continuation.

The rook move is understandable: open or opening file, put rook on file. The problem is sequencing. The bishop on b3 and knight on c3 have more urgent questions. Rooks are excellent employees, but they should not arrive at the office before the building has an address.

Fourth swing: 13…Na5? gives White the game back

Black plays 13…Na5, attacking the bishop on b3. It looks natural and forcing.

Stockfish hates it.

Before the move, Black is about −0.97 if Black plays 13…a5. After 13…Na5, the evaluation flips to +0.55. That is a swing of approximately 1.52 pawns.

The preferred line is:

13…a5 14.Ba4 Nd4 15.Nxd4 Bxd4 16.Kh1 Rb8

Black preserves the centralized knight and continues expanding. With …Na5, the knight goes to the edge to attack a bishop that has an active square. White plays 14.Ba4, and the bishop now points into Black’s queenside while the knight on a5 has fewer central duties.

14…c6

Black challenges the knight on d5. Stockfish still gives White +1.28, although it prefers the calmer …Rb8 or …Nb7. Now White has a concrete tactical choice.

Fifth swing: 15.Ne3? misses the pawn

The move I should have played: 15.Nxb4!

Stockfish’s top line is wonderfully direct:

15.Nxb4! Bxb4 16.Qxb4 c5 17.Qc3

White’s knight takes the pawn on b4. If Black’s bishop recaptures, White’s queen recaptures the bishop. The sequence removes Black’s advanced pawn and wins material because the bishop on c5 is part of the exchange.

Instead, I retreated the knight to e3.

15.Ne3?

The evaluation falls from roughly +1.18 before the move to −0.18 after it—a swing of about 1.36 pawns. Once again, I convert a clear advantage into equality without losing material immediately.

I used twelve seconds on the move.

Yes, twelve.

The game is 30+0 classical. White still had 23:28. The tactical capture on b4 deserved more than a passing glance. The clock was not pressuring me. I was pressuring the clock to remain decorative.

The center detonates: 15…d5?

Black now has a roughly equal position and can consolidate with 15…g6, …Re8, or …Rc8. Stockfish’s first choice is almost aggressively quiet:

15…g6

Black instead plays 15…d5?.

The move looks principled: strike in the center while White’s pieces are awkward. The tactical detail is that Black’s bishop on c5 and knight on a5 can become vulnerable when the c- and d-files open.

Stockfish leaps from −0.18 to +2.14, assigning the move a loss of about 2.35 pawns. This is the first move where the engine’s criticism is not merely positional. White can force material gains.

16.cxd5

White takes. Stockfish agrees and holds the evaluation at +2.21.

Black has a chance to limit the damage with 16…Bxe3!:

16…Bxe3 17.Qxe3 cxd5 18.Nxe5 dxe4 19.dxe4 Qd6

White remains better, around +2.23, but Black removes the e3-knight before resolving the center and avoids the clean tactical blow that follows in the game.

16…cxd5?

Black recaptures automatically. Stockfish jumps again, from a best-defense evaluation near +2.23 to +4.65. The move loses roughly another 2.42 pawns compared with …Bxe3.

Now the bishop on c5 is sitting on the c-file in front of White’s rook.

The move of the game: 17.Rxc5!

White’s rook travels from c1 to c5 and captures the bishop.

The c-pawn has left c4. The c-file is open. Black’s bishop on c5 is now loose. The rook travels straight up the file, takes the bishop, and survives. Stockfish ranks the capture first and gives White +4.69 after the move.

The tactic works because opening the center changed the geometry. Before 15…d5, White’s pawn occupied c4 and blocked the rook. After cxd5 cxd5, the pawn has vanished from the c-file, while Black’s bishop is still standing on c5. The rook does not need a sacrifice calculation. It needs a clear hallway.

Stockfish’s principal variation before the move begins:

17.Rxc5 dxe4 18.dxe4 Qxd2 19.Nxd2 Rfd8 20.Rd1

The game follows 17…dxe4, and the verdict barely changes: +4.74. Black captures a pawn and attacks, yet White’s tactical assets dominate.

This is where engine use becomes educational rather than ornamental. The move is not magic and not an exchange sacrifice. It is a loose-piece tactic created by a newly opened file. Stockfish helps reconstruct exactly when the hallway appeared: Black’s …d5, White’s cxd5, and Black’s automatic …cxd5.

Dan Heisman’s reminder that the real concern in a trade is often what remains on the board applies twice in this game: Bxf6 was an equal exchange that left me worse, while Rxc5 looked expensive only until the resulting board showed that the rook was safe.

I found Rxc5 in seven seconds.

This fact is encouraging and suspicious. Encouraging because the tactic was correct. Suspicious because I had spent much of the game making strategically expensive decisions at similar speed. One correct intuition does not retroactively validate the process that produced all previous intuitions.

17…dxe4 and the cleaner continuation

After Black captures on e4, Stockfish prefers 18.dxe4! rather than my move. The line is:

18.dxe4 Qxd2 19.Nxd2 Rfd8 20.Nd5 Nb7 21.Rc2

White simplifies, meets the queen trade comfortably, and keeps the large advantage.

18.Nxe5?!

I use the knight to capture on e5. Stockfish still says +4.22, but marks a loss of about 0.54 compared with the cleanest move. This is not a blunder. It is a less precise winning move.

The distinction matters. If every non-best move becomes a “mistake,” engine analysis turns into melodrama. Nxe5 keeps a huge advantage and creates a direct threat. It also places both White knights where they attack d5.

Black now needs damage control.

The queen chooses d5

Black’s best practical defense: 18…Nb7

Stockfish still evaluates Black’s best defense at approximately +4.29 for White. There is no magic equality available. The top line is:

18…Nb7 19.Nc6 Qxd3 20.Qxd3 exd3 21.Rcc1 Rad8

Black returns the offside knight to b7 and uses a controlled queen exchange to reduce the immediate tactical danger. White remains decisively better, but White must continue proving the win.

Other survivable tries include …Qb6 and …f5. They are bad positions. They are also positions in which Black chooses what happens to the queen.

18…Qd5??

Black moves the queen from d8 to d5.

White has a knight on e3.

Knights move in an L.

The square d5 is one knight jump from e3.

Stockfish moves from roughly +4.29 under best defense to +8.76 after Qd5, a loss of about 4.47 pawns in one move. The evaluation does not jump by nine because White was already winning and because the resulting exchanges leave Black with some material. But the tactical instruction is uncomplicated.

19.Nxd5

The knight takes the queen.

I spent ninety-four seconds before playing it.

This is the funniest clock entry in the game. Earlier, I spent twelve seconds missing Nxb4 and seven seconds finding Rxc5. When the queen moved directly onto my knight’s capture square, I conducted a full environmental impact study.

To be fair, checking for a trap before accepting a queen is good practice. Free queens occasionally arrive with paperwork. But after verifying Black’s recapture, the transaction is straightforward.

Black plays 19…Bxd5, and White responds 20.Rxd5. Stockfish evaluates the final position at +9.47. Black resigns with 25:20 remaining. White has 20:54.

What the engine says I did well

An engine autopsy should not become a ritual humiliation. Several decisions deserve credit.

I developed and castled

The opening reached a safe, normal position. There was no self-inflicted king emergency and no opening trap. The early inaccuracies were small.

I found 9.Nd5

It was a move late relative to the strongest version of the idea, but it was still Stockfish’s first choice and gained useful time against the queen.

I found 14.Ba4

After …Na5, retreating to a4 preserved the bishop and maintained the advantage. Stockfish agreed.

I found 16.cxd5

When Black struck prematurely, I opened the position correctly instead of retreating automatically.

I found 17.Rxc5!

This was the game’s best human moment: a clean rook capture down the newly opened c-file, found quickly, that converted Black’s central mistake into a decisive advantage.

I took the queen

Standards remain standards.

What the engine says I need to fix

Preserve pressure before cashing it in

8.Bxf6? released the pin too early. The stronger 8.Nd5! increased the pressure and forced Black to solve more than one problem.

Training question: before exchanging a pinned piece, ask whether another move can add an attacker, occupy an outpost, or make the pin more expensive.

Prefer flexible pawn moves

12.c4? committed the structure and helped Black gain space. h3, c3, or a4 kept options open.

Training question: what square becomes weak or unavailable after this pawn moves, and can the opponent advance past it with tempo?

Calculate captures before retreating

15.Ne3? missed 15.Nxb4!. The knight could remove the advanced pawn because the recapture sequence favored White.

Training question: before retreating an attacked piece, list every legal capture by that piece and calculate the forcing recaptures.

Use the clock where the position changes

The game lasted twenty moves, and both players retained more than twenty minutes. The critical positions at moves eight, twelve, fifteen, and seventeen deserved deliberate calculation.

The lesson is not “play slowly.” Slow confusion is still confusion. The lesson is to spend time on irreversible pawn moves, exchanges that release tension, tactical captures, and moments when the evaluation of a forcing line depends on one recapture.

The exact analysis script

Here is the entire script used to create the saved Stockfish report. Humbly: it is a small Python harness, not a new chess engine. Stockfish supplies the chess strength. python-chess supplies the board and UCI plumbing. The script makes the run inspectable and repeatable.

It reads a PGN, launches Stockfish as a separate UCI process, requests three candidate lines before every move, evaluates the resulting position after the played move, converts all scores to White’s perspective, estimates centipawn loss, records depth and nodes, and writes structured JSON.

#!/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 internal source files are deliberately retained in the repository:

  • scripts/analyze_game.py — reusable analysis harness;
  • analysis/stockfish/ZNiRjSxx.pgn — exact input game; and
  • analysis/stockfish/ZNiRjSxx-stockfish18.json — complete 5-million-node report.

They are not linked as downloadable public-site assets. The script is shown here because methodology should be visible; the internal report remains source evidence rather than website furniture.

Stockfish itself is free, open-source software distributed under GPLv3. This site does not redistribute the Stockfish binary; it invokes a locally installed copy for analysis. The official Stockfish repository contains the engine source, license, authors, and build instructions. The broader evergreen explanation remains available in What Stockfish Is and How I Use It.

The honest verdict

The result says 1–0. The engine says the path was less dignified.

I had a clear advantage after 7…a6? and erased it with 8.Bxf6?. I reached equality and damaged my position with 12.c4?. Black returned the advantage with 13…Na5?. I returned it with 15.Ne3?. Black then opened the center with 15…d5?, missed the best defensive sequence with 16…cxd5?, and finally placed the queen on d5.

The game was not a smooth demonstration of superior play. It was a negotiation in which both parties repeatedly returned the advantage until Black accidentally signed over the queen.

But 17.Rxc5! was real. The tactical idea worked. The engine confirms it. The win counts. The mistakes count too.

That is why this article goes overboard. A single evaluation graph would say the game swung. The full analysis explains the different reasons:

  • pressure released too early;
  • a pawn structure committed without necessity;
  • an attacked piece retreated before checking captures;
  • a central break played without resolving loose pieces;
  • a loose bishop exposed by a newly opened file; and
  • a queen placed on a knight’s square.

Stockfish did not play the game. It did not feel the hesitation before Nxd5, and it does not get the ten rating points.

It does, however, have extremely detailed receipts.