--- 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