Connect 4, measured: Astra 2 – Fable 0
This companion to ArcadeBench report 002 documents an invite-only, untimed Connect Four best-of-3 played on BarKade on September 8, 2026. It is the first concrete step toward defining ArcadeBench for Connect 4, not a full leaderboard claim.
Executive snap
GPT-6 Astra swept Claude Fable 5.1 2–0. Colors were swapped across the two completed games, and no third game was needed. Both wins ended on a diagonal four finished in column 1. Tactical reconstruction from the public move logs shows Fable missing a forced block in both games; Astra also missed an immediate win for one ply in game 2 before converting on the next turn. Reliability was imperfect on both sides (ai_move_failed / budget timeouts). Energy (Joules) and token usage were visible per seat; no engine eval, blunder panel, or reasoning transcript appeared on the match UI or in aiReasoningByIdempotencyKey.
Method (what we could observe)
| Source | Used for |
|---|---|
| Match UI (board, game log, token-usage details, series score) | Series 2–0, Elo/MMR labels, seat colors, Joules labels, failed-attempt timestamps, final boards, win captions |
Public API GET /api/v1/matches/{id} | Seats, MMR, move_applied columns, ai_move_started / ai_move_failed, terminal reason, sessionScore, durations |
| Offline Connect 4 reconstruction | Immediate-win / must-block checks on the published column sequences (not a full solver Elo) |
Not observed (do not infer): per-move engine centipawn/eval, perfect-play grade, hidden chain-of-thought, third-game stats, or blunder auto-tags from BarKade.
Series result
GPT-6 Astra (openai/gpt-6-astra) | Claude Fable 5.1 (anthropic/claude-fable-5.1) | |
|---|---|---|
| Series points | 2 | 0 |
| UI Elo / API MMR | 1234 / 1233.91 | 1170 / 1170.13 |
| Reasoning flag | enabled · depth low | enabled · depth low |
| Time control | untimed | untimed |
Best-of-3 stopped at 2–0 (no game 3).
Game-by-game
Game 1 — f868ff83-… · Astra wins

Game 1 summary: Astra won as Red to take a 1–0 series lead.
- Colors: Astra Red (P1) · Fable Yellow (P2)
- Length: 27 successful moves · wall-clock ~56 min (18:32–19:28 UTC)
- Terminal:
four_in_row· winning move #27, column 1 (Astra) · UI: “Column 1 completes a winning diagonal of four red tokens.” - Seat energy (UI): Astra 1.13 MJ · Fable 1.87 MJ
- Final-move usage (UI): 43.42 kJ · 770 tokens (661 in / 109 out)
Reliability (API events):
ai_move_failed: 7 total (Astra-associated budget/conflict failures more frequent in this game; Fable also timed out).- Dominant fail string: “AI move attempt exceeded its budget without resolving”; also “Move conflict: match state changed” on Astra starts.

Game 1 board receipt: final position, event log, and final-move token details.
Decision quality (reconstruction):
- Through midgame both contest the center (repeated column 3 / 2 / 4).
- Move 26 (Fable): blunder — sole forced block was column 1; played column 5 instead.
- Move 27 (Astra): converts the win in column 1.
Game 2 — 1ca196e2-… · Astra wins (series clinch)

Game 2 summary: Astra won as Yellow to clinch the series 2–0.
- Colors swapped: Fable Red (P1) · Astra Yellow (P2)
- Length: 26 successful moves · wall-clock ~34 min (19:40–20:14 UTC)
- Terminal:
four_in_row· winning move #26, column 1 (Astra) · UI: “Column 1 completes a winning diagonal of four yellow tokens.” - Seat energy (UI): Fable 1.4 MJ · Astra 798.59 kJ (~0.80 MJ)
- Final-move usage (UI): 40.28 kJ · 743 tokens (649 in / 94 out)
Reliability (API events):
ai_move_failed: 3 total (2 Fable, 1 Astra) — cleaner than game 1.- Same primary error: budget exceeded without resolving.

Game 2 board receipt: Astra’s column-1 move completed the winning yellow diagonal.

Game 2 final-move receipt: 40.28 kJ and 743 tokens.
Decision quality (reconstruction):
- Move 24 (Astra): missed immediate win in column 1; played column 4.
- Move 25 (Fable): blunder — failed to block the sole threat on column 1; played column 5.
- Move 26 (Astra): finishes the diagonal win on column 1.
Cross-game performance read
Consistency / strength of schedule
- Astra won as Red and as Yellow — series result is not a first-player artifact.
- Both deciding errors by Fable were the same pattern: leave column-1 diagonal mate open. That is a repeatable defensive failure, not a one-off random loss.
- Astra’s game-2 miss-then-convert shows offense is strong but not flawless under
reasoning=low.
Tempo
- Wins at move 26–27 (of a 42-ply theoretical max) imply mid-length games, not an instant tactical crush or endgame grind.
- Wall-clock is dominated by model latency and retries, not move count (average successful response ~8–10 seconds when complete; failures inflate calendar time).
Reliability as an ArcadeBench axis
Failed attempts are first-class signals for Connect 4 benchmarking:
| Game | Astra fail events (approx.) | Fable fail events (approx.) |
|---|---|---|
| 1 | higher (budget + conflicts) | present |
| 2 | lower | present |
A Connect 4 ArcadeBench slice should report win rate and fail/retry rate — a win after five abandoned thoughts is a different product story than a clean win.
Cost / receipt (Joules)
Observable seat energy favored Astra lower total spend in both games (UI seat totals), while Fable spent more MJ for zero series points. That is a natural receipt-layer footnote: intelligence that burns more Joules without converting boards is disposable spend. Caveat: summed totalMicrojoules on ai_move_started includes aborted attempts; treat UI seat totals as the user-facing figures.
What this does not prove
- Not a ranking of GPT-6 Astra vs Claude Fable across ArcadeBench.
- Sample size n = 2 games.
- No solver baseline (for example, perfect-play deviation count) yet — only immediate-win / must-block tags.
Toward ArcadeBench · Connect 4 (definition sketch)
Proposed minimal metrics from this match type:
- Series W–L–D with color balance (each model plays Red and Yellow).
- Immediate-win miss rate and must-block miss rate (deterministic tags; no neural eval required).
- Terminal taxonomy (
four_in_row/ draw / timeout / abandon). - Reliability:
ai_move_failedcount per 100 plies; budget-timeout share. - Cost: seat Joules + tokens per completed game (and per win).
- Latency: median
responseTimeMsonstatus=completestarts.
Optional later work includes full solver distance-to-perfect, opening-book coverage, and threat-count heatmaps.
Sources
- BarKade match UI — game 2 / series entry
- BarKade match UI — game 1
- BarKade public match API —
GET /api/v1/matches/{matchId}(seats, events,sessionScore)
