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-04 — Move and cook in the shared kitchen
**As a** player,
**I want to** walk my cook, grab ingredients, chop, cook, plate, serve, and wash,
**so that** I can complete orders with my hands.
## Acceptance criteria
1. Keyboard (WASD/arrows) moves the cook smoothly in 8 directions without diagonal
speed boost; the cook stops at walls, counters, and other players.
2. One action key (`Space`/`Enter`) interacts with the tile(s) in front, choosing the
sensible verb: pick up, start/hold work, place, plate, serve, wash, trash.
3. Holding the action key performs progressive work (chop ≈ 0.9 s, cook auto-runs,
wash ≈ 1.2 s) with a visible progress ring.
4. One carried item per player; the carried item is drawn above the cook and its
form (`raw`/`chopped`/`cooking`/`cooked`/`burnt`/`plated`) is visually distinct.
5. Reach is 1 tile in front (plus a 0.6-tile forgiveness radius); out-of-reach presses
give an explicit "move closer" nudge rather than doing nothing.
6. A contested target resolves deterministically: one winner, and the loser gets
visible `denied` feedback — never two players holding one item.
7. Serving a wrong dish is refused with feedback and the order survives.
8. The full chain is possible without dead ends: dirty plates/pots return to the sink
and come back usable; trash always accepts an item.
## E2E suite
`tests/e2e/test_us04_move_and_cook.py` — scripted keyboard session completes one soup
end to end; asserts HUD score bump, station state changes, denied path on a blocked tile.
## Phases
`03_simulation_movement_and_interaction`, `04_kitchen_pipeline_and_scoring`,
`07_canvas_client_and_hud`, `08_client_prediction_and_touch`, `09_co_op_two_player_e2e`