One-line game stories: where Akshat's format works, where it fails, and what must change
1. What Akshat wrote, sentence by sentence
Akshat's Slack write-up of the Kxh4 case (room 6d08e398, white to move, position before the mistake r2r2k1/p4p2/1q3n1p/8/1b2P2p/3B1PKP/1R3P2/3Q3R w - - 0 30):
King to h4 was a mistake here. It leads to black getting a rook and a pawn in exchange for a knight and a pawn, so +2 for black. Lets see how
Black knight captures the pawn with a genius knight sacrifice
The pawn captures back, gaining net 2 points. But the lead is not fair, see what happens next
The queen forks the king and the white rook, setting up the comeback
king moves back to get out of the check
The queen gets the rook, making the net lead +2. White can't force a recovery.
The line is 30.Kxh4 Nxe4 31.fxe4 Qf6+ 32.Kg3 Qxb2. Each sentence needs one fact, and each fact is computable:
| Sentence | Fact it needs | Where the fact comes from |
|---|---|---|
| "King to h4 was a mistake" | Score drop between the best move and the played move | Engine, already in the story input (isMistake) |
| "black getting a rook and a pawn in exchange for a knight and a pawn, so +2" | Pieces taken by each side up to the point where material stops changing, and the sum | Piece count along the line (chess.js); the generator already has settledLineGain |
| "knight captures the pawn with a genius knight sacrifice" | The move is a capture, and the moved piece can be taken back by a cheaper piece | Board: attackers of the landing square |
| "The pawn captures back, gaining net 2 points" | Recapture; running material sum after the ply | Board |
| "The queen forks the king and the white rook" | After the move, the queen attacks the king and a rook | Board: attacked squares of the moved piece; the generator already has a fork detector ("attacks X and Y at the same time") |
| "king moves back to get out of the check" | The side to move was in check and moved the king | Board |
| "The queen gets the rook, making the net lead +2" | Capture; running sum; sum does not change on the next ply | Board: the payoff ply (last change of the sum) |
| "White can't force a recovery" | The engine score after the best defence stays winning for black | Engine score of the best defence |
2. The same case through the checker
2.1 Akshat's line, written by the template
The prototype takes the position after Kxh4 and Akshat's moves (Nxe4 fxe4 Qf6+ Kg3 Qxb2), and writes:
Kxh4 was a mistake. It costs you a pawn and a rook for a knight: net +3 for them. Let's see how.
Their knight takes your pawn (Nxe4). It is a sacrifice: the knight can be taken. Net +1 for them.
Your pawn takes back (fxe4). Net -2 for them.
Their queen moves (Qf6+). Check. It attacks your king and your rook at the same time.
Your king steps out of check (Kg3).
Their queen takes your rook (Qxb2). Net +3 for them.
You can't get it back.
Running sum from the position after Kxh4: Nxe4+1 fxe4-2 Qf6+-2 Kg3-2 Qxb2+3 Kh2+3. This is Akshat's text with three differences: the sum is +3 not +2 (zero point, see the note above), "genius" is not there, and "the lead is not fair, see what happens next" is replaced by the sum going negative and then positive. Everything else is a board fact the template reads off the line. So the format can be generated, given the line.
2.2 Which line the checker picks when it must choose
The checker (ai-workspace/game-story-prod-review/deva-format/line-check.mjs) does not know Akshat's line. It looks at the six best replies, walks each engine line for 10 plies, and marks the ply where the material sum changes for the last time (the payoff). Among replies within 1.5 pawns of the best score it picks the one whose payoff comes soonest, larger sum on a tie.
| Reply | Score (cp, black) | Sum at payoff | Payoff ply |
|---|---|---|---|
| Kh8 | 627 | 0 | 6 |
| Nd5 | 618 | +2 | 7 |
| Nxe4 (picked) | 603 | +3 | 5 |
| Nh7 | 592 | +2 | 5 |
| a5 | 581 | 0 | 0 |
| Kf8 | 577 | -3 | 8 |
Picked: Nxe4 fxe4 Be7+ Kg3 Qxb2, category material-short, sum +3 at ply 5, engine candidate 3 (603 cp against 627 cp for the best reply). Running sum: Nxe4+1 fxe4-2 Be7+-2 Kg3-2 Qxb2+3.
Template text for the picked line:
Kxh4 was a mistake. It costs you a pawn and a rook for a knight: net +3 for them. Let's see how.
Their knight takes your pawn (Nxe4). It is a sacrifice: the knight can be taken. Net +1 for them.
Your pawn takes back (fxe4). Net -2 for them.
Their bishop moves (Be7+). Check.
Your king steps out of check (Kg3).
Their queen takes your rook (Qxb2). Net +3 for them.
You can't get it back.
Defender alternatives within 100 cp inside the picked line: at ply 2, Rg1+ instead of fxe4 (as good or better for the defender); at ply 4, Kg4 instead of Kg3 (30 cp worse).
3. Why the generator does not write this today
Master's story for the same game (round-3 Kg2 case, exact master version) never explains Kxh4. Move 10 is told as the opponent's mistake (gxh4+) and your missed punishment (Kg2): "Here's the line that was open to you. In the game you handled it your own way with (Kxh4)." The mistake itself gets no scene. The scene before it (move 9, Kg3) reads: "From here they have a way to win material." with five steps: "Their bishop moves (Bd6+). Your king moves (Kg2). Their queen captures your rook (Qxb2). Your bishop captures their pawn (Bxg5). Their pawn captures your bishop (hxg5)." No purpose, no sum, no end.
Four reasons, all in libs/api/src/domain/zapp/game-story/pure.ts:
getLineMoves (line 619) replays the engine's first line only. Akshat's line is engine candidate 2 to 5 (Nxe4 scores 603 cp against 627 cp for Kh8). It is not the best line; it is the shortest line with a clear material result. The generator has no notion of "easiest line to tell".trimMovesToForcingCore (line 659) cuts the shown line at the first move that is neither a check nor a same-square recapture. It stops before the payoff (move 9 above ends on hxg5 with no closing sentence), or after one move ("Here's the line that was open to you." + Kg2). Akshat stops at the payoff and says so.moveStepText (about line 2622) writes only "Your king moves (Kg3)." or "Their queen captures your rook (Qxb2)." for every ply. No sacrifice, no fork, no "out of check", no running sum. Of 2459 step texts in the 120 stories, 2442 are of this form.problemText (line 1744) and the punishment/correct-move builders pick a headline from claim classes (hanging piece, loses material, wins piece, mate). When no class fires, they fall back to "From here they have a way to win material.", "Here's the line that was open to them.", "they end up with the better position", "keeps the game even". 292 of 676 consequence headlines in the 120 stories (43.2%) are such fallbacks. Akshat's headline is the material sum, which is always computable when material changes.4. The numbers over 120 stories
Categories after the checker's line choice (six candidates, payoff rule, 6 plies = Akshat's "3-4 steps" as three move pairs):
| Category | Meaning | Moments | Share |
|---|---|---|---|
| material-short | Material payoff within 6 plies, sum at least a pawn. The format applies. | 196 | 29.0% |
| mate-short | Forced mate in 3 or less. The format applies (mate replaces the sum). | 32 | 4.7% |
| material-long | Payoff after 7 to 10 plies, or still trading at ply 9-10. Too many steps. | 170 | 25.1% |
| mate-long | Forced mate in 4 or more. Too many steps. | 43 | 6.4% |
| positional | Sum below a pawn at ply 10 of the best line. No sum to tell. | 235 | 34.8% |
| Moment kind | Moments | material-short | mate-short | material-long | mate-long | positional |
|---|---|---|---|---|---|---|
| mistake | 293 | 86 | 16 | 75 | 16 | 100 |
| slight-miss | 40 | 10 | 0 | 9 | 1 | 20 |
| opponent-mistake | 294 | 89 | 16 | 78 | 23 | 88 |
| opponent-slight-miss | 49 | 11 | 0 | 8 | 3 | 27 |
Inside the 228 moments that fit: 58 pay off on the first ply (the reply simply takes a hanging piece; the format collapses to one step); 53 use a candidate other than the engine's first line (the first line is longer or quieter); 132 have at least one defender alternative within 100 cp inside the told line. For material-short moments, the line shown today is shorter than the payoff line in 73 cases, equal in 77, longer in 46.
102 of the 235 positional moments have the punisher behind in material at ply 10 of the best line: the best line gives material away for an attack or a bind, and the eval is still winning. A material headline would be false for them.
5. Where the format works
Examples with the running sum, today's text, and the template text the prototype writes from the board and the line. The template is mechanical: capture, check, sacrifice (moved piece can be taken by a cheaper piece), fork (moved piece attacks two pieces worth a minor piece or more, or the king plus one), king out of check, running sum, and a closing sentence.
Short material lines
3c6deae8 move 6 · black, your move · mistake Rxc7 · material-short · net +9 at ply 3
Line with running material (punisher's view): Rxc7+5 Qxc70 Qxc7+9 g5+9 Qe5+9 a2+9 Ra1+9 g4+9
Text today: From here they have a way to win your queen. Along the way the rooks get traded. It leaves their rook on c7 where you can take it, but their queen guards c7, so the trade loses material for you.
Steps today: Their rook captures your rook (Rxc7). Your queen captures their rook (Qxc7). Their queen captures your queen (Qxc7).
Template text (from board + line, prototype): Rxc7 was a mistake. It costs you a rook and a queen for a rook: net +9 for them. Let's see how.
- Their rook takes your rook (Rxc7). It attacks your queen. Net +5 for them.
- Your queen takes back (Qxc7). Net 0 for them.
- Their queen takes back (Qxc7). Net +9 for them.
You can't get it back.
1a93804a move 3 · white, your move · mistake Rf2 · material-short · net +8 at ply 5
Line with running material (punisher's view): Re80 Rb20 Ng40 Qxc6+-1 Kxc6+8 Rfc2++8 Kd7+8 Rb7++8
Text today: Your defense gets even harder from here. It leaves their rook on g2 where you can take it, but even if you take it, they stay winning. Players usually take it here.
Steps today: Their rook captures your knight (Rxg2+).
Template text (from board + line, prototype): Rf2 was a mistake. It costs you a queen for a pawn: net +8 for them. Let's see how.
- Their rook moves (Re8).
- Your rook moves (Rb2).
- Their knight moves (Ng4). It attacks your rook.
- Your queen takes their pawn (Qxc6+). Check. Net -1 for them.
- Their king steps out of check (Kxc6). Net +8 for them.
You can't get it back.
6ed57aa7 move 34 · white, opponent's move · mistake Kc6 · material-short · net +3 at ply 5
Line with running material (punisher's view): h50 Kxc5-1 b7-1 Kb6-1 b8=R++3 Ka6+3 Rg8+3 g5++3
Defender alternatives within 100 cp: ply 2: Kxc5 shown, Kb5 is as good or better.
Text today: They don't lose a piece right away, but after your reply (h5), this is the line to watch. You found (h5) here as well.
Steps today: Your pawn moves (h5). Their king moves (Kb7). Your king moves (Kf5). Their king moves (Kc8). Your king moves (Ke5). Their king moves (Kd7). Your king moves (Kd5). Their king moves (Kc8).
Template text (from board + line, prototype): Kc6 was a mistake. You get a new rook for a pawn: net +3 for you. Let's see how.
- Your pawn moves (h5).
- Their king takes your pawn (Kxc5). Net -1 for you.
- Your pawn moves (b7).
- Their king moves (Kb6).
- Your pawn becomes a rook (b8=R+). Check. Net +3 for you.
They can't get it back.
d9d59cf3 move 7 · black, opponent's move · mistake Rxc5 · material-short · net +9 at ply 5
Line with running material (punisher's view): Rxe2+3 Rf5+3 Rxg2++4 Kf1+4 Rxf5++9 Ke1+9 Rc5+9 e4+9
Text today: The problem for them is their bishop. It can be taken, and they can't save it. Along the way you take their rook. You found (Rxe2) in the game too.
Steps today: Your rook captures their bishop (Rxe2). Their rook moves (Rf5). Your rook captures their pawn (Rxg2+). Their king moves (Kf1). Your rook captures their rook (Rxf5+).
Template text (from board + line, prototype): Rxc5 was a mistake. It costs them a bishop, a pawn and a rook: net +9 for you. Let's see how.
- Your rook takes their bishop (Rxe2). Net +3 for you.
- Their rook moves (Rf5).
- Your rook takes their pawn (Rxg2+). Check. Net +4 for you.
- Their king steps out of check (Kf1). It attacks your rook.
- Your rook takes their rook (Rxf5+). Check. Net +9 for you.
They can't get it back.
cc9ed5b7 move 28 · black, your move · mistake Kg7 · material-short · net +1 at ply 6
Line with running material (punisher's view): Ne8+0 Kf70 Nxd6++3 Ke6+3 Kxf4+4 Kxd6+1 Kf5+1 Ke7+1
Defender alternatives within 100 cp: ply 2: Kf7 shown, Kh6 is as good or better; ply 4: Ke6 shown, Kf8 is as good or better; ply 6: Kxd6 shown, Kd5 is 81 cp worse.
Text today: From here they have a way to win your bishop.
Steps today: Their knight moves (Ne8+). Your king moves (Kh6). Their knight captures your bishop (Nxd6).
Template text (from board + line, prototype): Kg7 was a mistake. It costs you a bishop and a pawn for a knight: net +1 for them. Let's see how.
- Their knight moves (Ne8+). Check. It attacks your king and your bishop at the same time.
- Your king steps out of check (Kf7). It attacks their knight.
- Their knight takes your bishop (Nxd6+). Check. Net +3 for them.
- Your king steps out of check (Ke6). It attacks their knight.
- Their king takes your pawn (Kxf4). Net +4 for them.
- Your king takes their knight (Kxd6). Net +1 for them.
You can't get it back.
35914ca3 move 11 · black, opponent's move · mistake Rg1 · material-short · net +12 at ply 5
Line with running material (punisher's view): Bxh5++9 Kc2+9 Bg6++9 Kb3+9 Rxd2+12 Rad1+12 Bc2++12 Kb4+12
Text today: The problem for them is their queen. It can be taken, and they can't save it. Along the way you take their knight. You found (Bxh5+) here as well.
Steps today: Your bishop captures their queen (Bxh5+). Their king moves (Kc2). Your bishop moves (Bg6+). Their king moves (Kb3). Your rook captures their knight (Rxd2).
Template text (from board + line, prototype): Rg1 was a mistake. It costs them a queen and a knight: net +12 for you. Let's see how.
- Your bishop takes their queen (Bxh5+). Check. Net +9 for you.
- Their king steps out of check (Kc2).
- Your bishop moves (Bg6+). Check.
- Their king steps out of check (Kb3).
- Your rook takes their knight (Rxd2). Net +12 for you.
They can't get it back.
Short mates
44509466 move 7 · black, opponent's move · mistake Nxd4 · mate-short · net +5 at ply 1 · mate in 1
Line with running material (punisher's view): Rxf1#+5
Text today: This line ends in checkmate. And you played (Rxf1#) in the game as well.
Steps today: Your rook captures their rook (Rxf1#).
Template text (from board + line, prototype): Nxd4 was a mistake. It allows checkmate in 1. Let's see how.
- Your rook takes their rook (Rxf1#). Checkmate. Net +5 for you.
dae255d7 move 25 · white, your move · mistake Kg5 · mate-short · net 0 at ply 1 · mate in 1
Line with running material (punisher's view): Qg4#0
Text today: The real problem is your king. This line ends in checkmate. It looks like you can take their queen on g4 with your king, but their knight guards g4, so that capture is illegal. It looks like you can take their knight on f6 with your king, but their pawn guards f6, so that capture is illegal.
Steps today: Their queen moves (Qg4#).
Template text (from board + line, prototype): Kg5 was a mistake. It allows checkmate in 1. Let's see how.
- Their queen moves (Qg4#). Checkmate.
a3dc70f0 move 17 · black, opponent's move · mistake h4 · mate-short · net 0 at ply 1 · mate in 1
Line with running material (punisher's view): Qh2#0
Text today: This line ends in checkmate. It looks like they can take your queen on h2 with their king, but your bishop guards h2, so that capture is illegal. In the game you played (Qd4). That still keeps you winning — the line shown is another strong option.
Steps today: Your queen moves (Qh2#).
Template text (from board + line, prototype): h4 was a mistake. It allows checkmate in 1. Let's see how.
- Your queen moves (Qh2#). Checkmate.
One-ply payoffs (the format collapses)
44509466 move 7 · black, opponent's move · mistake Nxd4 · mate-short · net +5 at ply 1 · mate in 1
Line with running material (punisher's view): Rxf1#+5
Text today: This line ends in checkmate. And you played (Rxf1#) in the game as well.
Steps today: Your rook captures their rook (Rxf1#).
Template text (from board + line, prototype): Nxd4 was a mistake. It allows checkmate in 1. Let's see how.
- Your rook takes their rook (Rxf1#). Checkmate. Net +5 for you.
One step. "Let's see how" and a running sum add nothing here; the headline alone is the story.
7e6d1be3 move 1 · black, opponent's move · mistake Rd6 · material-short · net +9 at ply 1
Line with running material (punisher's view): Qxg6+9 Rdd1+9 Re2+9 a4+9 Qf5+9 h3+9 Kf7+9 Rc1+9
Text today: After the reply shown (Qxg6), you end up with the better position. Along the way you take their queen. In the game you played (Re1) instead, so you missed this chance. Remember it for next time.
Steps today: Your queen captures their queen (Qxg6).
Template text (from board + line, prototype): Rd6 was a mistake. It costs them a queen: net +9 for you. Let's see how.
- Your queen takes their queen (Qxg6). Net +9 for you.
They can't get it back.
One step. "Let's see how" and a running sum add nothing here; the headline alone is the story.
eefc0949 move 15 · black, opponent's move · mistake Qxd2 · material-short · net +9 at ply 1
Line with running material (punisher's view): Qxd2+9 Rg1+9 e5+9 h4+9 e4+9 h5+9 e3+9 Kh2+9
Text today: After your reply (Qxd2), you end up with the better position. Along the way you take their queen. It threatens checkmate with (Qxe1#). And (Qxd2) is exactly what you played. Well done.
Steps today: Your queen captures their queen (Qxd2).
Template text (from board + line, prototype): Qxd2 was a mistake. It costs them a queen: net +9 for you. Let's see how.
- Your queen takes their queen (Qxd2). It attacks their rook. Net +9 for you.
They can't get it back.
One step. "Let's see how" and a running sum add nothing here; the headline alone is the story.
6. Where the format fails
6.1 No material to tell (235 moments, 34.8%)
The score drops 1.5 pawns or more, but at ply 10 of the best line the material sum is still below a pawn. The mistake is real (the engine says so) and the punishment is a plan, not a sequence: a piece gets stuck, a pawn walks in, the king stays open, the queen is pushed around. Akshat's headline "+2 for black" cannot be written, and "let's see how" has no end. Examples, sorted by the size of the engine advantage:
0f1fe5e6 move 5 · black, opponent's move · mistake Rh2 · positional · net 0 at ply 10
Line with running material (punisher's view): Qf3+0 Rg20 Qxd1++5 Kh2+5 Rxf4+6 Qe7+6 Qd4+6 Be4+6 Qxe4+9 Qxe40
Defender alternatives within 100 cp: ply 6: Qe7 shown, Qxh6 is 71 cp worse.
Text today: Here's how you win their rook on d1 from here. You found (Qf3+) here as well.
Steps today: Your queen moves (Qf3+). Their rook moves (Rg2). Your queen captures their rook (Qxd1+). Their king moves (Kh2). Your rook captures their pawn (Rxf4).
e86c4536 move 31 · white, your move · mistake Kxc2 · positional · net 0 at ply 4
Line with running material (punisher's view): Rc3+0 Kb20 Rxc1+5 Kxc10 h50 Kd20 Ke40 Ke20
Defender alternatives within 100 cp: ply 2: Kb2 shown, Kd1 is as good or better.
Text today: You don't lose a piece right away, but after their reply (Rc3+), this is the line to watch. Along the way the rooks get traded.
Steps today: Their rook moves (Rc3+). Your king moves (Kd2). Their rook captures your rook (Rxc1). Your king captures their rook (Kxc1). Their king moves (Kc3).
43438124 move 32 · white, opponent's move · mistake Qf6 · positional · net 0 at ply 2
Line with running material (punisher's view): Qxf6++9 Kxf60 a40 Ke50 Kg20 Ke40 a50 Kf40
Text today: After the reply shown (Qxf6+), they end up worse off than they had to be. With the queens traded, your extra material decides the game.
Steps today: Your queen captures their queen (Qxf6+). Their king captures your queen (Kxf6).
43438124 move 26 · white, opponent's move · mistake Qg5 · positional · net 0 at ply 8
Line with running material (punisher's view): Qd3+0 Kh60 Qh3+0 Kg70 Qg20 Kh60 Qxg5++9 Kxg50
Defender alternatives within 100 cp: ply 2: Kh6 shown, f5 is as good or better; ply 4: Kg7 shown, Kg6 is as good or better; ply 6: Kh6 shown, Kg6 is as good or better; ply 8: Kxg5 shown, fxg5 is 97 cp worse.
Text today: They don't lose a piece right away, but after the natural reply (Qd3+), you end up with the better position. It puts their king in check. In the game you played (Qa7+), so you missed this one too.
Steps today: Your queen moves (Qd3+). Their king moves (Kh6). Your queen moves (Qh3+). Their king moves (Kg6).
43438124 move 30 · white, opponent's move · mistake f5 · positional · net 0 at ply 3
Line with running material (punisher's view): Qg10 Qxg1+-9 Kxg10 Kf70 a40 Ke60 h40 Ke50
Defender alternatives within 100 cp: ply 2: Qxg1+ shown, Kh6 is as good or better.
Text today: They don't lose a piece right away, but if you find (Qg1), they end up worse off than they had to be. It offers a queen trade. In the game you played (Qd6+), so you missed this chance as well.
Steps today: Your queen moves (Qg1).
43438124 move 28 · white, opponent's move · mistake Kg6 · positional · net 0 at ply 4
Line with running material (punisher's view): Qg10 Kf50 Qxg5++9 Kxg50 a40 Kf40 Kg20 Ke40
Defender alternatives within 100 cp: ply 2: Kf5 shown, Kh6 is as good or better; ply 4: Kxg5 shown, fxg5 is 77 cp worse.
Text today: They don't lose a piece right away, but after the natural reply (Qg1), you end up with the better position. It offers a queen trade. In the game you played (Qd4), so you missed this chance as well.
Steps today: Your queen moves (Qg1).
6.2 The best line gives material away (102 moments)
Here the punisher is down material at ply 10 of the best line and still winning on the engine score. A material headline would be wrong by sign. These are attack or bind positions; the honest sentence is about the king or about a piece that cannot move, not about a sum.
4dface4d move 6 · white, opponent's move · mistake Qh2+ · positional · net -4 at ply 10
Line with running material (punisher's view): Kf30 Qb80 Rg50 g60 Rd50 Re10 Bh80 Re50 Qxe5+5 Qxe5-4
Defender alternatives within 100 cp: ply 4: g6 shown, Qf8 is as good or better.
Text today: They don't lose a piece right away, but after your reply (Kf3), this is the line to watch. It leaves your bishop on f6 where they can take it, but even if they take it, you stay winning. Players usually take it here. And (Kf3) is exactly what you played. Well done.
Steps today: Your king moves (Kf3).
320a18fe move 12 · black, your move · mistake b5 · positional · net -7 at ply 8
Line with running material (punisher's view): Qd60 Bxg2+-1 Kxg2+2 Qa8++2 Kf2+2 Qe8+2 Qd7+2 Qxd7-7
Defender alternatives within 100 cp: ply 8: Qxd7 shown, Qf8 is as good or better.
Text today: You don't lose a piece right away, but if they find (Qd6), you end up worse off than you had to be. It puts pressure on your bishop.
Steps today: Their queen moves (Qd6). Your queen moves (Qa8). Their king moves (Kh2). Your pawn moves (g5). Their bishop moves (Bc3). Your queen moves (Qb7). Their queen moves (Qd8+). Your king moves (Kh7).
dceffae1 move 8 · black, your move · mistake Qe6 · positional · net -1 at ply 8
Line with running material (punisher's view): Qxc5+3 Qb6+3 Qxb6+12 Rxb6+3 Rd7+3 Re6+3 Rxf7++4 Kxf7-1
Defender alternatives within 100 cp: ply 2: Qb6 shown, Qc6 is as good or better; ply 6: Re6 shown, Kg8 is 17 cp worse; ply 8: Kxf7 shown, Kg8 is as good or better.
Text today: The problem is your knight. It can be taken, and you can't save it.
Steps today: Their queen captures your knight (Qxc5).
9e2e0f28 move 14 · white, opponent's move · mistake g5 · positional · net -1 at ply 10
Line with running material (punisher's view): Kg10 h50 a70 h40 Kf20 Kg80 Ke20 Kf80 Kd20 Rxa7-1
Defender alternatives within 100 cp: ply 2: h5 shown, g4 is 1 cp worse; ply 4: h4 shown, Kg8 is 3 cp worse; ply 6: Kg8 shown, Rf8 is 6 cp worse; ply 8: Kf8 shown, Rd8 is 8 cp worse.
Text today: They don't lose a piece right away, but after the natural reply (a7), this is the line to watch. It pushes your passed pawn to a7. In the game you played (Re7). That still keeps you winning — the line shown is another strong option.
Steps today: Your pawn moves (a7).
6.3 Slow material (170 moments)
The gain is real, but the payoff comes after 7 to 10 plies, or the trading is still going on at ply 9-10 so the sum cannot be trusted. Told in Akshat's format that is 4 to 5 move pairs, each with a purpose sentence; the user is past the "3-4 steps" limit before the point lands.
22551a7e move 9 · white, your move · mistake Qg4 · material-long · net +10 at ply 9
Line with running material (punisher's view): Qc30 Kd10 Nxg4+9 Bg5+9 Qa1++9 Ke2+9 Qh1+9 Bh4+9 Qxg2++10
Defender alternatives within 100 cp: ply 2: Kd1 shown, Nb3 is as good or better; ply 4: Bg5 shown, Nf5 is as good or better; ply 8: Bh4 shown, Bd5 is as good or better.
Text today: From here they have a way to win your queen. The line ends with their bishop on d6 where you can take it, but even if you take it, they stay winning.
Steps today: Their queen moves (Qc3). Your knight moves (Nb3). Their queen moves (Qb2+). Your king moves (Kd1). Their knight captures your queen (Nxg4).
32214e5a move 11 · white, your move · mistake Bxf7+ · material-long · net +2 at ply 7
Line with running material (punisher's view): Qxf7+3 Rxf7-6 Rg1+-6 Kxg1-11 d1=Q+-3 Kg2-3 Rxf7+2 Qa8++2
Text today: You don't lose a piece right away, but after their reply (Kh8), this is the line to watch.
Steps today: Their king moves (Kh8).
296f611c move 33 · white, your move · mistake Kc2 · material-long · net +10 at ply 9
Line with running material (punisher's view): Rg2+0 Re20 Rxe2++5 Qxe20 Qxe2++9 Kc1+9 Qd3+9 d8=B+7 Qxd8+10
Defender alternatives within 100 cp: ply 8: d8=B shown, d8=R is as good or better.
Text today: From here they have a way to win your queen. Along the way the rooks get traded.
Steps today: Their rook moves (Rg2+). Your rook moves (Re2). Their rook captures your rook (Rxe2+). Your queen captures their rook (Qxe2). Their queen captures your queen (Qxe2+). Your king moves (Kc1).
dde70c79 move 1 · black, opponent's move · mistake g3 · material-long · net +7 at ply 7
Line with running material (punisher's view): Nf3+0 Kh10 Nxe1+5 Qb7+5 Rd1+5 Bxf6+4 Qxf6+7 Qe4++7
Defender alternatives within 100 cp: ply 2: Kh1 shown, Kf1 is as good or better; ply 4: Qb7 shown, Qa8 is 43 cp worse.
Text today: Here's how you win their rook from here. In the game you played (Rc6) instead, so you missed this chance. Remember it for next time.
Steps today: Your knight moves (Nf3+). Their king moves (Kf1). Your queen moves (Qd3+). Their rook moves (Re2). Your rook moves (Re6). Their bishop moves (Bc3). Your queen captures their rook (Qxe2+).
6.4 Long mates (43 moments)
3a872207 move 6 · black, your move · mistake Qe6 · mate-long · net +14 at ply 7 · mate in 4
Line with running material (punisher's view): Rd7+0 Kg80 Qxe6++9 Rf7+9 Qxf7++14 Kh8+14 Qg7#+14
Defender alternatives within 100 cp: ply 2: Kg8 shown, Kf6 is 1 cp worse; ply 4: Rf7 shown, Kh8 is 1 cp worse.
Text today: The real problem is your king. This line ends in checkmate.
Steps today: Their rook moves (Rd7+). Your king moves (Kg8). Their queen captures your queen (Qxe6+). Your rook moves (Rf7). Their queen captures your rook (Qxf7+). Your king moves (Kh8). Their queen moves (Qg7#).
50570619 move 13 · white, your move · mistake Nh4 · mate-long · net +1 at ply 7 · mate in 4
Line with running material (punisher's view): Re1+0 Kh20 Qf4+0 g30 Qxf2++1 Ng2+1 Qg1#+1
Text today: The real problem is your king. This line ends in checkmate.
Steps today: Their rook moves (Re1+). Your king moves (Kh2). Their queen moves (Qf4+). Your pawn moves (g3). Their queen captures your pawn (Qxf2+). Your knight moves (Ng2). Their queen moves (Qg1#).
755cf772 move 3 · white, your move · mistake Rxc5 · mate-long · net +19 at ply 7 · mate in 4
Line with running material (punisher's view): Qb1+0 Rc10 Qxc1++5 Qd1+5 Qxd1++14 Re1+14 Qxe1#+19
Defender alternatives within 100 cp: ply 2: Rc1 shown, Qd1 is 1 cp worse; ply 4: Qd1 shown, Re1 is 1 cp worse.
Text today: The real problem is your king. This line ends in checkmate.
Steps today: Their queen moves (Qb1+). Your rook moves (Rc1). Their queen captures your rook (Qxc1+). Your queen moves (Qd1). Their queen captures your queen (Qxd1+). Your rook moves (Re1). Their queen captures your rook (Qxe1#).
6.5 The defender has an equal road inside the told line (132 of the 228 fitting moments)
The format tells one road. When the defender has a second move within 100 cp at some ply, the told step is a choice, not a fact. The conclusion can still be true (both roads lose the same material), but the sentence "the pawn captures back" is then wrong half the time. The alternatives below were found at depth 14; section 2 shows one such gap (8 cp) growing to 174 cp at depth 32, so some of these disappear at production depth, and the count is an upper bound. Examples:
10c52892 move 4 · black, your move · mistake Rxa4 · material-short · net +5 at ply 6
Line with running material (punisher's view): Qxa4+5 Ng4+5 f3+5 Ne5+5 Nxe5+8 Bxe5+5 Bh6+5 Ra8+5
Defender alternatives within 100 cp: ply 2: Ng4 shown, h5 is 37 cp worse; ply 4: Ne5 shown, Nh6 is 66 cp worse; ply 6: Bxe5 shown, Qxe5 is 70 cp worse.
Text today: After their reply (Qxa4), your clear advantage shrinks to a small edge. Along the way they take your rook.
Steps today: Their queen captures your rook (Qxa4).
eefc0949 move 2 · black, your move · mistake Rxf1+ · material-short · net +4 at ply 6
Line with running material (punisher's view): Rxf1+5 Rd8+5 g3+5 Bf6+5 Qe1+5 Qxb3+4 c5+4 Qa2+4
Defender alternatives within 100 cp: ply 2: Rd8 shown, Qd3 is 10 cp worse; ply 4: Bf6 shown, Bg5 is 52 cp worse; ply 6: Qxb3 shown, Qxe1 is 24 cp worse.
Text today: After their reply (Rxf1), you end up worse off than you had to be. Along the way they take your rook.
Steps today: Their rook captures your rook (Rxf1).
95de674b move 11 · white, your move · mistake Nb5 · material-short · net +5 at ply 6
Line with running material (punisher's view): Bxe3++5 Kh1+5 Rcd7+5 Nc3+5 exf3+6 gxf3+5 Kh8+5 Nd5+5
Defender alternatives within 100 cp: ply 2: Kh1 shown, Kf1 is as good or better; ply 4: Nc3 shown, fxe4 is 22 cp worse; ply 6: gxf3 shown, Nd5 is 6 cp worse.
Text today: The problem is your rook on e3. It can be taken, and you can't save it.
Steps today: Their bishop captures your rook (Bxe3+). Your king moves (Kh2). Their rook captures your pawn (Rxc4).
50570619 move 4 · white, opponent's move · mistake Nh4 · material-short · net +2 at ply 6
Line with running material (punisher's view): Qg30 Ra80 Nxh4+3 Ra3+3 Rf5+3 Qxc3+2 Qb8++2 Kh7+2
Defender alternatives within 100 cp: ply 2: Ra8 shown, Re8 is 21 cp worse; ply 4: Ra3 shown, Ra1+ is as good or better; ply 6: Qxc3 shown, Qe6 is as good or better.
Text today: Here's how you win their rook from here. In the game you played (Ne7+) instead, so you missed this chance. Remember it for next time.
Steps today: Your queen moves (Qg3). Their knight captures your pawn (Nxg2). Your queen captures their rook (Qxb8+).
4404aa82 move 1 · white, your move · mistake Rxg7+ · material-short · net +5 at ply 6
Line with running material (punisher's view): Rxg7+5 a4+5 Rb7+5 h3+5 Rxg2++10 Kxg2+5 Rg7++5 Kh2+5
Defender alternatives within 100 cp: ply 2: a4 shown, a3 is 6 cp worse; ply 4: h3 shown, Bc1 is as good or better; ply 6: Kxg2 shown, Nxg2 is as good or better.
Text today: The problem is your rook on g7. It can be taken.
Steps today: Their rook captures your rook (Rxg7).
6.6 The sum is right and the game is not (51 of the 228 fitting moments)
The line wins material, so the headline "it costs you a rook" is true, but the engine score says something else. In 12 moments the punisher is still losing after the line (score below −50 cp for the punisher): the mistake made a lost game less lost for the other side, and "they can't get it back" would be false. In 39 moments the score after the line is under 150 cp: the material comes with a worse position, and "net +1" oversells a pawn the engine rates as almost nothing. These are the cases where Akshat's closing sentence needs the engine, not the board.
4826a62d move 21 · black, opponent's move · mistake Qxh8 · material-short · net +1 at ply 1
Line with running material (punisher's view): Qxf4+1 Re1++1 Kd7+1 Qe8++1 Kc7+1 Qe7++1 Kc8+1 Qe6++1
Text today: Here's the line that was open to you. In the game you again went your own way with (Qxf4).
Steps today: Your king moves (Kf7).
Template text (from board + line, prototype): Qxh8 was a mistake. It costs them a pawn: net +1 for you. Let's see how.
- Your queen takes their pawn (Qxf4). Net +1 for you.
They can't get it back.
The template headline is true and the closing sentence is false: the engine score after the line is still against the punisher.
e86c4536 move 16 · white, opponent's move · mistake Rxe1 · material-short · net +5 at ply 1
Line with running material (punisher's view): Rxe1+5 Rc8+5 Rc1+5 Rc3+5 Kg1+5 Kf7+5 Kf2+5 Ke6+5
Text today: After your reply (Rxe1), part of their advantage slips away. Along the way you take their rook. It moves your rook out of the rook's attack. And you played (Rxe1) in the game as well.
Steps today: Your rook captures their rook (Rxe1).
Template text (from board + line, prototype): Rxe1 was a mistake. It costs them a rook: net +5 for you. Let's see how.
- Your rook takes their rook (Rxe1). Net +5 for you.
They can't get it back.
The template headline is true and the closing sentence is false: the engine score after the line is still against the punisher.
e86c4536 move 8 · white, opponent's move · mistake Qxe5+ · material-short · net +9 at ply 5
Line with running material (punisher's view): Rxe5+9 Rf1+9 R5e2+9 Rxe1+4 Rxe1+9 Kf7+9 Kg3+9 Rd8+9
Defender alternatives within 100 cp: ply 2: Rf1 shown, Rd8 is 43 cp worse; ply 4: Rxe1 shown, h6 is as good or better.
Text today: After your reply (Rxe5), this is the line to watch. Along the way you take their queen. And (Rxe5) is exactly what you played. Well done.
Steps today: Your rook captures their queen (Rxe5).
Template text (from board + line, prototype): Qxe5+ was a mistake. It costs them a queen and a rook for a rook: net +9 for you. Let's see how.
- Your rook takes their queen to stop the check (Rxe5). Net +9 for you.
- Their rook moves (Rf1). It attacks your rook.
- Your rook moves (R5e2).
- Their rook takes your rook (Rxe1). Net +4 for you.
- Your rook takes back (Rxe1). Net +9 for you.
They can't get it back.
The template headline is true and the closing sentence is false: the engine score after the line is still against the punisher.
43c0059c move 4 · white, opponent's move · mistake Qxb2 · material-short · net +2 at ply 6
Line with running material (punisher's view): Ba30 Qb30 Qxb3+9 Bxb30 Bxf8+5 Bxg5+2 Rc8+2 Kh7+2
Defender alternatives within 100 cp: ply 6: Bxg5 shown, Bxf8 is 52 cp worse.
Text today: They don't lose a piece right away, but if you find (Ba3), attacking their queen, they end up worse off than they had to be. It leaves your bishop on a3 where they can take it, but your queen guards a3, so the trade loses material for them. In the game you played (Bxf8), so you missed this one too.
Steps today: Your bishop moves (Ba3).
Template text (from board + line, prototype): Qxb2 was a mistake. It costs them a queen and a rook for a queen and a knight: net +2 for you. Let's see how.
- Your bishop moves (Ba3). It attacks their queen and their rook at the same time.
- Their queen moves (Qb3). It attacks your queen and your bishop at the same time.
- Your queen takes their queen (Qxb3). Net +9 for you.
- Their bishop takes back (Bxb3). Net 0 for you.
- Your bishop takes their rook (Bxf8). Net +5 for you.
- Their bishop takes your knight (Bxg5). It attacks your rook. Net +2 for you.
They can't get it back.
The sum is positive, the score is near zero: the material is paid for by position.
0b5acbb6 move 12 · white, opponent's move · mistake Qxf2+ · material-short · net +8 at ply 4
Line with running material (punisher's view): Kxf2+9 Rh5+9 Ke3+9 Rxf5+8 Rh2+8 b4+8 Rh7+8 Rc5+8
Defender alternatives within 100 cp: ply 2: Rh5 shown, c3 is 48 cp worse; ply 4: Rxf5 shown, Rh1 is 69 cp worse.
Text today: After the reply shown (Rxf2), their edge fades and the game levels out. Along the way you take their queen. In the game you handled it your own way with (Kxf2), and it worked.
Steps today: Your rook captures their queen (Rxf2).
Template text (from board + line, prototype): Qxf2+ was a mistake. It costs them a queen for a pawn: net +8 for you. Let's see how.
- Your king steps out of check (Kxf2). Net +9 for you.
- Their rook moves (Rh5).
- Your king moves (Ke3).
- Their rook takes your pawn (Rxf5). Net +8 for you.
They can't get it back.
The sum is positive, the score is near zero: the material is paid for by position.
11cc68ba move 4 · black, your move · mistake g5 · material-short · net +1 at ply 1
Line with running material (punisher's view): Qxa4+1 Re8+1 Qd7++1 Re7+1 Qd5+1 Kg7+1 Rd1+1 Qc3+1
Text today: You don't lose a piece right away, but if they find (fxg6+), you end up worse off than you had to be. It puts your king in check.
Steps today: Their pawn captures your pawn (fxg6+). Your king captures their pawn (Kxg6).
Template text (from board + line, prototype): g5 was a mistake. It costs you a pawn: net +1 for them. Let's see how.
- Their queen takes your pawn (Qxa4). Net +1 for them.
You can't get it back.
The sum is positive, the score is near zero: the material is paid for by position.
7. Akshat's rules, one by one, with counterexamples
| Rule from the Slack thread | Holds when | Counterexample |
|---|---|---|
| "It leads to black getting a rook and a pawn in exchange for a knight and a pawn, so +2." Headline = material sum. | 33.7% of moments: a stable capture sequence exists within 6 plies. | Section 6.1: 235 moments with no capture in 10 plies. Section 6.2: 102 moments where the sum is negative and the position is still won. |
| "3-4 steps", one path. | Payoff or mate within 6 plies. | Section 6.3 and 6.4: 213 moments need 7 to 10 plies. Cutting them at 6 plies leaves the sum unstated or wrong. |
| "Genius knight sacrifice", "forks the king and the rook": every step has a purpose. | The purpose is a board fact of the moved piece: capture, check, sacrifice, fork, escape, payoff. | Quiet moves in the line (a retreat, a pawn push that prepares something two moves later) have no board fact on the ply they are played. In section 6.1 most plies are like this. The template writes "Your knight moves (Ne3)." for them, which is today's text again. |
| "The pawn captures back." The defender's reply is a fact. | The defender's reply is forced (in check with one escape, or the only move that does not lose more). | At depth 14 the checker calls 31.Rg1+ as good as 31.fxe4 and 32.Kg4 within 12 cp of 32.Kg3; at depth 32 neither holds (174 cp gap; Kg4 is mated). 132 of the 228 fitting moments have such a ply at depth 14; the true count needs production depth. Where the second road is real, the told step is a choice, not a fact. |
| "White can't force a recovery." | The engine score after the best defence stays large. | Any line chosen for shortness rather than strength: the chosen reply is 24 cp below the best reply in the Kxh4 case, which is fine, but in 53 fitting moments the told line is not the engine's first choice and the closing sentence must be checked on that line, not on the first one. |
| "+2" counted from before the mistake. | The zero point is stated. | Same line counted from after the mistake is +3. Two readers with two zero points get two numbers. The story must pick one and keep it for the whole line. |
| "Then at the end, the (max) 3 most common branches, only if they have decent human probability." | A human-move model is available at generation time. | The generator has engine scores only. The checker uses "within 100 cp" as a stand-in; that is not human probability. In the Kxh4 case the human move (Kxh4, 85% per the Slack engine session) is the engine's worst, and the best reply Nxe4 is played by 3.6% of humans. Engine gaps and human roads are different lists. |
| "After that, we can get into the correct move." | The correct move has its own short line. | The correct move often has no line at all: it is the move that avoids the loss, and the engine line after it is quiet. Today's text for it is "This keeps the game even instead of letting them take over." in 79 of 333 correct-move scenes. The same "no sum to tell" problem as section 6.1, on the other side. |
8. What must change
getLineMoves with a candidate list from the engine input; the story input already carries engine facts per position.trimMovesToForcingCore for punishment and ideal-response scenes. The last shown step carries the closing sentence.moveStepText output with: capture ("takes the pawn"), sacrifice ("the knight can be taken"), check, fork ("attacks the king and the rook at the same time"), king out of check, and "Net +n" whenever the sum changes. The prototype on this page does this with about 60 lines; the generator already has the fork and attack detectors.9. How the numbers were made, and limits
Script: ai-workspace/game-story-prod-review/deva-format/line-check.mjs. Input: regen/eval-r27/*.json (120 stories, the round-27 regenerated set). For each scene of kind mistake, slight-miss, opponent-mistake or opponent-slight-miss followed by a consequence scene, the checker takes the consequence scene's FEN (position after the mistake) and runs Stockfish 17, MultiPV 6, depth 18, 6 threads. For the chosen line it runs MultiPV 6, depth 14 at every defender ply up to the payoff (at most 8 plies) to find near-equal alternatives. The payoff ply is the last ply inside the 10-ply window where the material sum changes; a change on ply 9 or 10 is not trusted (the trade may go on) and the line is put in material-long. Material values 1/3/3/5/9. Output: deva-format/line-check-r27.jsonl, one row per moment.
Limits. Depth 18 is below production depth; a few lines will differ at higher depth. "Within 100 cp" stands in for human probability; a human-move model was not run. The template narration is a prototype and has no claim audit behind it; its sentences were checked by hand only for the examples shown in section 2 and section 5. The payoff rule ignores positional compensation, so a few "material-short" moments would be told with a true sum and a wrong feeling (the defender gets an attack for the material); the engine score of the chosen line is shown on every example so those can be seen (a chosen score far below the best score is the sign).