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`.
60 lines
2.2 KiB
YAML
60 lines
2.2 KiB
YAML
# tests/fixtures/levels_round/01_first_kitchen.yaml — the shipped campaign
|
|
# level 1, verbatim in layout and content, with two numbers tuned for the
|
|
# phase-06 two-client round suite (tests/integration/test_ws_round_two_clients.py).
|
|
#
|
|
# `target_score` is 20 (the shipped 45): one served soup scores 44-66
|
|
# (`round(40 x 1.0 x 1.1 x (1 + 0.5 x fraction))` — sim/scoring.py), so the
|
|
# first serve always crosses the target and the round ends `WON` on that
|
|
# substep, whatever the wall-clock jitter of a live 20 Hz tick. The shipped
|
|
# 150 s / 45 target would make a live-suite win depend on choreography timing
|
|
# (a second serve within the 60 s order deadline); the wire contract the
|
|
# suite locks (the round's events, payload and lobby return) is the same.
|
|
#
|
|
# `time_limit` is 60 s (the shipped 150): a safety margin around the ~25 s
|
|
# scripted soup. If the choreography ever stalls, the round ends `LOST` at the
|
|
# buzzer instead of running a two-and-a-half-minute test.
|
|
#
|
|
# Schema: docs/LEVELS.md — validated by the server's content gate at boot and
|
|
# by `undercooked-levels validate` on a copy.
|
|
|
|
id: 01_first_kitchen
|
|
name: First Kitchen
|
|
order: 1
|
|
difficulty: 1
|
|
time_limit: 60
|
|
target_score: 20
|
|
blurb: >-
|
|
Your first shift: grab a tomato and an onion from the shelves, chop them,
|
|
cook the soup, plate it, and run it to the serve window before the clock
|
|
runs out. One dish, one of everything, nowhere to bump into each other.
|
|
grid:
|
|
- "############"
|
|
- "#T..C...S..#"
|
|
- "#..........#"
|
|
- "#.P......X.#"
|
|
- "#..........#"
|
|
- "#..K....O..#"
|
|
- "#..........#"
|
|
- "#..........#"
|
|
- "############"
|
|
tiles:
|
|
"#": {kind: wall}
|
|
".": {kind: floor}
|
|
"T": {kind: floor, station: spawn_shelf, item: tomato}
|
|
"O": {kind: floor, station: spawn_shelf, item: onion}
|
|
"C": {kind: floor, station: chop_board}
|
|
"S": {kind: floor, station: stove}
|
|
"P": {kind: floor, station: prep}
|
|
"X": {kind: floor, station: serve}
|
|
"K": {kind: floor, station: sink}
|
|
spawns: [[2, 7], [9, 7]]
|
|
orders:
|
|
pool: [soup]
|
|
concurrent: 1
|
|
spawn_interval: [16, 20]
|
|
deadline: 60
|
|
hazards: []
|
|
escalation_notes: >-
|
|
Integration-suite copy of the tutorial baseline (PLAN §8 campaign plan):
|
|
one recipe, one order at a time, open floor, no hazards.
|