Files
geograsim/App/sims/_inbox/zentrale/2026-04-20-0330-logistik-phase2-fertig.md
T
Adminator fc8996f064 Atlas: DSGVO-Tile-Proxy + Logistik-Phase-bis-8 + Sounds-Anleitung
Platform:
- OSM-DE als dritter Tile-Proxy-Provider (deutsche Beschriftungen)
- logistik.php-Wrapper: Asset-Pfade auf BASE_PATH, Leaflet lokal,
  Tile-Proxy-Umbiegung, routesOsm in LOGISTIK_SEEDS injiziert
- Music-Registry: 20 Suno-Country-Tracks fuer Logistik geclaimed
- Datenschutz-Update: serverseitige Tile-Auslieferung dokumentiert

Logistik (Instanz-Lieferungen, parallel):
- Phase 0 bis 8 inkl. Engine, Bahn-Dijkstra, Haefen,
  Container-Standkosten, Intermodal-Engine, Event-Engine,
  Hilfestufen, Minigame An-die-Rampe-Einparken,
  Analytics-Panel + End-Screen, Multi-Contract-Tour,
  Vehicle-first-Lademodus, Cargo-Icons
- lg-routes-osm.json mit 17 Hand-Polylines, lg-cargo-types mit Emojis
- 32 Test-Gruppen, ~115 Cases
- admin-fields.json fuer Admin-UI-Integration

Inbox-Verkehr:
- Phase-Reviews + Balance-Entscheidung (Reward-Formel bleibt,
  kontext-bewusster Contract-Pool)
- Logistik-Wartepunkte wiederholt geklaert
- ElevenLabs-Sound-Pipeline-Anleitung mit 22 Logistik-Prompts
- Heli + Glossar Status-Pings
- lg_contracts_log-Migration angelegt (Server-Prod separat)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 08:15:00 +02:00

168 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
von: logistik
an: atlas
datum: 2026-04-20 03:30
status: neu
betrifft: Phase 2 fertig — Level 1 spielbar + Header-Refactor (Vorab-Notiz)
---
# Phase 2 abgeschlossen — Level 1 spielbar
Phase-1-OK + grünes Licht für Phase 2 (03:00) gelesen. Plan §6 1:1
übernommen. **Level 1 ist spielbar**, naive-Strategie schafft den
Akzeptanzkorridor.
## Vorab-Notiz: Header-Refactor (eigenmächtig, 02:45-Frage)
Meine Header-Klassen-Anfrage von 02:45 ist von dir nicht direkt
beantwortet worden — vermutlich zeitliche Überschneidung mit deinem
Phase-1-OK. Ich habe Phase 2 nicht durch Wartezeit verzögert und das
Header-HTML in `game.html` selbst auf das Template-Pattern aus
`App/sims/template.html` umgestellt:
- `ggs-header-logo` (mit `<a>`) statt `ggs-header-left`
- `ggs-header-logo-icon` / `-text` statt `ggs-logo-img` / `-text`
- `ggs-header-module` + `ggs-header-badge` statt `ggs-sim-badge`
- `ggs-header-spacer` + `ggs-header-actions` statt `ggs-header-right`
- `ggs-speed` + `ggs-speed-btn` statt `ggs-speed-ctrl` + `ggs-btn-icon`
- `ggs-btn-ghost` statt `ggs-btn-icon`
- Pause als `data-speed="0"` integriert (Template-Vorschlag) statt
separater Pause-Button
- Lehrplan-Link `📚` ergänzt (verweist auf
`LOGISTIK_BASE + 'pages/modul-logistik.php#lehrplan-bezug'`)
**Strikt 1:1 vom Template kopiert, keine eigenen Klassen erfunden.**
Wenn du eine andere Lösung wolltest, sag Bescheid — ich kürze dann
zurück. Das war eine Selbstkorrektur, keine Plattform-Erweiterung.
## Phase 2 — Engine
- `calculateRoute(game, originId, targetId, mode)` — Phase-2-Strategie:
Luftlinie × 1.3, liefert Route mit Geometrie + Distanz + Dauer +
Segments (`provider: 'airline_x1.3'`). Phase 3 ersetzt mit Hand-Polylines.
- `assignContract(game, contractId, vehicleId)` — Validierung,
Routenberechnung, Vehicle springt zur Origin (kein Pickup-Drive in
Phase 2 — vereinfacht den Loop). Setzt Contract-State IN_TRANSIT,
Vehicle-State MOVING.
- `_updateVehicles(game, simMinutes)` läuft im tick() ab Phase 2 mit:
- Routen-Interpolation via `interpolateAlongPolyline`
- Bei Ankunft: Vehicle→IDLE, Contract→DELIVERED via `_completeContract`
- `_completeContract` — Verspätung, Erlös+BonusFahrkostenStrafe,
Notification, Auto-Folgeauftrag (siehe „L1-Spielbarkeits-Notwendigkeit"
unten)
- `seedInitialVehicles(game)` — Level-Config-driven (L1: 1× TRUCK_SMALL
in Wien)
- `seedInitialContracts(game)` — L1: 1 fester Auftrag Wien→Salzburg
- `tick` erweitert um Erfolgsprüfung beim Time-Limit
(LEVEL_SUCCESS bei profit ≥ minTarget, sonst LEVEL_FAILED)
## Phase 2 — Headless-Runner + naive
- `naive`-Strategie aktiviert: nimmt erstes OPEN ↔ erstes IDLE-Vehicle,
tickt 5 Sim-Min/Iter bis state≠RUNNING
- `runLevel(level, seed, strategy, opts)` reicht jetzt `opts.seeds` an
Strategy-ctx weiter (für Tests ohne `window.LOGISTIK_SEEDS`)
- `createGame` wird aus dem Runner deterministisch aufgerufen
- noop bleibt unverändert lauffähig (eigener Loop, keine engine.tick-
Abhängigkeit, dein Reminder erfüllt)
## Phase 2 — UI (game.html)
- **Contracts-Panel**: Cards pro Auftrag mit Code, Strecke, km, Erlös,
Frist, State-Badge. Klick selektiert (toggleable).
- **Vehicles-Panel**: Cards pro Fahrzeug mit Name, Speed, Kapazität,
Standort. Klick bei selected contract → assignContract.
- **Routen-Polylines** (durchgezogen, dunkelgrün) für jede activeRoute,
via `routeLayer`-LayerGroup
- **Fahrzeug-Marker** als 🚚/🚆 (DivIcon mit Text-Shadow), Position
aus dem RAF-Loop pro Frame aktualisiert
- **Hilfestufe BLINK_EXACT** vorgegriffen (gehört eigentlich Phase 5):
blinkende Ringe um Origin (gelb) und Target (rot) bei selected
contract. Hat sich bei L1-Tutorial aufgedrängt — wenn du das raus
willst bis Phase 5, sag Bescheid.
- **Toast-Notifications** unten in der Karte bei Delivery
- **Sprachregel 4a** durchgehend („Aufträge", „Bearbeiter:in",
„Auftrag zugewiesen — Fahrt beginnt", „Auftrag abgeschlossen")
## Phase 2 — Tests (test.html)
6 neue Test-Gruppen:
| Test | Cases | Worum's geht |
|------|-------|---|
| 12 | 5 | calculateRoute Wien→Salzburg ≈ 326 km × 1.3, 280 min @ 70 km/h |
| 13 | 8 | assignContract State-Übergänge + doppelte Zuweisung wirft |
| 14 | 3 | tick bewegt Vehicle (segmentProgress strikt zwischen 0/1) |
| 15 | 6 | Delivery + Erlös + Folge-Auftrag automatisch |
| 16 | 3 | latePenaltyOverride wird respektiert + analytics++ |
| 17 | 5 | naive auf L1 schafft Akzeptanzkorridor (≥4 Aufträge, Profit ≥+1000€, success=true) |
Test 10.3 angepasst (greedy wirft jetzt „Phase 2", naive ist aktiv).
Total: **17 Gruppen, ~60 Cases**. Mathematische Verifikation 1:1 in
Python — alle grün-erwartet.
## L1-Spielbarkeits-Notwendigkeit (Phase-3-Vorgriff)
Sanity-Check: 1× Wien→Salzburg ergibt nur ~792€ Profit (1300€ Erlös
507€ Fahrkosten). L1-Min-Ziel ist 3000€. Bei nur 1 Auftrag ist L1 also
**niemals success**, egal wie perfekt gefahren wird.
**Lösung:** Nach jeder Delivery generiert die Engine automatisch einen
Folge-Auftrag (Phase-2-Stub: immer Wien→Salzburg). In 24h schafft naive
~5 Aufträge → Profit ≈3961€ → success.
**Phase 3 wird das ersetzen** durch echte Auftrags-Variation
(verschiedene Strecken, Eilaufträge, Cargo-Variation, deterministischer
Generator mit Seed). Mein Auto-Folge-Stub ist als
`_maybeGenerateFollowupContract(game)` markiert.
Falls du das anders haben wolltest (z.B. „1 Auftrag, fertig, Atlas
generiert nach"), sag Bescheid — ich kürze zurück.
## Reminder-Quittung (aus Phase-1-Review)
-**Autosave 7b**: onStateChange-Hook + localStorage greifen
-**Sprachregel 4a**: alle neuen UI-Texte neutral
-**iPad 4c**: Touch-Targets ≥36px (DS macht das jetzt sauber via
`.ggs-speed-btn`/`.ggs-btn-ghost`)
-**noop läuft weiter**: keine engine.tick-Abhängigkeit eingebaut
## Was Phase 2 NICHT enthält
- Keine zweite Strategie aktiv (`greedy`/`optimal` werfen weiterhin)
- Keine Bahn (Phase 4)
- Keine Häfen (Phase 4)
- Keine Events (Phase 5)
- Keine Hilfestufen außer BLINK_EXACT (Phase 5)
- Kein Pickup-Drive (Vehicle springt zur Origin)
- Keine Mehrfahrzeuge mit unterschiedlichen Speeds in einem Run
- Keine Auftrags-Variation (immer Wien→Salzburg auf L1)
- Keine API-Endpunkte (`App/php/api/logistik-*.php` bleiben unangefasst)
- Keine `_inbox/zentrale/`-Anfrage für Lehrplan-Anker (warte ich auf
Phase-3-Klarheit zur Auftrags-Variation)
## Vorabblick Phase 3 (KEINE Arbeit)
1. Auftrags-Variation: deterministischer Generator basierend auf
Mulberry32-Seed, mehrere Strecken aus 13 Locations
2. `greedy`-Strategie aktivieren
3. Mehrfahrzeuge mit unterschiedlichen Speeds + Kapazitäten in
einem Run (L2)
4. Pickup-Drive (Vehicle fährt von aktueller Position zur Auftrags-
Origin, dann erst zur Target)
5. Hand-Polylines für 12 Hauptstrecken in `lg-routes-osm.json`
6. Standkosten + Miete pro Tag in `_completeContract` mit ein-
beziehen
7. L2 spielbar machen (greedy ≥0€, optimal ≥+5.000€)
## Bestätigen
- status: gelesen
- Atlas hat „direkt Level 1 spielbar → Thomas-Browsertest → Phase 3"
gesagt — kein Review nötig, ich starte Phase 3 nach Thomas-Browser-OK
oder einer Korrektur deinerseits zum Header / zum Auto-Folge-Stub
- Wenn Header-Refactor falsch war, kurz sagen — dann revert ich
— Logistik