How the rules were pieced together, and how positions and games get written down once you have them.
Every field in the ruleset carries a tag saying where it came from. Where two sources disagree the higher one wins, and the disagreement gets recorded rather than smoothed over.
Primary text gets read directly, never through a summary. That rule exists because an automated summary of one rules page asserted that capture "applies orthogonally and diagonally". That wording does not appear anywhere on the page it claimed to be quoting. It was caught by opening the page.
Everything above is either stated or close to obvious, so it gets a line each. These are the ones where the sources are silent and we picked a value so the engine would run. Each shows what we chose and what it means. They are the ones to argue with.
Generated from the ruleset when the site is built, so it cannot drift from what the engine actually loads, and the build fails if a guess is added without a description.
capture.directionsPinning works along ranks and files, not diagonals. Both ancestor games Wallis names capture that way. This is the one we would most like settled: diagonals would roughly double the ways a piece can be taken.orthogonalcapture.self_sandwichA piece that steps into the gap between two enemies is safe. The trap has to be closed by the opponent's own move.safecapture.multipleOne move can close two traps at once and take both pieces.yescapture.chainCaptures do not cascade. Removing a piece never exposes the piece behind it to the same move.nopieces.boss.can_take_powerA boss can pick up a power token, not just a guard.yespowers.persistentA power stays with its piece for the rest of the game rather than being spent on a single move.yespowers.capturableCapturing a powered piece destroys the power. It does not pass to the capturer.nopowers.consumedPicking up a token takes it off the board.yespowers.respawnsA token that has been picked up never comes back. Mario Kart, which Wallis names as an influence, respawns its item boxes.nodraw.repetitionNothing ends a game for repeating a position. The search avoids repetition internally, but two players could shuffle forever.not_modelleddraw.halfmove_limit600 moves without a capture ends the game. Invented so that a search terminates, and set above the longest capture-free run we have measured (405) so it does not decide games.600stalemateA player with no legal move loses. Chess calls that a draw; nothing says this game does.losswin_resolution.simultaneousIf one move would win for both sides at once, Ivory's conditions are checked first.first_listedwin_resolution.capture_is_mandatoryA capture can be declined. Draughts would force it.nopowers.on_secondA piece already carrying a power cannot pick up a second, and the token stays for someone else. The alternative lets one piece slide in all eight directions, which is a different game.blockedChess has FEN, a single line that names every piece and whose turn it is. SE!ZE needs that plus the power tokens, which chess has no equivalent of. A piece can be carrying an orthogonal power, a diagonal one, or both, and any unclaimed tokens are still sitting on the board.
So SFEN carries the eight ranks, the side to move, the halfmove clock, and four token lists. It is meant to be read by a person, for a bug report or a test fixture you want to eyeball. There is a binary form too, eighteen bytes and twenty-four base64 characters, for corpora with millions of rows and for URLs.
The binary form quietly had a bug worth mentioning: the halfmove clock was stored in seven bits, because the draw limit was 100 and 127 seemed like plenty of room. When the limit moved to 600, positions started coming back with the wrong clock.
A position is not a game. Chess uses PGN for that, and this works the same way: a few headers, then the moves.
The Fingerprint header is the one that earns its place. A move list
means nothing without the rules it was played under, because the same moves
can be legal under one version and illegal under the next. A record whose fingerprint does not match gets refused rather than replayed.
Replaying it would produce an answer that looks fine and is wrong.
This has already cost us. Three things in this project forgot to record their ruleset and had to be thrown away: a corpus of self-play games, an opening book, and two sets of fitted weights.
c2-c3 names both squares and is never ambiguous, which makes it
right for storage and wrong for reading. Chess writes the destination and
adds only enough of the origin to tell two pieces apart. Nf3,
not Ng1-f3.
SE!ZE has no piece letters, so the destination alone does most of the work. Measured over twelve thousand legal moves: 55% need nothing but the square, 44% need one extra character, and 1% need writing out in full. All four forms are accepted. An ambiguous one is refused rather than guessed, since guessing would silently analyse a different game than the one played.