Files
claude (duplicate_chess) 5047ad7786 docs: update CLAUDE.md — v1 implemented and merged
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 06:01:26 -04:00

52 lines
2.7 KiB
Markdown

# Duplicate Chess
> Local browser sandbox for "duplicate chess" — a four-player coupled-board chess variant.
## Start Here
**Read the latest handoff first:** `.claude/handoffs/` (most recent file).
It has session state, in-progress work, and ordered next steps.
Then check `IDEA.md` for the project brief, `DECISIONS.md` for settled choices, and
`docs/superpowers/specs/2026-05-19-duplicate-chess-design.md` for the full design.
## Project Identity
A digitization of "duplicate chess," a four-player chess variant invented by Andrew
Freiberg (Seth's father — also the inventor of the blind-chess variant behind the
sibling `blind_chess` project). Four players (North, South, East, West) and four
boards (NW, NE, SW, SE); each player controls one colour on two boards and must play
the identical algebraic move on both. A captured piece leaves a frozen, capturable
"ghost" twin on the player's other board. Every individual board always remains a
legal game of orthodox chess.
This project is a **local, single-operator sandbox/visualizer**: one screen, all four
boards, an engine that enforces the synchronized-move coupling, renders ghosts, and
detects the endgame. Its purpose is to let the variant be *seen* and studied — the
inventor's own point is that it cannot be understood from prose alone.
## Current State
- **Phase:** v1 **implemented and merged to `main`** — the engine and the compass
UI are complete. Not yet manually browser-tested.
- **Repo:** `git.sethpc.xyz/Seth/duplicate_chess` (`main`).
- **Deploy target:** n/a — runs locally (`pnpm install && pnpm dev`).
- **Stack:** Vite + Svelte 5 + TypeScript, `chess.js`. Single package; engine in
`src/engine/` (pure, DOM-free; 27 vitest tests passing), UI in `src/lib/`.
- **Commands:** `pnpm dev` (run) · `pnpm build` · `pnpm test` (engine) ·
`pnpm exec svelte-check --tsconfig ./tsconfig.json` (typecheck).
- **Known follow-ups (not blocking):** interactive browser test still pending (a
human task — `svelte-check` + manual is the design, see spec §8); history scrubbing
is view-only whereas spec §4.3 says truncate-on-move (deviation — confirm which to
keep); `deserialize` trusts the `player` field on replay; move log has no round
numbers. See the latest handoff in `.claude/handoffs/`.
## Conventions
- Inherits homelab conventions from `~/bin/CLAUDE.md` (gitea CLI, conventional
commits, `.claude/handoffs/` for session state).
- The engine (`src/engine/`) is DOM-free and the single source of truth for game
state. The UI never computes legality itself.
- Provisional endgame rules are marked PROVISIONAL in the spec — they are Claude's
chosen defaults, not Andrew's rulings. Flag them if revisited.