No description
PredictionManager.applyPresets was calling activePresets.replaceAll directly, bypassing preset onActivate / onDeactivate hooks on the client engine. piece-hp installs Hp facts from onActivate, so in multiplayer the client knew the preset was active but had no Hp facts to render \u2014 the overlay silently drew nothing. Routed through setActivePresets. Both server and client now run the same idempotent onActivate, arriving at the same state without serializing Hp facts over the wire. applyFullState (snapshot path) still uses bare replaceAll because facts in the snapshot already include any preset-installed attributes. |
||
|---|---|---|
| .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