All green. Final verification complete — writing the report.
**Final pass report — phase 06 `realtime_websocket_protocol`**
- Verified: all 6 task files present in `complete/`; this was the final verification pass (no implementation work outstanding)
- `uv run ruff check .` → all checks passed; `uv run pyright` → 0 errors
- `uv run undercooked-levels validate` → content OK; `uv run pytest` (full suite) → **1751 passed, 0 failed, coverage 97.30% (>90% floor)**; slow sim stage (`-m slow tests/sim --no-cov`) → 2 passed; repo hygiene clean
- App launches: `/healthz` 200, `/` 200, `/api/levels`, `/api/config`, `POST /api/rooms` (201), `/api/stats` all verified live on an ephemeral port (server cleaned up)
- Criteria: scripted client room→hello→ready→start→countdown→≥20 snaps→round — PASS (`test_ws_round_two_clients.py`); identical `round` payloads both clients — PASS (`round_a == round_b`); version mismatch → `err protocol_mismatch` + close `4400` — PASS; 64 KB refused / 4 KB boundary, 500-burst → `rate_limited` → `4404` with bounded queue, 2000 malformed + 200 handshakes within memory bound — PASS; snap ≤ 1.5 KB (4p/4o/3h) and 64×64 ≤ 4 KB, downlink ≤ 60 KB/s over 100 ticks — PASS; `docs/PROTOCOL.md` model-sync test-enforced in both directions + full-round sequence diagram present — PASS
- Docs: README.md had 3 stale spots — status section (claimed 01–05 complete, 06 pending → now 01–06 complete, 07 pending), "until phases 06/07 wire the transport" wording, and the `PROTOCOL.md` layout note ("phase 06 completes it"). All fixed. AGENTS.md verified consistent — no changes needed
- No defects found in completed phases; no live infrastructure touched
Next pending phase: `07_canvas_client_and_hud`.
81 lines
2.8 KiB
YAML
81 lines
2.8 KiB
YAML
# levels/recipes.yaml — the campaign recipe book (PLAN §5/§8, A8).
|
|
#
|
|
# Every dish the game knows lives here; no Python enumerates recipes. The
|
|
# schema is `src/undercooked/sim/recipe.py` and the reference is
|
|
# docs/LEVELS.md — every model is strict (`extra="forbid"`), so a typo here
|
|
# fails the load loudly instead of silently defaulting.
|
|
#
|
|
# Step lists mirror PLAN §5's station pipelines: pick from the spawn shelf,
|
|
# chop (~0.9 s), cook on the stove, plate at the prep station, serve at the
|
|
# window. `seconds` feeds only the validator's greedy target-plausibility
|
|
# bound; the simulation (phase 04) re-enacts these steps per tick.
|
|
|
|
# Catalog of the item kinds the campaign's dishes consume (documentation of
|
|
# intent; spawn shelves are what actually put items on the floor).
|
|
ingredients: [tomato, onion, lettuce, dough, patty, rice, fish, plate]
|
|
|
|
recipes:
|
|
# tomato + onion -> chop -> pot on the stove -> plate
|
|
soup:
|
|
id: soup
|
|
name: Tomato Soup
|
|
base_score: 40
|
|
ingredients:
|
|
- {kind: tomato, form: raw}
|
|
- {kind: onion, form: raw}
|
|
steps:
|
|
- {kind: pick, station: spawn_shelf}
|
|
- {kind: chop, station: chop_board, seconds: 0.9}
|
|
- {kind: cook, station: stove, seconds: 5.0}
|
|
- {kind: plate, station: prep, seconds: 0.4}
|
|
- {kind: serve, station: serve}
|
|
tags: [hot, soup]
|
|
|
|
# lettuce + tomato -> chop -> plate; the fast, no-fire dish
|
|
salad:
|
|
id: salad
|
|
name: Garden Salad
|
|
base_score: 30
|
|
ingredients:
|
|
- {kind: lettuce, form: raw}
|
|
- {kind: tomato, form: raw}
|
|
steps:
|
|
- {kind: pick, station: spawn_shelf}
|
|
- {kind: chop, station: chop_board, seconds: 0.9}
|
|
- {kind: plate, station: prep, seconds: 0.4}
|
|
- {kind: serve, station: serve}
|
|
tags: [cold, quick]
|
|
|
|
# rice + onion straight onto the stove (PLAN §5: raw rice needs no board)
|
|
fried_rice:
|
|
id: fried_rice
|
|
name: Fried Rice
|
|
base_score: 50
|
|
ingredients:
|
|
- {kind: rice, form: raw}
|
|
- {kind: onion, form: raw}
|
|
steps:
|
|
- {kind: pick, station: spawn_shelf}
|
|
- {kind: cook, station: stove, seconds: 6.0}
|
|
- {kind: plate, station: prep, seconds: 0.4}
|
|
- {kind: serve, station: serve}
|
|
tags: [hot, grain]
|
|
|
|
# patty + dough + lettuce -> chop + pan on the stove -> plate. Defined now;
|
|
# later levels (phase 11) put it in an order pool.
|
|
burger:
|
|
id: burger
|
|
name: Chef's Burger
|
|
base_score: 70
|
|
ingredients:
|
|
- {kind: patty, form: raw}
|
|
- {kind: dough, form: raw}
|
|
- {kind: lettuce, form: raw}
|
|
steps:
|
|
- {kind: pick, station: spawn_shelf}
|
|
- {kind: chop, station: chop_board, seconds: 0.9}
|
|
- {kind: cook, station: stove, seconds: 5.0}
|
|
- {kind: plate, station: prep, seconds: 0.5}
|
|
- {kind: serve, station: serve}
|
|
tags: [hot, stacked]
|