Index · pending cases r28 · case 2 · case 1 (c4)

Pending case 2: room 1a93804a, move 4 (Rb8). The reply rule fails, the "gave up" rule fails too, and the rule that would tell it.

Story d90a344c-4c53-4cb1-8f2e-6ca1f5f48245, room 1a93804a-a2bf-4f39-885a-49a5968d1427. You play white. Your opponent plays black. Class in pending-unclear-r28.md: positional-gives-material. In the r29 rule study this moment is in the remainder: no tested rule explains it.

1. The facts the generator has

Position before Rb8. Black to move. Black's queen on h3 and rook on g8 point at your king. Your knight on g2 is the only cover.

Score before the move-564 cp (white's side). Black is winning by about 5.6 pawns.
Best move for blackRxg2+ (g8g2), a rook sacrifice
Move playedRb8 (f8b8)
Score after Rb8-7 cp. The game is level.
Drop557 cp. One of the largest drops in the 120 stories.
Best reply for youQb2 (-24 cp, level). In the game you played Rxb8 (-118 cp).
Stored best line before Rb8Rxg2+ Rxg2 Rxf5 Qe2 Nf3+ Kf2 Qh4+ Rg3 Qh2+ Rg2 Ng1+ Ke1 Qh4+ Kd1 Nxe2 Kxe2 Rg5 (17 plies, already in the facts)

2. What the generator does today: the reply rule

Two of your replies are within 100 cp of the best one. Both lines are walked for material from your side. Neither wins anything, so no told line.

replyscore (white)line walked (10 plies)net for youverdict
Qb2-24Qb2 Rxb7 Qxd4+ Kc7 Qxe5+ Kb6 Qd4+ c5 Rb2+ Ka7-1rejected: no material gain
Rxb8-118Rxb8 Rxb8 Qe2 Rb1+ Rf1 Rxf1+ Qxf1 Nf3+ Kf2 Nh20rejected: no material gain

Qb2

plymovecheck / capturerunning sum (you)
1Qb2-0
2Rxb7takes rook-5
3Qxd4+check-4
4Kc7--4
5Qxe5+check-1
6Kb6--1
7Qd4+check-1
8c5--1
9Rb2+check-1
10Ka7--1

Rxb8

plymovecheck / capturerunning sum (you)
1Rxb8takes rook+5
2Rxb8takes rook0
3Qe2-0
4Rb1+check0
5Rf1-0
6Rxf1+check-5
7Qxf1takes rook0
8Nf3+check0
9Kf2-0
10Nh2-0

Text shown today: They don't lose a piece right away, but if you find (Qb2), their winning position slips back to a level game. It threatens checkmate with (Qxd4#). In the game you handled it your own way with (Rxb8).

Steps: c2b2 → "Your queen moves (Qb2)."

The text is true: Qb2 levels the game and threatens Qxd4#. But it says nothing about why Rb8 was a mistake. Black was winning by 5.6 pawns; the text calls it "their winning position" and stops there.

3. The "gave up" rule (case 1, PR in progress) on this moment

The rule walks the stored best line before the mistake, from black's side, and needs a material gain of at least 1 that settles by ply 8 within a 10-ply walk.

plymovecheck / capturerunning sum (them)
1Rxg2+check+3
2Rxg2takes rook-2
3Rxf5takes pawn-1
4Qe2--1
5Nf3+check-1
6Kf2--1
7Qh4+check-1
8Rg3--1
9Qh2+check-1
10Rg2--1
11Ng1+check-1
12Ke1--1
13Qh4+check-1
14Kd1--1
15Nxe2takes queen+8
16Kxe2takes knight+5

4. What fails

5. The rule that would tell it: a forcing line may run long

In this line 8 of black's 8 moves are checks or captures. Your replies are forced: recapture, king moves, or a block. Such a line is easy to follow on the board, because there is no choice at each step. Proposed rule, with the current facts and no new engine data:

Proposed scene (prototype text from the board and the line)

Their move (Rb8) was a mistake. Before it, they had (Rxg2+): a rook sacrifice. Your king gets chased by checks, and at the end they win your queen for a knight: net +5 for them. Let's see what they gave up.

  1. 1Their rook takes your knight (Rxg2+). Check. Net +3 for them.
  2. 2Your rook takes their rook (Rxg2). Net -2 for them.
  3. 3Their rook takes your pawn (Rxf5). Net -1 for them.
  4. 4Your queen moves (Qe2).
  5. 5Their knight moves (Nf3+). Check.
  6. 6Your king runs (Kf2).
  7. 7Their queen moves (Qh4+). Check.
  8. 8Your rook moves (Rg3).
  9. 9Their queen moves (Qh2+). Check.
  10. 10Your rook moves (Rg2).
  11. 11Their knight moves (Ng1+). Check.
  12. 12Your king runs (Ke1).
  13. 13Their queen moves (Qh4+). Check.
  14. 14Your king runs (Kd1).
  15. 15Their knight takes your queen (Nxe2). Net +8 for them.
  16. 16Your king takes their knight (Kxe2). Net +5 for them.

After (Rb8) that line is gone. Your reply (Qb2) makes the game level, and it threatens checkmate with (Qxd4#). In the game you played (Rxb8) instead.

6. Coverage and the rest

Scan of the 66 remainder moments (stored best line before the mistake, up to 18 plies, script ai-workspace/forcing-scan.ts):

shapemomentswhat to do
Forcing long line: gain settles inside the stored line, 70%+ of the attacker's moves are checks or captures13This rule. Examples: 1a93804a m4 (this page), 44509466 m2 (Qf6, drop 652), dae255d7 m22 (Qc6+), dfb4f795 m5 (Ne3, drop 508).
Mate inside the stored line, longer than 10 plies1Same rule (296f611c m32: mate in 15 plies, all checks).
Long quiet gain: payoff after ply 10 with few checks17Leave. A long quiet line is not easy to follow; the reader must trust every quiet move.
No material gain at all in the stored line35The true positional remainder. Example: 6d08e398 m8 (g5, drop 210): the missed line Nh5 Bg3 Nxg3 fxg3 ... trades pieces and ends level in material. Only an honest score sentence is possible ("Before this move the engine had them clearly ahead. After it the game is level. There is no single forcing line.").

Code for the rule: libs/api/src/domain/zapp/game-story/line-narration.ts: walkLine returns the attacker's check/capture ratio; toldLineFromMoves raises its ply limit to 18 and accepts settle inside the line when the ratio is at least 0.7 (new clarity "forcing"); narrateToldLine adds the "a sacrifice" headline when the running sum goes below 0 before the payoff. pure.ts needs no change beyond the "gave up" fallback of case 1.

Data: ai-workspace/game-story-prod-review/regen/inputs-r28/d90a344c-4c53-4cb1-8f2e-6ca1f5f48245.json, rule study regen/analysis-r29/rules-out.json. Built 2026-08-27.