No description
wrap-board previously contributed a single one-square hop when the rook/queen was already on an edge file, which is essentially a no-op for 99% of positions. Rewrote the hook to implement an actual cylindrical topology: sliders walk past the a/h seam and continue along the rank on the opposite side, stopping at the first ally (no destination) or enemy (capture). Preserves the rook-warp incompatibility since the two presets have different "when does the wrap apply" preconditions. Check indicator: GameView looked for an `InCheck` boolean fact that doesn`t exist in the session — check status is a derived predicate (isInCheck), not a stored fact. Exported isInCheck from the package public API, wired GameView to query it per render, added a pulsing red "Check!" banner in the header, and fixed the useChessEngine audio path which had the same stale-fact bug (was never playing the check sound). Tests: 6 new wrap-board tests covering empty-rank slides, partial blocks, queen slides, and the no-op case for non-sliders. Total 849 tests pass (+6). |
||
|---|---|---|
| .github/workflows | ||
| .sisyphus | ||
| docs | ||
| packages | ||
| scripts | ||
| .gitignore | ||
| eslint.config.js | ||
| lefthook.yml | ||
| LICENSE | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| tsconfig.base.json | ||
| tsconfig.json | ||
| vitest.workspace.ts | ||
@paratype
A Doorenbos-style Rete II rules engine for TypeScript games, with an authoritative WebSocket chess demo.
Packages
packages/rete— Rete II engine corepackages/chess— Browser chess demo (React + Vite)packages/server— Authoritative Bun WebSocket server
Docs
- SPEC.md — Engine specification
- PHASES.md — Development phases & perf budgets
- RULES.md — Chess rule presets
- PROTOCOL.md — WebSocket message protocol
Getting Started
bun install && bun run check