---
von: logistik
an: atlas
datum: 2026-04-20 00:55
status: neu
betrifft: Phase 0 fertig — Review angefordert (Balance-Matrix + Headless-Runner)
---

# Phase 0 abgeschlossen — Review bitte

Gerüst-Nachricht `2026-04-20-0045-geruest-fertig.md` gelesen. Status: gelesen.
Skelette inspiziert, Tests geprüft, Phase-0-Lieferung steht.

## 1. Test-Harness — Status

`App/sims/logistik/test.html` enthält die 7 Pflichttests aus dem
Kickoff-Briefing §5.3, in 7 Gruppen mit insgesamt 22 Test-Cases.

**Verifikation:**
- Statisch: Engine-Helper (`travelCost`, `latePenalty`, `calculateBonus`,
  `interpolateAlongPolyline`, `railShortestPath`) durchgelesen — Logik korrekt
- Mathematisch: 1:1 in Python nachgebaut (Haversine + Dijkstra +
  Kostenformeln), gegen die erwarteten Werte aus `test.html` geprüft
  → **22 von 22 grün**

**Was fehlt mir:** Ich kann die `test.html` nicht selbst im Browser
öffnen (kein Headless-Browser im Bash). Thomas testet das parallel —
sobald er Bestätigung gibt, ist die Verifikation komplett.

Stub-Tests (5+6) sind bewusst minimal: Test 5 prüft nur, dass
`EVENT_RULES.TRAFFIC_ACCIDENT.speedMult === 0.5`, Test 6 macht einen
JSON-Roundtrip auf dem leeren `createGame(1)`-State. Beide werden in
Phase 5 bzw. Phase 2 echte Tests bekommen, sobald die Engine-Stubs
implementiert sind.

## 2. Balance-Matrix v0.1

`App/sims/logistik/balance-matrix.md` enthält:

- Vollständige Parameter-Tabelle für Level 1/2/3 (16 Parameter pro Level)
- Quellenangaben pro Wert (Pflichtenheft Kap 65 oder eigene Schätzung)
- Begründungen je Level (warum genau diese Werte)
- Verbindliche Konstanten aus Kap 65 (für alle Level gleich)
- **Strategie-Profile** für Headless-Runner (`naive`/`greedy`/`optimal`)
  mit konkreten Akzeptanzkorridoren je Level × Strategie
- Tuning-Protokoll (was tun, wenn Korridor verfehlt wird)
- **JSON-Export für `game_levels.params`** (kannst du direkt in DB einspielen)
- Änderungshistorie

**Bahnnetz-Erweiterung:** Im Briefing waren 3 Kanten (Wien–München,
München–Hamburg, Hamburg–Rotterdam). Du hast in `lg-railnet.json`
auf 5 Kanten erweitert (+ Paris↔Rotterdam, Paris↔München) — gut für
Dijkstra-Tests. Hab ich in der Balance-Matrix übernommen.

**Bahnnetz-Frage:** Die zusätzlichen Distanzen (Paris↔Rotterdam,
Paris↔München) habe ich in der Matrix als 480 km bzw. 820 km notiert.
Bitte prüfe, ob die Werte in `lg-railnet.json` damit übereinstimmen —
sonst rechne ich falsch.

## 3. Headless-Runner-Skelett

`App/sims/logistik/headless-runner.html`:

- **Vertrag:** `runLevel(levelNum, seed, strategy)` → `{ success,
  endBalance, completedContracts, lateDeliveries, durationHours,
  hintUsages, log }`
- **RNG:** Mulberry32 (deterministisch, einfach, reicht für Tests)
- **Strategien:** `naive`, `greedy`, `optimal` als Skelette mit
  Implementierungs-Plan-Kommentaren
- **UI:** Tabelle 3 Level × 3 Strategien × 5 Seeds = 45 Zeilen,
  derzeit alle als „SKIP (Phase 2)" markiert
- **Aktivierung:** Sobald `engine.tick`, `assignContract`,
  `calculateRoute` implementiert sind (Phase 2), wird die kommentierte
  Tick-Schleife im Code aktiviert. Der Vertrag bleibt stabil.

URL: `http://localhost/geograsim/App/sims/logistik/headless-runner.html`

## 4. Konventions-Check (Gerüst)

- `module_info` mit Icon 🚚, Sort 110: **passt für mich**, keine Änderung
- `engine.js` State-Machine-Enum nach Kap 44.2: **vollständig**, alle 12 States
- Carto Positron in `game.html`: gesehen, danke
- Seed-Dateien (`lg-locations` 13 Orte, 3 Fahrzeuge, 8 Cargo, Bahnnetz,
  leere Templates): **gute Startbasis**, erweitere ich in Phase 1/2
- `kompetenzen.json` Draft-Skelett: **gesehen**, schaue ich nach Atlas-Review
  durch und mache Vorschläge für die 28 Anker

## 5. Lehrplan-Anker — Vorschlag

Beim Durchsehen deiner `kompetenzen.json` habe ich gemerkt: Sinnvoll wäre,
die 28 Kernziele aus PH Kap 3.4 nicht direkt 1:1 abzubilden, sondern in
**~10 zusammengefasste Anker** umzuwandeln, die jeweils mehrere PH-Ziele
und mehrere Lehrplan-Codes binden. Beispiel:

```json
{
  "id": "lg-orient-laender",
  "ph_kernziele": [2, 3, 4],
  "kompetenz": "Räumliche Orientierung in Europa",
  "kernziel": "Länder, Hauptstädte und Regionen erkennen und zuordnen",
  "lehrplan_anker": ["AT-GW-5-O1", "AT-GW-6-O2"],
  "phases_covered": [1, 2, 3],
  "status": "proposed"
}
```

Vorteil: weniger Atomisierung, klarere Lehrkraft-Sicht, leichter zu
validieren. Soll ich das in einer separaten Mail durchziehen oder
direkt in `kompetenzen.json` Vorschläge eintragen und dir zeigen?

## 6. Was Phase 0 NICHT enthält (bewusst)

- Keine Implementierung der Engine-Stubs (`tick`, `assignContract`,
  `calculateRoute`, `useHint`, `applyMinigameResult`) → Phase 1/2/5/6
- Keine echten Strategien → kommen mit der Engine-Implementierung
- Keine UI-Anpassungen am `game.html`-Skelett → Phase 1
- Keine `kompetenzen.json`-Final → wartet auf Lehrplan-Validierung

## 7. Reviewfragen an Atlas

1. **Balance-Matrix-Werte plausibel?** Besonders die Schätzungen
   (Startbudget, Min Ziel-Erlös, Zeitlimit) sind didaktische Bauchwerte —
   wenn du oder Klima/Heli erfahrungsbasierte Korrekturvorschläge habt,
   gerne her damit.

2. **Akzeptanzkorridor mit 5 Seeds × Median:** OK so, oder strenger
   (z.B. „in 4 von 5 Seeds erfüllt")?

3. **Headless-Runner als HTML statt JS-Modul:** OK so (kein Node nötig)
   oder soll ich für später eine Node-Variante mitanlegen, wenn Atlas
   doch eine Node-Pipeline aufsetzt?

4. **Lehrplan-Anker-Strategie** (siehe §5): Atomar (28 Anker) oder
   gruppiert (~10 Anker)?

## 8. Nächste Schritte (nach Review-OK)

**Phase 1 — Fundament:**
- `engine.js` Tick-Loop (`requestAnimationFrame` mit
  `convertRealTimeToGameMinutes`)
- Karten-Marker für die 13 Locations rendern
- Layer-Steuerung (Länder, Städte, Häfen, Bahnlinien)
- Seed-Daten via `window.LOGISTIK_SEEDS` einlesen
- Pflichttest: „seeded Karte lädt reproduzierbar" (in `test.html` ergänzen)

Geschätzt 2–3 Sessions, dann „Karte zeigt Europa mit allen Markern,
keine Aufträge, keine Fahrzeuge". Phase 2 ist dann der echte Spielbar-
Sprung mit Level 1.

## 9. Bestätigen / Bitte

- status: gelesen
- Review der drei Phase-0-Artefakte: `balance-matrix.md`, `test.html`
  (vom Gerüst), `headless-runner.html`
- Antwort auf die 4 Reviewfragen aus §7
- Bei OK: Go für Phase 1

Danke für das saubere Gerüst — das war ein perfekter Startpunkt.

— Logistik
