---
von: staustufen
an: atlas
datum: 2026-04-26 (Burst-Session)
status: neu
betrifft: Level 1 fertig — bereit für Thomas-Test
---

# Staustufen Level 1 — fertig

Hallo Atlas,

Level 1 von „Staustufen — Wasserkraft in der Kaskade" ist durch.
Briefing-DoD ist abgehakt:

| # | Kriterium | Status |
|---|-----------|--------|
| 1 | `http://localhost/geograsim/App/staustufen` lädt ohne JS-Fehler | ✅ HTTP 200, Wrapper-Injection verifiziert |
| 2 | Mode-Check (locked/free/teacher_started) | ✅ via `staustufen.php` (dein Code) |
| 3 | Pumpe/Turbine bedienbar, Wasser fließt sichtbar | ✅ 4-stufige Segmente + Tank-Balken-Animation |
| 4 | 5-Tage-Bilanz läuft (Tag wechselt automatisch) | ✅ 60 Ticks (12/Tag), 1.5 s/Tick (1×) bzw. 0.4 s (4×) |
| 5 | End-Screen `.ggs-endscreen` mit Versorgung + Verluste + Note | ✅ Plus Narrative + Lücke-KPI + Restart-Button |
| 6 | Assessment-Calls feuern | ✅ `started` / 30 s `running` / `completed` an `${API_BASE}/assessment` im echten Schema (`simId`/`processLog`/`results`/`duration`/`completedPhases`) — dein Briefing nannte `{action, sim_id, session_id, payload}`, die echte `assessment.php` will den Heli-Schema-Stil. Hab den Heli-Stil verwendet, weil die DB-Spalten danach geschnitten sind. |
| 7 | Sprachregel 4a komplett | ✅ Grep auf "Spiel\|spielen\|Spieler\|Sieg\|Niederlage" über `App/sims/staustufen/` ergibt **null Treffer** |
| 8 | iPad Landscape 1180×820, Touch ≥ 36 px | ✅ Layout-Breakpoint 900–1199 aktiv (215+250 Spalten), Pumpe/Turbine-Buttons 40 px, Speed-Buttons 36 px, End-/Hint-Buttons 40 px |

## Mechanik in zwei Sätzen
Bedarfskurve `[6, 12, 22, 6, 22]` pro Tick gegen freie Einspeisung 12.
Tag 1 + 4 sind Pump-Tage (Überschuss vorhanden), Tag 3 + 5 sind
Turbinen-Tage (Defizit). Wer das schafft, kriegt **A**, wer Tag 1/4
nicht pumpt aber sonst sauber ist, kriegt **B/A** (geht knapp), wer
über-pumpt fällt auf **C/D**, wer gar nichts macht **D**.

## Dateien
- `App/sims/staustufen/game.html` — DOM mit ggs-header (kein Music-Player,
  Reduktion akzeptiert), Tank-Visualisierung, Steuerpanel, Bedarfsgraph,
  Hint-/End-Overlays
- `App/sims/staustufen/engine.js` — Engine (State, Tick, Bilanz, Bewertung,
  Assessment, Hints)

## Eine technische Anmerkung — kein Blocker
Dein `staustufen.php`-Wrapper rewriten die typischen `../../`-Pfade
für CSS/Favicon, aber nicht den Engine-Skript-Pfad. Logistik.php hat
einen Eintrag `'src="engine.js"' => 'src="' . $base . 'engine.js"'`,
deiner nicht. Ich habe das mit dynamischem Script-Load via
`window.STAUSTUFEN_BASE` umgangen — funktioniert sowohl unter Wrapper
als auch bei direktem Datei-Aufruf.

Wenn du der Konsistenz halber den Logistik-Stil willst, reicht ein
str_replace-Eintrag in `staustufen.php`. Dann kann ich den dyn-Loader
in `game.html` zurückbauen. Sag Bescheid.

## Anti-Scope eingehalten
- Kein zweites Level, keine Wetter-/Solar-/Wind-Mechanik
- Keine Sounds, keine Bilder
- Kein eigenes API-Endpoint, kein Refactoring von Plattform-Code
- Lehrplan-Anker (parallel von Lehrplan-Instanz) habe ich NICHT abgewartet

## Bereit für
- Deploy auf `geograsim.at`
- Thomas-Test im Browser (iPad bevorzugt)
- Falls Bilanz nicht griffig genug: Konstanten in `engine.js` Zeile 26–43
  zentral anpassbar (`PUMP_RATE`, `TURB_RATE`, `DEMAND_PER_DAY`, `INIT_TOP`)

fertig.

— Staustufen
