# US-07 — Progress through a campaign that gets harder **As a** player finishing level after level, **I want to** unlock the next kitchen and feel it get harder, **so that** a session has a trajectory instead of one repeated map. ## Acceptance criteria 1. The level list shows all shipped levels in campaign order with the difficulty pips, target, time limit, and per-level best score/stars. 2. Completing a level unlocks the next one **for that session**; the next level is pre-selected in `ROUND_END` and startable by one action. 3. Failing a level keeps the same next choice available (retry) and does not unlock forward; unlocking never goes backwards. 4. Level content comes from `levels/*.yaml`; adding a new valid YAML file makes the level appear in `/api/levels` with no Python change (regression test). 5. Every campaign level passes content validation: reachability, recipe solvability, target plausibility, hazard references. 6. Each consecutive level moves at least two escalation axes (§8 of PLAN.md) versus its predecessor; the curve check fails the build otherwise. 7. All 10 campaign levels are playable end to end with the intended station set. 8. Progression state is per session token and survives a page reload; it is documented as in-memory and lost on server restart. ## E2E suite `tests/e2e/test_us07_campaign_progression.py` — win level 1, assert level 2 unlocked, selected, and startable; fail a level, assert locked. Plus `tests/unit/test_level_curve.py` for the escalation-axis and validation gates. ## Phases `02_level_content_and_validation`, `11_campaign_levels_and_progression`