3885c83294
- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card, PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra, Polyline-Interpolation), Test-Harness, Kompetenzen-Draft, 5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet, contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch die Logistik-Instanz geliefert und Atlas-Review bestanden - Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) + Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script auffindbar gemacht - Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert waypoints.sql aus DB (70 Einträge) - Design-System: .ggs-level-grid / .ggs-level-card als Standard gepromotet (Klimas Muster, iPad-hover-safe) - Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik, Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations- nachrichten an Fluss, Klima, Glossar, Lehrplan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
161 lines
6.3 KiB
Markdown
161 lines
6.3 KiB
Markdown
---
|
||
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
|