- Sashité for Developers
- Specifications
- CGSN
- 1.0.0
- Examples
CGSN Examples
Practical scenarios illustrating Chess Game Status Notation v1.0.0 core concepts.
Overview
This document demonstrates CGSN’s key principles through focused examples:
- Inferable vs. Explicit-only: Which statuses can be derived from position
- Per-piece evaluation: Statuses are relative to individual Terminal Pieces
- Rule-agnostic interpretation: How status remains independent of competitive outcomes
Inferable Statuses
Statuses that can be determined from position analysis when game rules are known.
check
Simple check position:
{
"setup": "4k^3/8/8/8/8/8/4R3/4K^3 / c/C",
"moves": [],
"status": "check"
}
Observable: The black king on e8 is in check — it can be captured by the white rook on e2. The game continues; Black must respond to the threat.
Per-piece evaluation: The status check applies to the specific Terminal Piece (the black king) that can be captured by an opponent’s Pseudo-Legal Move.
Rule-agnostic interpretation:
- Traditional chess: Black must move out of check
- Some variants: May allow capturing the king directly
- CGSN records: “A Terminal Piece can be captured by an opponent’s Pseudo-Legal Move”
stale
Safe king position:
{
"setup": "4k^3/8/8/8/8/8/8/R3K^3 / c/C",
"moves": [],
"status": "stale"
}
Observable: The black king on e8 is stale — it cannot be captured by any white piece. The white rook on a1 does not threaten the black king.
Per-piece evaluation: The status stale applies to the specific Terminal Piece (the black king) that cannot be captured by any opponent’s Pseudo-Legal Move.
Rule-agnostic interpretation:
- This is simply the normal state of play when not in check
- CGSN records: “A Terminal Piece cannot be captured by any opponent’s Pseudo-Legal Move”
Note: For a given Terminal Piece, stale and check are mutually exclusive — the piece is either threatened or safe.
checkmate
Scholar’s Mate position:
{
"setup": "+r1bq+k^b1+r/+p+p+p+p1+p+p+p/2n2n2/4p2Q/2B1P3/8/+P+P+P+P1+P+P+P/+RNB1+K^1N+R / c/C",
"moves": [
["e2-e4", 0.0], ["e7-e5", 0.0],
["f1-c4", 0.0], ["b8-c6", 0.0],
["d1-h5", 0.0], ["g8-f6", 0.0],
["h5-f7", 0.0]
],
"status": "checkmate"
}
Observable: The black king on e8 is in check (capturable by white queen on f7). Moves are mechanically possible (e.g., king moves to d8, d7, or f8), but all such moves would leave the same king in check.
Per-piece evaluation: The status checkmate applies to the specific Terminal Piece (the black king) that is in check and remains in check regardless of the active player’s moves.
Rule-agnostic interpretation:
- Traditional chess: White wins
- Suicide chess: White loses (opponent forced to capture)
- CGSN records: “A Terminal Piece is in check; all Pseudo-Legal Moves leave that same piece in check”
stalemate
Stalemate position:
{
"setup": "7k^/5Q2/6K^1/8/8/8/8/8 / c/C",
"moves": [],
"status": "stalemate"
}
Observable: The black king on h8 is stale (not in check). Moves are mechanically possible (king could move to g8 or h7), but all such moves would put the same king in check.
Per-piece evaluation: The status stalemate applies to the specific Terminal Piece (the black king) that is currently stale but would be in check after any Pseudo-Legal Move.
Rule-agnostic interpretation:
- Western chess: Draw
- Some variants: Loss for stalemated player
- CGSN records: “A Terminal Piece is stale; all Pseudo-Legal Moves would put that same piece in check”
nomove
Complete blockage position:
{
"setup": "8/8/8/3ppp2/3PKP2/3PPP2/8/8 / c/C",
"moves": [],
"status": "nomove"
}
Observable: The white king on e4 is completely surrounded by pieces. No moves are mechanically possible according to piece movement capabilities — every square the king could move to is occupied, and no other white pieces can move.
Per-piece evaluation: Unlike check, stale, checkmate, and stalemate, the status nomove is not relative to a specific Terminal Piece. It only expresses that no Pseudo-Legal movement is available for the active player.
Rule-agnostic interpretation:
- May be considered invalid position
- May be treated as draw
- May be loss for blocked player
- CGSN records: “No Pseudo-Legal Moves are available”
Note: This demonstrates pure mechanical blockage, independent of check considerations.
bareking
Bare kings position:
{
"setup": "4k^3/8/8/8/8/8/8/4K^3 / C/c",
"moves": [],
"status": "bareking"
}
Observable: Only kings (Terminal Pieces) remain on the board. All other pieces have been captured.
Rule-agnostic interpretation:
- Western chess: Draw by insufficient material
- Historical shatranj: May be terminal
- CGSN records: “Only Terminal Pieces remain on board for at least one side”
Explicit-Only Statuses
Statuses requiring information external to position — must be explicitly recorded.
resignation
Mid-game position with resignation:
{
"setup": "rnsmk^snr/8/pppppppp/8/8/PPPPPPPP/8/RNSKMSNR / M/m",
"moves": [],
"status": "resignation"
}
Why explicit-only: Position is playable. Nothing in the position indicates resignation occurred.
Rule-agnostic interpretation:
- Traditional: Resigning player loses
- CGSN records: “A player resigned”
Note: This example uses Makruk starting position, demonstrating that resignation can occur in any game tradition, even before the first move.
timelimit
Active position with time exceeded:
{
"setup": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/4P3/8/+P+P+P+P1+P+P+P/+RNBQ+K^BN+R / c/C",
"moves": [
["e2-e4", 0.0]
],
"status": "timelimit"
}
Why explicit-only: Time information is not encoded in position.
Rule-agnostic interpretation:
- Blitz: Player loses
- Correspondence: May be adjudicated
- CGSN records: “Time limit was exceeded”
Cross-Game Applicability
Same Status, Different Games
Western Chess checkmate:
{
"setup": "+r1bq+k^b1+r/+p+p+p+p1+p+p+p/2n2n2/4p2Q/2B1P3/8/+P+P+P+P1+P+P+P/+RNB1+K^1N+R / c/C",
"status": "checkmate"
}
Japanese Shōgi checkmate:
{
"setup": "ln1gk^1snl/1r5b1/p1ppppppp/9/1p7/2P6/PP1PPPPPP/1B5R1/LNSGK^GSNL P/p s/S",
"status": "checkmate"
}
Chinese Xiangqi checkmate:
{
"setup": "3a1k^3/9/9/9/9/9/9/9/4R4/3AK^4 / X/x",
"status": "checkmate"
}
Same CGSN status (checkmate) applies across different game traditions, demonstrating rule-agnostic universality. In each case, the status is relative to the specific Terminal Piece (the king/general) that is in check and cannot escape.
Integration with PCN
Status Explicitly Declared
{
"sides": {
"first": { "style": "CHESS" },
"second": { "style": "chess" }
},
"setup": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/4P3/8/+P+P+P+P1+P+P+P/+RNBQ+K^BN+R / c/C",
"moves": [
["e2-e4", 0.0]
],
"status": "resignation"
}
PCN explicitly declares resignation (explicit-only status, cannot be inferred).
Status Omitted (Inferable)
{
"sides": {
"first": { "style": "CHESS" },
"second": { "style": "chess" }
},
"setup": "+r1bq+k^b1+r/+p+p+p+p1+p+p+p/2n2n2/4p2Q/2B1P3/8/+P+P+P+P1+P+P+P/+RNB1+K^1N+R / c/C",
"moves": [
["e2-e4", 0.0], ["e7-e5", 0.0],
["f1-c4", 0.0], ["b8-c6", 0.0],
["d1-h5", 0.0], ["g8-f6", 0.0],
["h5-f7", 0.0]
]
}
PCN omits status. Implementation can infer checkmate from position by evaluating the black king’s status.
Summary
Key Principles
- Per-piece evaluation:
check,stale,checkmate, andstalemateare relative to a specific Terminal Piece, not to all Terminal Pieces collectively - Inferable statuses (
check,stale,checkmate,stalemate,nomove, etc.) can be omitted — position provides information - Explicit-only statuses (
resignation,timelimit,repetition, etc.) must be recorded — cannot be derived - Blockage taxonomy:
nomove= mechanical blockage (no moves available);checkmate/stalemate= rule-based constraint on a specific Terminal Piece - Rule-agnostic design: Same status, different competitive interpretations
Usage Guidelines
Always explicitly record:
resignation,timelimit,movelimit,agreement,illegalmove,repetition
Can omit when position is clear:
check,stale,checkmate,stalemate,nomove,bareking,mareking,insufficient
Validate appropriately:
- Verify status string format
- Check against defined CGSN values
- Optionally validate status-position consistency for inferable statuses
