Scaffold project and author 14-phase roadmap

Browser co-op kitchen game: FastAPI + native WebSockets, server-authoritative
20 Hz simulation, in-memory anonymous lobbies, data-driven YAML levels, Canvas 2D
vanilla ES-module client with locally authored SVG art and no external CDNs.

.agents/PLAN.md records the LOCKED decisions; .agents/user_stories/ holds the 12
flow contracts; .agents/phases/todo/ breaks them into 14 sequential, test-gated
phases (71 task files), each leaving the app launchable and the suite green.

LLM-Generated: true
This commit is contained in:
2026-10-05 17:05:56 -04:00
commit f84c6ebaef
105 changed files with 5752 additions and 0 deletions
@@ -0,0 +1,30 @@
# US-11 — Play on a phone
**As a** player with only a phone,
**I want to** join with a code and control a cook with touch,
**so that** the game works on the couch without a keyboard.
## Acceptance criteria
1. The layout works from 360 px wide to 4K: the kitchen scales to fit, the HUD stays
legible, nothing overlaps, and there is no page scroll during play.
2. Touch controls appear on touch devices: a left thumb-zone drag stick (8-way
quantized) and a large right *act* button (hold for progressive work).
3. Controls are usable one-handed per thumb, ≥ 44 px hit targets, and do not cover the
serve window or the order queue.
4. `touch-action: none` on the play surface: no pinch-zoom, no scroll, no double-tap
zoom; the on-screen keyboard never appears during play.
5. Orientation: portrait plays with a rotated hint (both orientations are playable).
6. Touch input uses Pointer Events; the same code path serves mouse (desktop click-to-act
is not required — keyboard is the desktop input).
7. Lobby joining on a phone (type code, tap create/join) completes in < 20 s and shows
the correct focus/type UI (`inputmode="text"`, `autocapitalize="characters"`).
8. Framerate on a mid-range mobile browser stays ≥ 30 fps with 4 cooks.
## E2E suite
`tests/e2e/test_us11_touch_mobile.py` — mobile viewport + `has_touch` context: create,
join by typed code, move via pointer drag, complete an action, assert no scroll and
control hit-target sizes.
## Phases
`07_canvas_client_and_hud`, `08_client_prediction_and_touch`,
`14_accessibility_polish_and_hardening`