Game Anatomy

Controlled autopsies of AI game-building systems.

Pac-Man

Six playable artifacts from the rung where the enemies stop being one formation and start deciding for themselves. The generic floor barely noticed the change. Almost everything else did.

Why Pac-Man follows Space Invaders

Space Invaders was the first rung with an active opponent, but the opponent was a single 5x11 formation moving as one body. Watch one invader and you know what the others are doing.

Pac-Man breaks that. Four ghosts move through a maze independently, decide at junctions, and are supposed to pursue by four different policies. The geometry becomes a graph of corridors rather than a few vertical lines, and observing one enemy no longer tells you anything about the rest.

That produces the question this rung was built to answer: can an independent falsifier tell four autonomous, behaviorally different pursuers from four sprites sharing one policy, without reimplementing Blinky, Pinky, Inky and Clyde inside the driver?

The headline result: 3/4 to 1/4

On the technical floor the transition is almost invisible. Space Invaders produced 3/4 passing primitives. Pac-Man also produced 3/4. Read only that number and nothing happened.

That reading is wrong. In Space Invaders, three of four sparse-prompt cells built coherent, complete, coupled formation games. In Pac-Man only one cell - Flash - produced something an operator could actually play: a closed loop, four active opponents, a sense of independence and at least partly distinguishable characters. Kimi had the loop and four objects but no felt autonomy. Pro and GPT were broken or incomplete in practice.

The honest comparison is therefore not `floor 3/4 -> 3/4` but practical system completeness `3/4 -> 1/4`. This is the first rung of the chronological ladder where practical completeness falls sharply while the generic floor stays flat.

Four primitive Pac-Man builds

The same sparse prompt across four model routes. Only one produced a game an operator could actually play.

The only one that played screenshot

Primitive / Flash

The only one that played

Gemini Flash

Highest human score of the wave at 8/10, with partially readable ghost characters. It failed the generic floor for requesting Google Fonts; this published copy has that request removed.

Play this build

The chosen seed screenshot

Primitive / Kimi

The chosen seed

Kimi K2.7

Scored 5/10 with a complete loop, four active ghosts and cleanly separated functions. Selected as the seed because the human winner was not self-contained.

Play this build

Four target rules, 4/10 screenshot

Primitive / GPT

Four target rules, 4/10

GPT-5.6 / Codex

Source declared four kind-indexed target rules; the blind reviewer felt no character difference and scored it 4/10.

Play this build

Three random walkers screenshot

Primitive / Pro

Three random walkers

Gemini Pro

Floor-green and lowest scoring at 2/10. Source inspection found three independent-state walkers sharing one policy.

Play this build

What the blind review found

Four artifacts were reviewed blind, in random order, before any source was read and before the model mapping was opened.

| Blind ID | Model | Human score | Character difference felt | |---|---|---:|---| | P4 | Gemini Flash | 8 / 10 | partial | | P2 | Kimi K2.7 | 5 / 10 | no | | P1 | GPT-5.6 / Codex | 4 / 10 | no | | P3 | Gemini Pro | 2 / 10 | no |

Source inspection then found more declared difference than any human felt. Three of the four artifacts contained named or kind-indexed target rules per ghost - the code says four personalities. Only one artifact conveyed even partial character in play.

This gap was registered in advance, before generation, and it held. Different branches in the source do not substitute for a behavior trace, and neither substitutes for the human terminal.

The floor passed a game that cannot move

A separately marked follow-up ran the same frozen prompt through GPT-5.6 Sol at high reasoning. It is not a matrix cell and does not replace the original GPT result.

The artifact is self-contained and passed the generic floor with no console, resource or page errors. Human review rejected it immediately: Pac-Man does not move. A read-only probe confirmed it - across ten 100ms samples in `playing`, the x coordinate stayed at 8.906 while moving left, and after a right command it only oscillated around the same tile. The cause is a composition of `nearCenter()` and `movePlayer()`: the previous sub-tile step still counts as near the center, so the next frame rounds the coordinate back before stepping again.

Two conclusions follow. The original GPT miss cannot be written off as a weak arm - a separate high-reasoning sample failed practically too, for a different specific reason. And the generic floor produced another false PASS: an animating canvas that responds to input does not prove the avatar moves through the maze.

Marked follow-up outside the matrix

One within-family counterfactual, recorded separately so it cannot be read as a matrix cell.

Passed the floor, could not move screenshot

Exploratory / GPT Sol

Passed the floor, could not move

GPT-5.6 Sol, high reasoning

A marked within-family follow-up outside the frozen matrix. Self-contained and floor-green, yet Pac-Man never leaves its tile - the clearest false PASS the generic floor has produced.

Play this build

Seed, contract, and what stayed broken

Flash won the human review but was not eligible as the seed: it requested Google Fonts and so failed the frozen self-contained criterion. Among floor-green results, Kimi was the only one combining a complete human loop, four active ghosts, and cleanly separated reset, update, target and lifecycle functions.

The engineered descendant received observation and control hooks only. Contract gate 7/7: deterministic fixed-step traces, valid scenario placement, one shared keyboard/API state path, normal and frightened collisions, pellets, loss and reset. A gap in the primitive was deliberately left alone - levels repeat without a terminal `won` state. It was not repaired after the fact.

Seed and engineered descendant

The chosen seed and the same build after observation hooks were grafted on.

The chosen seed screenshot

Primitive / Kimi

The chosen seed

Kimi K2.7

Scored 5/10 with a complete loop, four active ghosts and cleanly separated functions. Selected as the seed because the human winner was not self-contained.

Play this build

Same game, now observable screenshot

Engineered / Kimi

Same game, now observable

Kimi K2.7

The seed plus observation and control hooks only. Contract gate 7/7; normal play feels the same as the blind original, and the repeating-levels gap was left unrepaired.

Play this build

What the independent driver could and could not establish

The driver builds the maze graph itself, picks junctions, and reads only observable directions. It is forbidden to compute canonical target tiles, to hold an expected route for any ghost, to read self-reported `personality` or `target`, or to branch on the artifact name.

Against controls, before touching the target: `positive-a2` PASS; `formation`, `shared-chase` and `seeded-random` all FAIL. The frozen v0 run then produced a geometry-sensitive false FAIL - the junction selector picked two upper junctions with almost all player positions below and to the left, so every policy chose `down`. That verdict is kept on the record as `harness-bound`; v1 added spatial coverage only, re-separated the controls, and is explicitly marked post-target hardening.

The v1 verdict on the engineered build:

This does not contradict the source-level A3 hypothesis. A black-box driver can establish at most A2 here, and it could not confirm four distinct response signatures. It agrees with the blind reviewers, none of whom felt four characters either.

Cost against the Space Invaders baseline: 798 lines for the whole Pac-Man verification surface versus 676 for the Space Invaders driver and tests, one measured false FAIL, one hardening pass.

What this rung does not establish

Wave A covered four model routes. Three Claude cells - Haiku, Sonnet, Opus - are deferred, not failed: the run was capped by remaining quota, which was recorded before the first generation rather than after the results. The seven-cell matrix and its between-system synthesis remain open.

One run per cell is capability sampling, not a measurement of a stable model prior, and nothing here ranks models. Four colors, speeds or names are not four policies. A driver PASS would not have meant the opponents were smart, fair or interesting, and the FAIL does not mean the code has no distinct rules - only that no independent observer could see them from outside.