No description
T3 audit gaps 3, 4, 5 — three primitives that wrote facts but whose facts no engine subsystem read, making the primitives inert despite passing validation. Gap 3 — AuraContributions consumer wiring: - New modifiers/effective-attr.ts: getEffectiveNumericAttr(session, pieceId, attrName) reads direct fact + layers AuraContributions[attr] delta on top. Zero allocation on the no-aura path. - rules/sliding.ts getRangeMaxSteps now reads through the helper so aura-granted RangeBonus extends piece range. - modifiers/reconcile.ts clampHpToNewMax now reads through the helper so aura-granted HpBonus raises the HP clamp ceiling. Gap 4 — ReflectDamage consumer wiring: - modifiers/apply.ts integration preset's onDamage hook: ReflectDamagePercent check runs BEFORE absorb/resistance short-circuits (matches 'magical thorns' mental model — fully absorbed hits still reflect). Rounds damage down via Math.floor (50% of 1 = 0, matches partial-resistance rounding). Routes reflected damage back to attacker via engine.dealDamage with kind='reflect'. Uses queueMicrotask to defer so we don't recurse during the current damage event's resolution. - Swallows errors on the reflected call — attacker may have been retracted between scheduling and execution (reflection against a dead target is a no-op, not an error). Gap 5 — BlockedMoveTypes consumer wiring: - modifiers/apply.ts integration preset's filterMoves hook extended with a mover-side check. Reads BlockedMoveTypes on the MOVING piece once per piece-move generation; drops any move whose classification (capture / step / slide) is in the blocked set. classifyNonCaptureMove helper: Chebyshev distance ≤ 1 = 'step', > 1 = 'slide'. Knight jumps count as slides (documented). Oracle Q3.1: 6-scenario primitive-smoke-test matrix in consumer-integration.test.ts asserts observable gameplay delta for each of gaps 3-5 (aura HP clamp, aura range, reflect, partial reflect rounds down, blocked capture, blocked step). Catches this class of silent-inert regression for future primitives. 1387 → 1393 unit tests. |
||
|---|---|---|
| .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