Add sisyphus

This commit is contained in:
Joey Yakimowich-Payne 2026-04-17 15:22:04 -06:00
commit 3e8bc7394e
No known key found for this signature in database
3 changed files with 141 additions and 76 deletions

View file

@ -0,0 +1,40 @@
## [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`
- Chess package.json already has `vite`, `@vitejs/plugin-react`, `react`, `react-dom`, `@types/react`, `@types/react-dom` in devDeps
- No `index.html`, no `src/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
- `Session` from `@paratype/rete` — the game engine
- `generateStartingPosition(session)` — inserts 32 piece facts
- `AttemptedMove` fact = move intent
- `LegalMove` derived fact = legal moves per piece
- `InCheck`, `GameOver` derived 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`