Atlas: Logistik-Gerüst + Heli-Fix + Waypoints-Regen + Level-Picker

- 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>
This commit is contained in:
2026-04-19 20:43:48 +02:00
parent 3931a701e1
commit 3885c83294
54 changed files with 5717 additions and 71 deletions
+112
View File
@@ -0,0 +1,112 @@
---
instanz: logistik
rolle: Simulation „Logistik Europa" (Modul 11)
stand_seit: 2026-04-19
phase: Phase 0 v0.2 ausgeliefert (Atlas-Klarstellung umgesetzt) — wartet auf Atlas-Review
---
# Status — Logistik-Instanz
## Rolle und Scope
- Eigner: `App/sims/logistik/` (Gerüst kommt von Atlas)
- Eigner: `App/pages/logistik.php`, `App/pages/modul-logistik.php`
- Eigner: `App/php/api/logistik-*.php`
- Optional: neue MySQL-Tabellen `lg_…` (nur nach Atlas-Abstimmung)
- Plattform-Zentrale ist Atlas — Anfragen über `_inbox/zentrale/`
## Aktueller Stand
- 2026-04-19 23:15 — Kickoff-Briefing von Atlas erhalten
- 2026-04-19 23:25 — Briefing + Pflichtenheft (alle Schlüsselkapitel) gelesen
- 2026-04-19 23:30 — Empfangsbestätigung an Zentrale geschickt
- 2026-04-20 00:10 — Atlas-Antworten auf alle 4 Rückfragen erhalten
- 2026-04-20 00:20 — Quittung an Atlas (Routing bestätigt, alle Punkte übernommen)
- Warte auf: Atlas baut Gerüst (module_info, Landing-Card, Detailseite, Wrapper, Skelette unter `App/sims/logistik/`)
## Geklärte Entscheidungen (Atlas-Antwort 00:10)
- **Lehrplan**: `kompetenzen.json` als Vorab-Skizze (`status: "proposed"`) nach Gerüst, final nach Phase 2
- **Glossar**: Atlas koordiniert Anfrage; ~10 von 13 Begriffen neu, reicht bis Phase 6
- **Landing**: Eigene Gruppe „Wirtschaft & Verkehr" (LOCKED bis FREE)
- **Tile-Server**: Carto Positron `https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png`, Leaflet 1.9.4, `minZoom: 4, maxZoom: 10`
- **Routing**: bestätigt — L1 Luftlinie×1.3, L2/L3 hand-gepflegte Polylines in `lg-routes-osm.json`, OSRM erst auf Thomas-Wunsch
- **State-Machine**: Atlas legt Enum exakt nach Pflichtenheft Kap 44.2 ins `engine.js`-Skelett
## Phasenplan (aus Briefing)
- [ ] **Phase 0** — Balance-Matrix + Test-Harness + Headless-Runner-Skelett → Atlas-Review
- [ ] Phase 1 — Fundament (engine.js + Karte + Seed-Daten)
- [ ] Phase 2 — Kern-Loop (Level 1 spielbar)
- [ ] Phase 3 — Kostenmodell + Mehrfahrzeuge + mehrere Aufträge (Level 2)
- [ ] Phase 4 — Bahn + Häfen + Intermodal (Level 3)
- [ ] Phase 5 — Hilfestufen + Events
- [ ] Phase 6 — Minigames + Sprachregel-Check + Leichte Sprache
- [ ] Phase 7 — Lehrkraftmodus + Analytics + Polish
## Offene Aufgaben (kurzfristig)
1. `App/docs/module-interface.md` Abschnitte 4a/4b/4c/7b lesen
2. Sobald Gerüst von Atlas steht: `balance-matrix.md` schreiben (Werte aus Kap 65 + Schätzwerte)
3. `test.html` mit 7 Pflichttests anlegen
4. Headless-Runner-Skelett `runLevel(levelId, seed, strategy)` definieren
5. Atlas-Review von Phase 0 anfordern, bevor Phase 1 startet
## Blocker
- Keine. Wartepunkt: Atlas-Gerüst (≈ 2 Sessions geschätzt)
## Konventions-Anker (Erinnerung)
- Sprachregel 4a: keine „spielen / Spiel / Spieler"
- Leichte Sprache 4b: `pickText()`-Pattern für alle UI-Texte
- iPad 4c: 1180×820 Landscape, 36 px Touch-Ziele, kein Hover-Kleber
- Autosave 7b: Pflicht bei state-relevanten Übergängen
- Keine KI im Produkt: Auftragstexte/Events/Hilfe vorab generieren, statisch ausliefern
- Inbox-Check vor jeder „Fertig"-Meldung
- Commits: `Logistik: <Kurzbeschreibung>`
## Komplexitätshinweis
Atlas schätzt 3050 Sessions für das Gesamtmodul. Phasenschnitte
sauber halten, nicht den ganzen Brocken auf einmal angehen.
---
## Tagesabschluss 2026-04-20 (00:20)
- Kickoff + Pflichtenheft gelesen
- Empfangsbestätigung + 4 Rückfragen an Atlas verschickt
- Atlas-Antworten gelesen, alle Entscheidungen quittiert
- Routing-Strategie (L1 Luftlinie×1.3 / L2-L3 Hand-Polylines / kein OSRM) bestätigt
- **Nächstes (sobald Gerüst steht):** `balance-matrix.md` → 7 Pflichttests in `test.html` → Headless-Runner-Skelett `runLevel(levelId, seed, strategy)`
- **Blocker:** keiner — wartet auf Atlas-Gerüst (~2 Sessions)
- **Offen für Thomas:** keine akute Frage, alles geklärt
## Tagesabschluss 2026-04-20 (00:55)
- Atlas-Gerüst empfangen (DB, Landing-Card, PHP-Wrapper, Sim-Skelette, Seeds)
- 7 Pflichttests in `test.html` statisch geprüft + via Python-Mathematik verifiziert
→ 22 von 22 Test-Cases bestehen rechnerisch, Browser-Bestätigung steht aus
- **Phase 0 v0.1 geliefert:**
- `App/sims/logistik/balance-matrix.md` v0.1
- `App/sims/logistik/headless-runner.html` (Skelett, alles SKIP)
- Atlas-Review angefordert
## Tagesabschluss 2026-04-20 (01:30) — Phase 0 v0.2 nach Atlas-Klarstellung
Atlas hat klargestellt: Phase 0 ist **meine** Arbeit, das Gerüst war
nur Vorarbeit. Konkrete Atlas-Forderungen alle abgehakt:
- **balance-matrix.md v0.2** — Rationale-Spalte je Parameter,
INSERT-SQLs für `game_levels`, Konsistenz-Checks an Atlas, Event-Wahrsch.
als Multiplikator umstrukturiert, `noop` zur Strategieliste
- **headless-runner.js** (NEU, vorher .html) — Vanilla-JS-Modul,
Browser+Node-kompatibel via UMD, Mulberry32-RNG, runLevel-Vertrag,
4 Strategien (`noop` lauffähig + `naive/greedy/optimal` als Stubs)
- **headless-runner.html** umgebaut zu dünner UI-Hülle (Logik in .js)
- **test.html erweitert** um:
- Test 8 — Edge-Cases (8 Cases: leere Polyline, getrennter Dijkstra-Graph,
Pfad zum Selbst, negative Hours, null-Werte, unbekannter Modus)
- Test 9 — Seeded-Random (4 Cases: Determinismus, verschiedene Seeds,
Range, Seed 0)
- Test 10 — Runner-Vertrag (10 Cases: noop läuft, reproduzierbar,
Stubs werfen kontrolliert)
- `group()` und Render auf async umgebaut, damit Test 10 (`await
runLevel`) sauber läuft
- Python-Verifikation der Mathematik: alle neuen Cases grün (10 von 10)
- Atlas-Review erneut angefordert mit aktualisierten Artefakten
**Nächstes (nach Review-OK):** Phase 1 — `engine.js` `tick()` Loop +
Leaflet-Karte mit 13 Seed-Locations
**Blocker:** Atlas-Review + Thomas-Browser-Test (test.html + headless-runner.html)
**Offen für Thomas:** einmal beide HTML-Seiten öffnen, Status melden