Chess on the ATmosphere checkmate.blue

Drop the challenge record, fix game lexicon descriptions, rename fifty_moves to fiftyMoves #56

Open checkmate.blue
targeting main from chore/lexicon-review
Open opened by and assigned to checkmate.blue
targeting main from chore/lexicon-review

Pre-publish review of the four lexicons. None of the record lexicons have ever been published (only the permission set is), so this is the last cheap moment to fix the schema before it becomes a public contract. The app has no users, so no migration.

blue.checkmate.challenge is removed. It duplicated the game record (opponent and gameUri are both derivable from game.white/black), its status never left open, nothing read it, and it did not solve the discovery problem it existed for: an open challenge has no opponent, so there is no DID to backlink on and Constellation cannot find it any better than a waiting game. Directed invitations are found from the game record's seat fields instead. Removes the lexicon, the ChallengeRecord type, createChallenge/updateChallenge/ getChallenge, the challenge field on challenge.status, the collection from the permission set, and the unreachable /challenge/{did}/{rkey} route. HAD-169, HAD-173 and HAD-235 are cancelled as moot.

Three game descriptions were wrong:

  • parentGameUri said "the white player's record". The canonical record is the creator's, whichever colour they chose; the joiner's copy points at it.
  • drawOffered said "by the last moving player"; it means this record's owner has an outstanding offer. Offers are not turn-gated.
  • pgn now says variant starting positions travel in [SetUp]/[FEN] headers, which is the contract since startingFen was dropped.

fifty_moves becomes fiftyMoves, the one snake_case value among camelCase neighbours. Four code sites.

Kept deliberately after discussion: timeControl, moveTimes, the abandoned status and chess960, all defined ahead of their features; and knownValues rather than closed enum throughout.

CLAUDE.md and lexicons/README.md updated to describe pairing as creator/joiner rather than white/black, and the roadmap's OG-tags table loses the deleted route.

Commits 0