Can a single FEN-like string capture everything needed to resume a game?

These answers restate the rules implemented by our open-source engine, which follows the WXF laws and is regression-tested against the official 110-diagram repetition casebook. Where an answer refers to a specific position, that position lives on the linked reference page, where the build verifies it against the engine before publishing.

Direct answer

Almost, but not entirely. A FEN-style string fully describes where every piece is and whose move it is, which is enough to resume ordinary play. What it cannot show is whether the game is already partway through a repeating pattern, since that depends on the moves that led to the position, not the position by itself, and that history matters for the repetition rules.

Why this gap matters specifically in xiangqi

Because perpetual check and perpetual chase are judged on a sequence of moves, resuming a game from a bare position string with no history could technically lose track of whether a side was already partway toward being required to vary. Chess has a smaller version of the same issue with castling rights and en passant, which FEN does address directly; xiangqi's repetition question is harder to encode compactly.

How this is handled in practice

Serious game storage pairs a position string with the actual move list, rather than relying on the position alone, precisely so nothing about the repetition history is lost. See move notation vs position notation for why the two are usually kept together.

Related questions

Does this affect puzzles the same way?

Not usually, a puzzle typically starts a fresh calculation from the given position, with no repetition history to worry about.

Is there a standard way to encode repetition history alongside FEN?

Not a single universal one; different tools handle it differently, usually by keeping the full move list alongside the position.

Try it on a real board

Reading an answer is one thing; playing it is another. Free, instant, and nothing to install.