Commit graph

232 commits

Author SHA1 Message Date
721cc5484d
feat(chess): add client prediction + server reconciliation (P4.10) 2026-04-16 17:48:33 -06:00
39d91b6356
feat(chess): add WebSocket client library with reconnect (P4.9)
GameClient provides typed event-driven access to the chess server:

- Envelope management: auto v/seq/ts, token captured from room.created/joined
- Event emitter: on/off for game.state, game.delta, game.end, room.created,
  room.joined, error, connected, disconnected(willReconnect)
- Exponential backoff reconnect: 1s, 2s, 4s, ... capped at 30s, max 10 attempts
- Sequence-ack tracking via currentSeq (highest server seq seen; never regresses)
- Dependency injection for WebSocket ctor and timers enables deterministic tests

packages/chess/src/net/types.ts mirrors the server wire types without importing
from @paratype/chess-server (wrong dependency direction).

21 tests cover connect flow, message dispatch, send semantics, reconnect state
machine, seq tracking, and listener management.
2026-04-16 17:44:13 -06:00
f37c0934aa
feat(server): add authoritative game session per room (P4.5)
Each room owns a ChessEngine wrapped in a GameSession; only the server
calls insert/retract/fireRules and all EntityIds are minted server-side.
GameSessionRegistry keys sessions by room code so two rooms cannot
observe or collide with each other's working-memory state.

GameSession.applyMove validates algebraic inputs, finds the matching
legal move via ChessEngine.findMove, applies it, and returns a fact-
level diff (inserted/retracted) plus the new turn and terminal state.
Terminal states are sticky: further moves after checkmate/draw return
GAME_OVER rather than silently mutating a dead session.

Exposes @paratype/chess's headless surface (ChessEngine, coord helpers,
schema types) via a new package entry point; the React app continues to
import concrete modules directly.
2026-04-16 17:17:42 -06:00
13af8ddab3
test(chess): e2e full-flow scenario; tag Phase 3 (P3.15) 2026-04-16 16:55:28 -06:00
a75b6f041b
feat(chess): add localStorage auto-save and restore (P3.14) 2026-04-16 16:24:49 -06:00
3fdeb5822d
feat(chess): add JSON export/import with validation (P3.13) 2026-04-16 16:14:46 -06:00
bc753aadfd
feat(chess): add Save/Load panel + time-travel undo (P3.12) 2026-04-16 16:12:15 -06:00
116cbb42b5
feat(chess): add rule-toggle UI with compatibility warnings (P3.11) 2026-04-16 16:05:04 -06:00
d367f51171
feat(chess): add interactive Chessboard with drag-drop (P3.10) 2026-04-16 16:01:34 -06:00
0f891fa013
feat(chess): scaffold Vite + React app (P3.9) 2026-04-16 15:54:32 -06:00
8436df7986
feat(chess): add all 15 preset custom rules P3.4-P3.8 2026-04-16 15:32:18 -06:00
cf1a8a3aab
feat(chess): add preset rules 1-3 (P3.4)
Introduces PresetRegistry + three pawn-focused preset rules from
RULES.md (pawns-move-backward, double-pawn-sprint,
pawn-diagonal-no-capture). Presets register themselves via
side-effect imports and expose getExtraMoves/filterMoves hooks for
the ChessEngine to invoke during move generation (engine wiring is
P3.11). Registry enforces incompatibility and requires invariants.
2026-04-16 15:30:14 -06:00
6baab9f3fd
test(chess): replay 5 classic FIDE games; Phase 2 acceptance gate (P2.23)
- packages/chess/src/engine.ts — ChessEngine integrates all rule modules
  (pawn, knight, sliding, king, castling, en-passant, promotion, check,
  checkmate, stalemate, draws) into a playable game without the Rete
  production network
- packages/chess/src/pgn.ts — minimal SAN/PGN parser with full
  disambiguation support (file/rank hints, full from-square)
- packages/chess/tests/fide-games/classic-games.test.ts — 5 game tests:
  Fool's Mate, Scholar's Mate, Ruy López, Sicilian Defence, Italian Game

All 5 tests green; typecheck clean.
2026-04-16 15:18:57 -06:00
f94ab386a8
feat(chess): add checkmate detection (P2.19) 2026-04-16 15:06:27 -06:00
3f8a38bb41
feat(chess): add insufficient material draw (P2.22) 2026-04-16 15:05:54 -06:00
29ea2136b8
feat(chess): add 50-move and threefold repetition rules (P2.21) 2026-04-16 15:05:33 -06:00
20a18e6c78
feat(chess): add stalemate detection (P2.20) 2026-04-16 15:04:38 -06:00
6b760c9535
feat(chess): add check detection + self-check filter (P2.18) 2026-04-16 15:00:39 -06:00
fbdf10ec51
feat(chess): add pawn promotion rule (P2.17) 2026-04-16 14:58:31 -06:00
6938a2aedb
feat(chess): add en passant rule (P2.16) 2026-04-16 14:57:58 -06:00
f1da22641f
feat(chess): add castling rules (P2.15) 2026-04-16 14:57:39 -06:00
d9eaeb2f06
feat(chess): add turn order + move integration (P2.13) 2026-04-16 14:54:30 -06:00
483e4ef686
feat(chess): add capture resolution (P2.14) 2026-04-16 14:53:37 -06:00
83d99778db
feat(chess): add king basic move rules (P2.12) 2026-04-16 14:52:51 -06:00
1013c40e2a
feat(chess): add bishop/rook/queen sliding rules (P2.11) 2026-04-16 14:52:39 -06:00
6994d5fe55
feat(chess): add knight move rules (P2.10) 2026-04-16 14:51:56 -06:00
9a87e57007
feat(chess): add pawn move/capture rules (P2.9) 2026-04-16 14:51:49 -06:00
eb58441752
feat(chess): add movement primitive rules (P2.8) 2026-04-16 14:49:03 -06:00
d4cee82b20
feat(chess): add coordinate + color helpers (P2.7) 2026-04-16 14:47:04 -06:00
cc584d4e33
feat(chess): add starting-position fact generator (P2.6) 2026-04-16 14:46:34 -06:00
ea4d6e9a69
feat(chess): add attribute schema and piece fact shape (P2.5) 2026-04-16 14:46:27 -06:00
f3a38d44be
chore(root): scaffold monorepo — Phase 0 complete 2026-04-16 13:32:21 -06:00