# levels/01_first_kitchen.yaml — campaign level 1, the tutorial kitchen. # Schema: docs/LEVELS.md · validated at startup and by `undercooked-levels # validate`. Every '#' is wall, every station stands on walkable floor. id: 01_first_kitchen name: First Kitchen order: 1 difficulty: 1 time_limit: 150 target_score: 45 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: >- Tutorial baseline (PLAN §8 campaign plan): one recipe, one order at a time, slowest spawn interval, longest time budget, open floor, no hazards. Every later level moves at least two axes up from these numbers.