- Sashité for Developers
- Specifications
- CGSN
- 1.0.0
- Examples
CGSN Examples
Practical scenarios illustrating Chess Game Status Notation (CGSN) core concepts.
Overview
This page demonstrates CGSN’s key ideas through focused examples:
- Inferable vs explicit-only statuses: whether a status can be determined from position analysis (given a Rule System), or must be explicitly recorded
- Per-piece evaluation: some statuses describe the condition of a specific Terminal Piece
- Rule-agnostic meaning: CGSN records an observable condition, not the match outcome
For the formal definitions, refer to the main CGSN specification.
Position-inferable statuses
These statuses can be determined from position analysis when the rules of the game are known. They may be omitted by an enclosing notation if the position is provided and the consumer can recompute them.
Terminal Piece statuses
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 can be captured by the white rook on e2.
Per-piece evaluation: check applies to the specific Terminal Piece that is capturable by an opponent’s Pseudo-Legal Move.
Rule-agnostic interpretation:
- In many games, the checked side must respond
- In “capture-the-king” variants, the king may simply be captured
- CGSN records: the capture threat exists
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 cannot be captured by any white piece.
Per-piece evaluation: stale applies to the specific Terminal Piece that cannot be captured by any opponent Pseudo-Legal Move.
Rule-agnostic interpretation:
- This is the normal “not under threat” state
- CGSN records: there is no capture threat against that Terminal Piece
checkmate
Scholar’s Mate position:
{
"setup": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-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, and every Pseudo-Legal Move still leaves that same king in check.
Per-piece evaluation: checkmate applies to the specific Terminal Piece that is in check and cannot escape check through any Pseudo-Legal Move.
Rule-agnostic interpretation:
- Traditional chess: decisive for the attacker
- Suicide/antichess variants: may be the opposite
- CGSN records: the “inescapable check” condition is met
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 not in check, but every Pseudo-Legal Move would put that same king in check.
Per-piece evaluation: stalemate applies to the specific Terminal Piece that is currently safe, but cannot move without becoming threatened.
Rule-agnostic interpretation:
- Western chess: usually a draw
- Other variants: may be a loss for the stalemated side
- CGSN records: the “inescapable safety break” condition is met
Position statuses
nomove
Complete blockage position:
{
"setup": "8/8/8/3ppp2/3PKP2/3PPP2/8/8 / c/C",
"moves": [],
"status": "nomove"
}
Observable: The active player has no Pseudo-Legal Moves at all.
Per-piece evaluation: Unlike check/stale/checkmate/stalemate, nomove is not tied to a specific Terminal Piece. It describes the position globally.
Rule-agnostic interpretation:
- May be treated as draw, loss, invalid state, etc.
- CGSN records: there is no mechanically available move
bareking
Bare king position:
{
"setup": "4k^3/8/8/8/8/8/4P3/4K^3 / c/C",
"moves": [],
"status": "bareking"
}
Observable: One side has exactly one piece left on the Board, and that piece is a Terminal Piece.
Rule-agnostic interpretation:
- Some games use this as a terminal condition
- Others use it as a trigger for counting/adjudication rules
- CGSN records: a side is reduced to a lone Terminal Piece on the Board
mareking
Missing king position:
{
"setup": "4q3/8/8/8/8/8/8/4K^3 / C/c Q/",
"moves": [],
"status": "mareking"
}
Observable: A side has no Terminal Pieces on the Board.
Rule-agnostic interpretation:
- Often invalid in orthodox chess-like games
- Makes sense in capture-the-king variants
- CGSN records: the position has no Terminal Piece for at least one side
insufficient
Insufficient material position:
{
"setup": "4k^3/8/8/8/8/8/8/4K^2N / C/c",
"moves": [],
"status": "insufficient"
}
Observable: Under the game’s insufficiency rules, neither side can force a decisive outcome with the remaining material.
Rule-agnostic interpretation:
- Western chess: usually a draw
- Other games may continue until another ending condition occurs
- CGSN records: the insufficiency condition holds for the Rule System in use
Common insufficient configurations in chess:
- King vs King
- King + Knight vs King
- King + Bishop vs King
- King + Bishop vs King + Bishop (same color)
Explicit-only statuses
These statuses cannot be derived from position + rules alone. They require extra context such as clocks, player actions, or history tracking, and therefore must be explicitly recorded by the surrounding notation when they occur.
resignation
Mid-game position with resignation:
{
"setup": "rnsmk^snr/8/pppppppp/8/8/PPPPPPPP/8/RNSKMSNR / M/m",
"moves": [],
"status": "resignation"
}
Why explicit-only: The position itself does not reveal a resignation event.
timelimit
Active position with time exceeded:
{
"setup": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c",
"moves": [
["e2-e4", 0.0]
],
"status": "timelimit"
}
Why explicit-only: Time is not encoded in the position.
repetition
Position with repetition:
{
"setup": "4k^3/8/8/8/8/8/8/4K^2R / C/c",
"moves": [
["h1-g1", 0.0], ["e8-f8", 0.0],
["g1-h1", 0.0], ["f8-e8", 0.0],
["h1-g1", 0.0], ["e8-f8", 0.0],
["g1-h1", 0.0], ["f8-e8", 0.0]
],
"status": "repetition"
}
Why explicit-only: The current position alone does not reveal how many times it has occurred. History tracking is required.
agreement
Draw by agreement:
{
"setup": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c",
"moves": [],
"status": "agreement"
}
Why explicit-only: The position does not encode player intent or mutual agreement.
Same status, different outcomes
CGSN does not define who wins or loses. A Rule System (or tournament rules) interprets the status.
| Status | Example outcome in Western chess | Example outcome in other rulesets |
|---|---|---|
checkmate |
decisive | may invert in suicide/antichess |
stalemate |
often draw | may be loss or win depending on rules |
bareking |
often triggers adjudication | may be decisive in historical rules |
Integration with PCN
Status explicitly declared
{
"sides": {
"first": { "style": "CHESS" },
"second": { "style": "chess" }
},
"setup": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/4P3/8/+P+P+P+P1+P+P+P/-RNBQK^BN-R / c/C",
"moves": [
["e2-e4", 0.0]
],
"status": "resignation"
}
Here, the surrounding notation records an explicit-only event (resignation).
Status omitted (inferable)
{
"sides": {
"first": { "style": "CHESS" },
"second": { "style": "chess" }
},
"setup": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-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]
]
}
Here, checkmate can be computed from the position and rules, so the status may be omitted.
Summary
Key principles
- Some statuses apply to a specific Terminal Piece (
check,stale,checkmate,stalemate) - Some statuses apply to the position globally (
nomove,bareking,mareking,insufficient) - Inferable statuses can be recomputed from the position (given rules)
- Explicit-only statuses must be recorded because they require extra context (history, clocks, declarations)
- CGSN is rule-agnostic: it records observable conditions, not match outcomes
Usage guidelines
Always explicitly record events like:
resignation,timelimit,movelimit,agreement,illegalmove,repetition
May omit when position is provided and consumers can recompute:
check,stale,checkmate,stalemate,nomove,bareking,mareking,insufficient
