A symbol does not own its meaning

The board
reinterprets you.

Alice is a pawn trying to reach the queen-square. But a symbol does not own its meaning. A mirror swaps left and right, a door spins the whole frame, and tea swallows your next command in a single sip. Type "forward" and the board bends it into a diagonal.

interpreter Send a symbol through the glass.
your command
a
the board's answer
west
Rows 7 → 0 · Six Chapters

The board rewrites language as you climb.

The closer Alice gets to promotion, the more rules of interpretation stack up. The row Alice stands on determines which chapter's grammar will interpret her next command.

rows 7–6Mirror Reversal*Step on a mirror and left/right swap from then on. a starts pointing east instead of west.
rows 5–4Tea-Time DebtTTea borrows against time. Your next intention vanishes before it ever becomes movement.
row 3Door RotationDA door is rotation, not reflection. The whole command frame turns 180°, and the doors themselves swap positions across the diagonal.
row 2Humpty BindingHHumpty grants a one-time right to redefine a symbol's meaning: bind x w. But the book forgets the promise when the chapter turns.
row 1Piece GrammarGOn the brink of promotion, a pawn's "forward" grows suspicious — "forward" quietly turns into a diagonal leap.
row 0Queen RewriteQThe instant Alice reaches the queen-square, the pawn becomes a queen and the command system rewrites itself.
solver.py

Search for the shortest path over interpreted outcomes.

The solver does not search chess-legal moves. It performs a breadth-first search over the outcomes the board actually produces. So what it finds is not "correct chess" but a genuinely shortest command sequence. The solver re-implements no rule: every candidate is played on a deep copy of the real engine.

An alphabet of just five

The search vocabulary is only w a s d 🪞. Arrow keys and ♙ collapse onto w/a/s/d, and bind only renames a command you can already issue. So the search space stays finite without losing optimality.

State decides everything

Only information that changes how future commands are interpreted becomes part of the state key: position, rank, mirror, door rotation, tea debt, and where the door tiles currently sit. Humpty's bindings are left out on purpose — the solver never binds.

Win first, and it's shortest

BFS expands states in order of path length, so the first winning state it pops is a provably shortest command sequence.

solver.py

      
Three Doors

Turn the pages yourself.

The same board through three different windows. Actually play it, peer into the trace, or just take in the mood.