No description
Wave 16 — 3/3 untested choice-kinds covered (choice-kinds.spec.ts): - square: 8x8 grid → click e4 → treasure marker spawns - row: row picker → click row 3 → 8 treasure markers along row 3 - coin-flip: heads/tails buttons → click heads → CoinFlipResult set on GAME_ENTITY Wave 17 — 1 active + 5 fixme (move-gen-attrs.spec.ts): - KingExtraReach=2 PASSES (king steps 2 squares) - MovesAs/MovesAlsoAs/BlockedPieceTypes/MoveClassRestriction/PawnPushesPiecesEnabled fixme'd: drag library doesn't reject illegal moves at UI layer (move-gen filter is engine-side; UI is permissive). Documented limitation; engine behavior verified at unit level (Wave 12 tests). Wave 18 — 11 active + 1 fixme (orphan-primitives.spec.ts): - place-piece, move-piece, swap-pieces, convert-piece-type - for-each-piece, for-each-square, for-each-adjacent, for-each-marker - block-by-piece-type primitive (consumer attr Wave 12) - on-rule-expire (descriptor detach fires arm) - on-marker-expire (lifetime sweep fires hook) - spawn-marker-pair (mutual MarkerLinks) - must-class fixme: consumer deferred (descriptor seeds attr; rules/turn filter not yet wired for must-class specifically) E2E total: 27 active passing + 7 fixme. Unit tests: 2866 passing. bun run check exit 0. |
||
|---|---|---|
| .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