No description
Wave 1 of thressgame-100 epic complete (W1.7\u2013W1.12). Coverage now 27/51 = 53 %.
13 new recipes appended to CUSTOM_MODIFIER_RECIPES (23 \u2192 36):
Batch A \u2014 self-targeting destroys (uses ctx-self-id / ctx-self-marker-id):
- tpl-minefield-consumer \u2014 mine consumer arm; pairs with tpl-minefield-full
- tpl-kamikaze-self-destruct \u2014 deterministic adjacent-non-king AOE on capture
- tpl-living-bomb \u2014 capture explodes everything adjacent (incl. kings)
- tpl-suicidal-knight \u2014 self-destructs on every move
Batch B \u2014 position arithmetic mass-mover (uses add / sub on ctx-attr Position):
- tpl-march-of-the-pawnguins \u2014 white pawns +8 (advance one row)
- tpl-the-rumbling \u2014 white +8, black -8 (mirror advance)
- tpl-back-that-shit-up \u2014 inverse \u2014 pawns retreat
- tpl-chaaaarge \u2014 every white piece advances 1 row
- tpl-the-enemy-is-routed \u2014 every black piece retreats 1 row
- tpl-going-woke (SIMPLIFIED) \u2014 every piece Position-1 (column shift); canonical
shape needed per-piece column predicate inside
iteration but for-each-piece.filter only accepts
{color, pieceType}. Documented in summary.
Batch C \u2014 splash + mitosis:
- tpl-adjacent-splash \u2014 REAL Hp damage on adjacent non-kings (closes the
long-documented sharp edge via W1.6's
add-to-attribute.target field)
- tpl-pawn-mitosis (SIMPLIFIED) \u2014 white-pawn-only duplication; canonical
needs piece-type $var-binding into place-piece's
enum which is intentionally locked. Documented.
- tpl-self-deserved-it \u2014 25 % self-destruct on move (with-probability +
ctx-self-id)
Test surface:
- wave1-recipes-real.test.ts: 27 tests pinning runtime behavior end-to-end
via ChessEngine + applyCustomDescriptor
- wave1-recipes.spec.ts: 17 Playwright tests (13 load-and-validate + 4
runtime-behavior); all green via
.sisyphus/scripts/run-pw.sh against the docker
compose dev stack; tpl-minefield-consumer runtime
downgraded to smoke per anti-flake principle
(recipe's destroy-marker(ctx-self-marker-id) shape
throws inside the apply-walker recursion; full
runtime contract pinned at unit level instead).
- recipes.test.ts: 5 invariants \u00d7 36 recipes (190 \u2192 284 expect calls);
all green.
bun run check: 3010 tests pass (was 2983, +27).
Wave-1 e2e adds 17 to e2e tally; full repo at 247 test files / 3010 unit tests.
Plan: .sisyphus/plans/thressgame-100.md
Notepads: .sisyphus/notepads/thressgame-100/
Evidence: .sisyphus/evidence/thressgame-100-wave1.txt (gitignored, 921 lines)
|
||
|---|---|---|
| .github/workflows | ||
| .sisyphus | ||
| docs | ||
| packages | ||
| scripts | ||
| .dockerignore | ||
| .gitignore | ||
| docker-compose.dev.yml | ||
| docker-compose.yml | ||
| Dockerfile.dev | ||
| 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