**Final report — phase 07 final verification pass** - **Verified:** all 5 tasks present in `complete/`; app boots (`/healthz` 200, `/` 200, static + atlas + `/api/levels` served); `docs/CLIENT.md` module map matches the on-disk `app/static/` tree; no code defects found. - **Tests/lint/coverage:** `bash .agents/validate.sh` → ruff clean, pyright 0 errors, `undercooked-levels validate` pass, **full pytest 1838 passed, 97.21% coverage (floor 90%)**, slow sim stage 2 passed, repo hygiene clean. `uv run pytest tests/e2e -q` → **53 passed** (all 8 suites added this phase). - **Criteria:** (1) two tabs create→join→ready→start→serve one dish, keyboard only — green via `test_us01/02/03/04` ✔; (2) e2e green ✔; (3) canvas non-blank, pixels change after a move — `test_us04_render_smoke` ✔; (4) HUD score within 200 ms of the `served` event — asserted, green ✔; (5) zero console errors + zero off-origin requests — `test_atlas_loads` / `test_us01_landing_surface` ✔; (6) `docs/CLIENT.md` matches layout ✔; (7) 100% suite + 97.21% ✔; (8) docs pass below ✔; (9) no regression in completed phases (all prior suites green) ✔. - **README.md fixed:** status still said "next pending phase is 07" → now 07 complete, 08 pending; the phase-07 client text buried in the phase-05 bullet → its own "canvas client, art, HUD (phase 07)" bullet; stale "What does not exist yet" (claimed movement/controls missing) → rewritten to phases 08–14; "once the room flow ships" → "live in the browser today"; Layout `app/static/` "renderer arrives with the rest of phase 07" → full shipped-client map; Layout `docs/` "CLIENT lands with phase 07" → `CLIENT.md` listed; added `gen_art_index.py` Layout entry. - **AGENTS.md fixed:** "the eight screens" (7 listed) → "the seven screens" (+ `dom.js` is the shared builder, not a screen); e2e naming line → notes the non-story guard `test_atlas_loads.py`. - **Decisions:** no code changes were needed; only the two doc fixes above. Docs re-verified by `test_docs_commands`/`test_docs_index` (44 passed) plus the final full gate. - **Next pending phase:** `08_client_prediction_and_touch`.
45 lines
1.3 KiB
YAML
45 lines
1.3 KiB
YAML
# tests/fixtures/levels_us04/01_first_kitchen.yaml — the phase-07 task-04
|
|
# campaign: the shipped level 1's layout, with `target_score` 100 and
|
|
# `time_limit` 120 s. One served soup scores 44-66
|
|
# (`round(40 x 1.0 x 1.1 x (1 + 0.5 x fraction))` — sim/scoring.py), so a
|
|
# *single* serve (44-66 < 100) does **not** end the round: the HUD's
|
|
# score text is observable changing after the serve (the task's "within
|
|
# 200 ms of the server event" assertion needs the round to outlive the
|
|
# serve), and the render budget is sampled over a longer window.
|
|
|
|
id: 01_first_kitchen
|
|
name: First Kitchen
|
|
order: 1
|
|
difficulty: 1
|
|
time_limit: 120
|
|
target_score: 100
|
|
blurb: >-
|
|
The e2e campaign's kitchen: one dish at a time, open floor, no hazards.
|
|
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]]
|
|
hazards: []
|
|
orders:
|
|
pool: [soup]
|
|
concurrent: 1
|
|
spawn_interval: [16, 20]
|
|
deadline: 60
|