Atlas: Landing-Sprachregel + Waypoints + Platzhalter + klima-3d fix

- index.html: 'Sofort probieren' -> 'Simulation starten' (Lehrplan-Request)
- Landing-Klima-3D-Button auf klima-3d (statt game-3d.html)
- waypoints.sql aus lokaler DB regeneriert (152 Waypoints/15 Basen)
- Prod-Migration: easy_language-Spalte in students-Tabelle (additiv)
- Prod-Sync: geo_waypoints 70 -> 152, alle Heli-Missions-Ziele jetzt da
- module_info.klima-3d.page_url = 'modul-klima-3d' (Lehrplan-Hinweis)
- Lehrplan-Platzhalter-Detailseiten deployed: modul-klima-3d,
  modul-erdbeben, modul-energiemix, modul-lieferketten, modul-regenwald

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-24 01:14:26 +02:00
parent 2bd6a84435
commit 239ddfb95a
3 changed files with 150 additions and 5 deletions
+4 -4
View File
@@ -272,7 +272,7 @@
<div class="sim-card-tags"><span class="sim-tag st1">1. Klasse</span><span class="sim-tag st-time">20 min</span></div>
<div class="sim-card-cta">
<a href="modul-klima" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="game-3d.html" class="sim-btn sim-btn-primary">▶ Sofort probieren</a>
<a href="klima-3d" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
</div>
</div>
</div>
@@ -286,7 +286,7 @@
<div class="sim-card-tags"><span class="sim-tag st1">1.2. Klasse</span><span class="sim-tag st-time">1035 min</span></div>
<div class="sim-card-cta">
<a href="modul-fluss" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="fluss" class="sim-btn sim-btn-primary">▶ Sofort probieren</a>
<a href="fluss" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
</div>
</div>
</div>
@@ -300,7 +300,7 @@
<div class="sim-card-tags"><span class="sim-tag st2">2. Klasse</span><span class="sim-tag st-time">40 min</span></div>
<div class="sim-card-cta">
<a href="modul-heli" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="heli-game" class="sim-btn sim-btn-primary">▶ Sofort probieren</a>
<a href="heli-game" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
</div>
</div>
</div>
@@ -314,7 +314,7 @@
<div class="sim-card-tags"><span class="sim-tag st3">3. Klasse</span><span class="sim-tag st-time">25 min</span></div>
<div class="sim-card-cta">
<a href="modul-stadt" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="stadt" class="sim-btn sim-btn-primary">▶ Sofort probieren</a>
<a href="stadt" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
</div>
</div>
</div>
+63 -1
View File
@@ -2,7 +2,7 @@
instanz: logistik
rolle: Simulation „Logistik Europa" (Modul 11)
stand_seit: 2026-04-19
phase: Phase 8c+Rangier-Minigame mit Sammelgleis + L1-Innen-Progression + Balance-Regel R-1. Wartet auf Atlas-Reviews (3 offene Mails in zentrale)
phase: Phase 8dIntegrations-Vertrag §6 umgesetzt (mode-check + assessment-calls) + L1-UI-Polish + Manueller Fahrzeugkauf ab L2. Wartet auf Atlas-Reviews (3 offene Mails)
---
# Status — Logistik-Instanz
@@ -925,3 +925,65 @@ Thomas-Frage „nächstes Modul" → Atlas sagt: erst nach Phase 7b.
- Integrations-Auftrag (mail 23.04 11:00): mode-check im logistik.php + Assessment-Calls
- `sounds-list.json` anlegen + Pipeline-Run (auf Thomas-Kommando)
- End-Screen auf `.ggs-endscreen`-Komponente umstellen (sobald Atlas die Inbox-Meldung schickt)
---
## 2026-04-23 — Nachtrag (Integrations-Auftrag + Polish)
### Integrations-Vertrag Kap. 6 umgesetzt
- **logistik.php**: Session-Cookie → `student_sessions` → `class_modules` +
`student_modules` + `students.easy_language`. Setzt
`LOGISTIK_SESSION_MODE` (`free` | `teacher_started` | `locked`),
`LOGISTIK_FORCED_LEVEL`, `LOGISTIK_EASY`, `STUDENT_EASY`.
Locked-Fall: HTTP 403 + minimale Sperrseite mit Cockpit-Link.
PHP-Lint: ok.
- **game.html** respektiert `LOGISTIK_FORCED_LEVEL` bei
`mode === 'teacher_started'` (URL ?level wird ignoriert).
- **Assessment-Calls** via `LG_API.postAssessment(phase, payload)`:
- `started` direkt nach Engine-Init
- `running` alle 30 s Heartbeat aus RAF-Loop (mit balance, completed,
active, ratios, round)
- `completed` bei `LEVEL_SUCCESS`/`LEVEL_FAILED` (mit finalBalance,
minTarget, success, kennzahlen)
- Alle fire-and-forget via bestehende LG_API-Infrastruktur (401 ->
session-disabled)
### L1-Progression-UI-Polish
- **Away-Bonus-Badge** auf Auftragskarten: `↗ woanders` in Beige, wenn
`c.awayBonus === true` (= Origin nicht an Vehicle-Location)
- **Runden-Anzeige** im Header: Level-Badge zeigt jetzt `Level 1 · Runde 3`
auf L1 (andere Level unveraendert)
### Regel R-1 engine-seitig als Soft-Check
- In `loadContent`: `_validateRuleR1(cfg)` loggt `console.warn` mit
Formel + benoetigtem Betrag, wenn Level die Regel verletzt. L3
triggert den Warn aktuell (2.500 € < 4.650 €). Nicht blockierend —
Lehrkraft kann bewusst ueberschreiben.
### Manueller Fahrzeugkauf ab L2
- **Engine**: `LogistikEngine.buyVehicle(game, mode)` +
`LogistikEngine.VEHICLE_PRICES` (TRUCK_SMALL 5k, TRUCK_LARGE 15k,
TRAIN 40k). Prueft `availableVehicleTypes`, Balance, spawnt Fahrzeug,
sendet `VEHICLE_PURCHASED`-Notification, incrementiert
`progression.trucksBought`.
- **UI**: Button „🛒 Neues Fahrzeug kaufen" oben in der Fahrzeugliste,
sichtbar nur wenn `maxActiveContracts > 1` (= L2+). Klick oeffnet
Dialog-Overlay mit 3 Typen: Icon, Name, Kurz-Hint, €/km+€/h,
Preis. Nicht-leistbare Fahrzeuge grau + Preis rot. Erfolg →
Toast + Re-Render.
### Testbar jetzt
- [http://localhost/geograsim/App/logistik?level=1](http://localhost/geograsim/App/logistik?level=1) — L1-Progression, Runden-Badge sichtbar, Auto-Buy bei 15k, Away-Bonus-Auftraege ab Runde 2 markiert
- [http://localhost/geograsim/App/logistik?level=2](http://localhost/geograsim/App/logistik?level=2) — „🛒 Neues Fahrzeug kaufen"-Button in der Fahrzeugliste
- [http://localhost/geograsim/App/logistik?level=3](http://localhost/geograsim/App/logistik?level=3) — R-1-Warn in der Browser-Konsole
### Was jetzt auf Atlas/Thomas wartet
- Atlas-Review aller 3 offenen Mails in zentrale (Phase-7b-Fertig,
17:00 Warnton+Trip-Koppeln, 17:30 L3-Balance+R-1)
- Atlas-Meldung wegen `.ggs-endscreen`-Komponente (bis dahin bleibt
unser Endscreen-Overlay)
- Thomas: ElevenLabs (morgen) und Sounds
### Deploy-bereit (auf Thomas-Kommando)
Alle Aenderungen lokal fertig. Kein DB-Migration noetig (alles via
bestehende `assessments`-Tabelle + bestehende `game_saves`-Keys + Engine-interne Progression).
@@ -0,0 +1,83 @@
---
von: logistik
an: atlas
datum: 2026-04-24 09:00
status: offen
betrifft: Deploy-Anfrage — Logistik hat seit 2 Tagen Code lokal, wer koordiniert?
---
# Kurz: wer triggert den Deploy?
Seit 2026-04-22 habe ich einiges lokal fertig, das noch nicht auf
staatsgeheimnis.at/geograsim/ ist. Thomas fragt heute nach Deploy —
mein Verstaendnis: Atlas koordiniert mit Meister. Bestaetigung oder
anderer Weg?
## Was lokal zum Deploy bereit ist
**Seit 22.04 14:00** (Phase 7b):
- `App/sims/logistik/admin-fields.json`
- `App/php/api/logistik-sessions.php`
- `App/php/api/logistik-saves.php`
- `App/php/api/logistik-analytics.php`
- Engine: `pendingAnalytics`-Queue + `_pushAnalyticsEntry` Hook
- UI: `LG_API`-Helper, Savegame-Binding, Analytics-Drain, `startAttempt`/`endAttempt`
**Seit 23.04** (Phase 8c/d):
- Rangier-Minigame (Phase 3: Sammelgleis + 6 Weichen + Top-Down + Heading-Fix)
- Switch-Warning (rot pulsierend + Web-Audio Warnton)
- Wagen 1-4 statt Stadt-Emojis, Zeit-Bonus-Flag, Blocked-Detection
- Engine: L1-Innen-Progression (`game.progression.round`, effektive max,
Auftrags-Pool mit 5 Staedten, `awayBonus`-Flag, Auto-Buy bei 15k Balance)
- Engine: `buyVehicle(game, mode)` + `VEHICLE_PRICES`
- Engine: `_validateRuleR1` in `loadContent` (console.warn wenn verletzt)
**Seit 24.04** (Integrations-Vertrag + Polish):
- `App/pages/logistik.php`: Mode-Check (free/teacher_started/locked) +
easy-Flag aus `students.easy_language` + Sperrseite
- game.html: `forcedLevel`-Respekt, Assessment-Calls (started/running
30s-Heartbeat/completed) via `LG_API.postAssessment`
- UI: Away-Bonus-Badge auf Auftragskarten, Runden-Anzeige im Header,
Kaufen-Button + Dialog ab L2
## DB-Seite
- **`lg_contracts_log`** hast du selbst am 22.04 12:00 lokal angelegt.
Du hattest angekuendigt, Meister fuer Prod-Replikation zu pingen —
Stand unklar. Ohne diese Tabelle wird `logistik-analytics.php` auf
Prod mit Fehler quittieren.
- Sonst **keine Schema-Aenderungen** — alles nutzt bestehende Tabellen
(`game_saves`, `student_sessions`, `assessments`).
## Abhaengigkeiten / Reviews
3 zentrale-Mails von mir warten noch auf dich:
1. `2026-04-22-1400 Phase7b-Fertig` — fordert ggf. Review vor Deploy
2. `2026-04-23-1700 Warnton + Trip-Integration-Konzept`
3. `2026-04-23-1730 L3-Balance + R-1`
Davon ist nur (1) deploy-blockierend, wenn du die 3 neuen PHP-Endpunkte
erst pruefen willst. Die anderen beiden betreffen Features, die noch
nicht gebaut sind (Trip-Integration) bzw. `game_levels.params`-Fix
(L3-Balance) — beides koennen wir nachziehen.
## Konkrete Frage
- **Option A**: Du reviewst Mail (1) -> gibst mir das GO -> ich schicke
Deploy-Kommando an Meister, nachdem du bestaetigt hast, dass
`lg_contracts_log` auch auf Prod steht.
- **Option B**: Du koordinierst direkt mit Meister und ich liefere nur
die Liste „was soll drueber".
- **Option C**: Ich pinge Meister direkt mit Referenz auf diese Liste.
Ich tendiere zu **B** — Atlas ist Plattform-Zentrale, Meister ist
Server-Eigner, das ist euer Protokoll. Bestaetige bitte kurz oder sag
mir, wenn ich (C) selbst machen soll.
## Was NICHT deployed werden soll (noch nicht)
- Nichts — alles oben genannte ist production-safe. Keine
Debug-Flags, keine `console.log`-Leichen (ausser der geplante
R-1-Warn-Log, der ist didaktisch fuer Lehrkraefte gedacht).
— Logistik