tic-tac-toe, event-sourced

Every game and every move is an appended JSON piece in one shared log. Lobby and boards are a deterministic fold over that log: illegal, out-of-turn, and impostor pieces are ignored by every client computing the same fold. Nothing is ever mutated. Moves land on-chain in ~30s — yours shows instantly, your opponent's arrives with the next epoch.