diff --git a/.claude/handoffs/2026-05-18-205736-table-fidelity-features.md b/.claude/handoffs/2026-05-18-205736-table-fidelity-features.md index d7339c0..153640d 100644 --- a/.claude/handoffs/2026-05-18-205736-table-fidelity-features.md +++ b/.claude/handoffs/2026-05-18-205736-table-fidelity-features.md @@ -22,7 +22,7 @@ ## Current State Summary -The "table-fidelity feature batch" (three features Andrew Freiberg — Seth's dad, a physical-blind-chess player — requested by email) is **fully implemented, reviewed, and committed to `main`**, but **not yet deployed**. All 12 plan tasks were executed via subagent-driven development with two-stage review per task plus a final whole-batch review. Build, typecheck, and the 87-test suite all pass. The remaining steps are a manual browser pass and deployment to the two live instances. +The "table-fidelity feature batch" (three features Andrew Freiberg — Seth's dad, a physical-blind-chess player — requested by email) is **fully implemented, reviewed, committed to `main`, and deployed** (2026-05-18) to both live instances — `chess.sethpc.xyz` (CT 690) and `chess.local` (VDJ-RIG), both verified serving the new build (`index-DNriqpNJ.js`). All 12 plan tasks were executed via subagent-driven development with two-stage review per task plus a final whole-batch review. Build, typecheck, and the 87-test suite all pass. The one thing not done: a manual browser pass — the client UI was never click-tested (an agent can't drive a browser). ## Architecture Overview @@ -71,9 +71,8 @@ All recorded in `DECISIONS.md` under "Table-fidelity features (2026-05-18)" and ## Immediate Next Steps -1. **Manual browser verification** of the client UI (see Blockers — not done this session). Run `pnpm dev:server` + `pnpm dev:client`, create a **blind game vs computer**, and check: the moderator panel shows White/Black-labelled attempt lines; the Captures panel updates on a capture; the phantom layer renders 16 seeded pieces; dragging a phantom moves it / off-board removes it; the palette places phantoms; a *tap* still makes real moves; phantoms persist across reload; vanilla mode shows no phantom UI; phantoms hide on game end. -2. **Deploy** both instances per `CLAUDE.md` → Operations: CT 690 (`chess.sethpc.xyz`) and `chess.local` on VDJ-RIG. Server restart drops in-memory games. -3. After deploy, smoke-test on a phone (the phantom drag is the main mobile-risk surface). +1. **Manual browser/phone verification** of the now-live client UI — not done this session (an agent can't drive a browser). Open https://chess.sethpc.xyz, create a **blind game vs computer**, and check: the moderator panel shows White/Black-labelled attempt lines; the Captures panel updates on a capture; the phantom layer renders 16 seeded pieces; dragging a phantom moves it / off-board removes it; the palette places phantoms; a *tap* still makes real moves; phantoms persist across reload; vanilla mode shows no phantom UI; phantoms hide on game end. The phantom drag is the main mobile-risk surface — test on a phone. +2. (Optional) Fix the `install-local.sh` redeploy gap — see Potential Gotchas. ## Blockers / Open Questions @@ -101,7 +100,8 @@ All recorded in `DECISIONS.md` under "Table-fidelity features (2026-05-18)" and - `packages/server/tsconfig.tsbuildinfo` shows persistent `M` in `git status` — pre-existing drift (tracked before `*.tsbuildinfo` was gitignored), not this session's work. - The pre-commit hook is `detect-secrets-hook --baseline .secrets.baseline`. -- Server restart on deploy drops all in-memory games. +- Server restart on deploy drops all in-memory games. (CT 690 had 3 "active" games at deploy time — almost certainly stale abandoned games, since active games never auto-expire and uptime was 19 days; dropped per the pre-accepted MVP policy.) +- `deploy/install-local.sh` (the `chess.local` installer) ends with `systemctl enable --now blind-chess.service`, which does NOT restart an already-running service — a redeploy via the script alone leaves the old code running. This deploy worked around it with an explicit `sudo systemctl restart blind-chess` after the script. Proper fix: change the script's `enable --now` to `enable` then `restart`. ## Environment State diff --git a/CLAUDE.md b/CLAUDE.md index 057334b..9183914 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,7 +19,7 @@ The system's most distinctive property: highlighting in blind mode reveals **zer ## Current State -- **Phase:** MVP **deployed and live** at https://chess.sethpc.xyz (2026-04-28). **AI Phase 1 (Casual bot) deployed** (2026-04-28) — "Play vs computer" → Casual bot. **Blind Casual check-resolution fix shipped** (2026-04-29). **Table-fidelity feature batch code-complete on `main`** (2026-05-18) — moderator announces every move/attempt to both players, a capture tally, and a client-local phantom opponent-piece layer for blind mode. **Pending deploy** (both instances — see Operations). +- **Phase:** MVP **deployed and live** at https://chess.sethpc.xyz (2026-04-28). **AI Phase 1 (Casual bot) deployed** (2026-04-28) — "Play vs computer" → Casual bot. **Blind Casual check-resolution fix shipped** (2026-04-29). **Table-fidelity feature batch deployed** (2026-05-18) — moderator announces every move/attempt to both players, a capture tally, and a client-local phantom opponent-piece layer for blind mode; live on both instances (CT 690 + `chess.local`). Client UI not yet manually browser-tested. - **Repo:** `git.sethpc.xyz/Seth/blind_chess`. - **Stack:** Node 22 + TypeScript, Fastify + `ws`, Svelte 5 + Vite, `chess.js`, `js-chess-engine` (Casual vanilla AI). pnpm workspace with `packages/{server,client,shared}`. - **Deploy:** LXC **CT 690 on node-241** at 192.168.0.245, behind Caddy CT 600. Systemd unit `blind-chess.service`, port 3000. In-memory state only.