No description
8 parity tests (recreate ThressGame rules via descriptor JSON): - T59 minefield: spawn mines + on-piece-entered destroys; one-shot consumption - T60 mr_freeze: request-choice column + for-row + frozen-square spawn (lifetime moves:9) - T61 parry: on-captured + RPS request-choice + conditional + cancel-capture - T62 all_on_red: on-turn-start + with-probability(0.1) + BlockAllExceptKing seed (lifetime turns:5) - T63 religious_conversion: on-move(bishop) + for-each-adjacent + set-piece-attr Color - T64 ice_physics: on-rule-activated + for-each-piece(slider filter) + SlideMustBeMaxDistance - T65 kamikaze: on-capture + with-probability(0.25) + for-each-adjacent + destroy-piece (king excluded) - T66 mind_control: on-rule-activated + request-choice(forPlayer:both, LIFO stack) + for-each-piece + Color set T67: 6 template descriptors in custom/recipes.ts (simple-mine, vampire-on-capture, frozen-column, coin-flip-restriction, religious-bishop, no-mans-land) T68: Playwright e2e spec for 3 request-choice flows (.skip()'d pending UI integration; documents the gap) T69: 100-marker performance budget test (p99 < 50ms via deterministic engine + perf.now timing) Tests: 2703 -> 2740 (+37). 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