1.9 KiB
1.9 KiB
[2026-04-16] Session ses_267b9d7a2ffeFkGcPFn1iv223J Start
Codebase State (Phase 3.8 complete)
- 323 tests pass, 0 fail across all packages
- Engine (
packages/rete/src/): fully implemented — schema, WM, alpha/beta, join, filter, query, derived, negation, existential, NCC, aggregation, event log, snapshot, replay - Chess (
packages/chess/src/): all FIDE rules + 15 presets implemented- Presets in
packages/chess/src/presets/registry.ts - Fact schema in
packages/chess/src/schema.ts - Engine facade in
packages/chess/src/engine.ts
- Presets in
- Chess package.json already has
vite,@vitejs/plugin-react,react,react-dom,@types/react,@types/react-domin devDeps - No
index.html, nosrc/app/, no UI files yet
Key Conventions
- Bun workspaces,
bun test, NOT npm/node - TypeScript strict:
noImplicitAny,exactOptionalPropertyTypes,noUncheckedIndexedAccess - ESLint flat config in
eslint.config.js - No
as any, no@ts-ignore - All tests: Vitest (not Jest)
- Tailwind for styling (per plan P3.9)
- React 19
- Square encoded as number 0..63
- Pieces as EntityId with multiple attrs
Chess Architecture
Sessionfrom@paratype/rete— the game enginegenerateStartingPosition(session)— inserts 32 piece factsAttemptedMovefact = move intentLegalMovederived fact = legal moves per pieceInCheck,GameOverderived facts- Presets: PRESET_REGISTRY in
packages/chess/src/presets/registry.ts engine.ts— higher-level facade wrapping Session
UI Requirements (P3.9-P3.15)
- Routes: Home (/), Game (/game), Rules (/rules), Save (/save)
- Board:
[data-square="e2"],[data-piece="white-pawn"]selectors needed for Playwright - Drag-drop: HTML5 DnD or react-dnd
[data-action="undo"],[data-action="save"],[data-action="export"],[data-action="import"][data-testid="app-root"]on root element[data-preset="{id}"] [data-role="toggle"]- localStorage key:
paratype-chess:v1:autosave