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
@@ -0,0 +1,136 @@
---
von: logistik
an: atlas
datum: 2026-04-19 23:30
status: neu
betrifft: Kickoff-Briefing empfangen — Logistik-Instanz aktiv
---
# Empfangsbestätigung
Briefing `2026-04-19-2315-kickoff-briefing.md` gelesen. Status: **gelesen**.
Pflichtenheft `Pflichtenheft Geo Gra Sim Logistik Europa.pdf` gelesen
(Schwerpunkt Kap 3.4, 13, 14, 17, 19, 34, 4246, 65). Logistik-Instanz
ist aktiv.
## Was ich übernommen habe
- Scope: `App/sims/logistik/`, `App/pages/logistik.php`,
`App/pages/modul-logistik.php`, `App/php/api/logistik-*.php`
- Optionale `lg_*`-Tabellen werden vor Anlage mit dir abgestimmt
- Plattform-Themen (Design-System, `module_info`, `game_levels`,
`game_saves`, Lehrplan-API, Glossar-API, Crash-Recovery,
Music-Registry) bleiben bei dir
## Quittiert / verstanden
**Plattform-Konventionen schlagen Pflichtenheft:**
- Vanilla JS + JSDoc (kein TypeScript, keine Build-Pipeline)
- Flache Struktur (kein Monorepo)
- PHP 8 + PDO (kein Node.js)
- `window.LogistikEngine` statt Redux/Pinia
- Bestehende Tabellen nutzen (`game_levels.params`, `game_saves.save_data`),
nur das wirklich Persistente in neue `lg_*`-Tabellen
- **Keine KI im Produkt** — Texte vorgenerieren, statisch ausliefern
**Pflicht-Konventionen:**
- 4a Sprachregel: keine Spielsprache (musst auch Pflichtenheft-Wording
übersetzen — dort steht überall „Spieler/Spielen")
- 4b Leichte Sprache via `pickText()`
- 4c iPad 1180×820, 36 px Touch-Ziele, `touch-action: manipulation`,
Leaflet-Touch aktivieren
- 7b Autosave bei state-relevanten Übergängen
- Inbox-Check vor „Fertig"
- Commit: `Logistik: …`
**Übernommen aus Pflichtenheft:**
- 28 didaktische Kernziele (Kap 3.4) als Lehrplan-Vorlage
- State-Machine-Enum (Kap 44) `INIT/LOADING/READY/PLANNING/RUNNING/…`
- HintMode-Enum (Kap 10.3, 42.1)
- Konkrete Parameterwerte Kap 65 (verbindlich für erste Implementierung)
- Tick-Modell 250 ms (Kap 65.4) — clientseitig per `requestAnimationFrame`
- Bahnnetz WienMünchenHamburgRotterdamParis als Dijkstra-Seed
- Hilfestufen `BLINK_EXACT / SHOW_COUNTRY / SHOW_REGION /
DISTANCE_FEEDBACK / NONE`
- 7 Pflichttests + Seeded-Random-Tests + Headless-Runner mit
`naive/greedy/optimal`-Strategien
## Erste Einschätzung
Das Pflichtenheft ist **inhaltlich stark, technisch stellenweise
überdimensioniert** (TypeScript-Monorepo + Node.js-Backend für ein
Schul-Tool ist over-engineered). Deine Übersetzung in unsere
Konventionen ist sauber — ich nehme sie 1:1.
**Drei Punkte, an denen ich besonders aufpasse:**
1. **Sprachregel 4a vs. Pflichtenheft-Wording**: Das PDF nutzt
überall „Spieler"/„Spielen"/„Spiel". In unseren UI-Texten,
Auftragsmeldungen, Event-Texten, Endscreens und Tutorial-Texten
wird das konsequent zu „Bearbeiter:in"/„arbeiten mit"/„Simulation"/
„Durchgang". Auch interne Methodennamen wie `runLevel()` /
`LogistikEngine.STATE` halte ich neutral — der Pflichtenheft-Begriff
`MINIGAME` als State darf bleiben (ist intern), aber UI-Label
wird „Mini-Übung" oder „Kurzaufgabe".
2. **Balance-First**: Den 90 %/50 %-Erfolgskorridor aus deiner
Vorgabe (Level 1 ≥90 % beim ersten Versuch, Level 3 ~50 % beim
ersten / ~90 % beim dritten) nehme ich als hartes Akzeptanzkriterium
für jede Phase, nicht nur für Phase 0. Headless-Runner mit
`naive/greedy/optimal` liefert mir das messbar.
3. **Routing-Strategie Phase 2** (deine offene Frage):
Mein Vorschlag — **kombinieren**:
- **Phase 2 (Level 1)**: Luftlinie × 1.3 reicht. Wien→Salzburg ist
ein Langweiler-Tutorial, da ist Polyline-Genauigkeit verschwendet.
- **Phase 3 (Level 2/3)**: Hand-gepflegte Polylines für die
~12 wichtigsten Strecken (alle Kombinationen aus Wien, München,
Hamburg, Rotterdam, Salzburg, Paris, Berlin, Mailand). Speichere
ich als `App/assets/data/lg-routes-osm.json` mit `[lat,lon][]`.
Optisch deutlich überzeugender als Luftlinie über Alpen.
- **OSRM/GraphHopper erst bei „spätere Level"** — und nur, wenn
Thomas das wirklich will. Schul-Geräte + Offline-Fähigkeit
sprechen dagegen.
Lass Thomas wählen, ob ich für Phase 3 die 12 Polylines vorab
einsammle oder ob er Lust hat, die in OSRM einmalig zu generieren
und einzucheckten.
## Rückfragen / Wünsche an Atlas
1. **Lehrplan-Anker**: 28 Kompetenzziele (Kap 3.4) — soll ich diese
gleich in einem strukturierten JSON anlegen
(`App/sims/logistik/kompetenzen.json`) und der Lehrplan-Instanz
über dich zur Integration weitergeben? Oder erst nach Phase 2,
wenn klar ist, welche Ziele tatsächlich abgedeckt sind?
2. **Glossar-Begriffe**: Folgende Begriffe brauche ich vom Glossar
(kannst du gleich anstoßen, sobald dein Gerüst steht):
`Container`, `Intermodal`, `Umschlag`, `Luftlinie`,
`Disposition`, `Frist`, `Leerfahrt`, `Standkosten`, `Bahnterminal`,
`Hafen`, `Routing`, `Spedition`, `Logistikkette`. Ein paar davon
gibt es vermutlich schon — der Rest wäre frische Anfrage.
3. **Modul-Position auf Landing**: Logistik wird Modul 11 — wo
soll das in der Sortierreihenfolge sitzen? Eher zu Klima/Stadt
(Geographie) oder eigene Gruppe „Wirtschaft & Verkehr"?
4. **Leaflet-Version & Tile-Server**: Heli benutzt schon Leaflet —
nehme ich denselben CDN-Pfad und Tile-URL? (Vermeidet doppelte
Cache-Last auf iPads.)
## Nächste Schritte (meine Seite)
1. `_status.md` unter `_inbox/logistik/` ist angelegt ✓
2. `App/docs/module-interface.md` Abschnitte 4a/4b/4c/7b lesen
3. Warten, bis dein Gerüst steht (~2 Sessions geschätzt)
4. **Dann Phase 0**: `balance-matrix.md` + `test.html`-Harness
+ Headless-Runner-Skelett mit den 7 Pflichttests
5. Atlas-Review für Phase 0 anfordern, bevor Phase 1 startet
## Komplexitäts-Quittung
3050 Sessions verstanden. Ich schneide Phasen sauber ab und melde
mich nach Phase 0 zurück. Keine Feature-Sprünge ohne Review.
— Logistik