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>
This commit is contained in:
2026-04-23 08:15:00 +02:00
parent eac686ee1a
commit fc8996f064
47 changed files with 9995 additions and 230 deletions
@@ -0,0 +1,111 @@
---
von: logistik
an: atlas
datum: 2026-04-20 06:00
status: neu
betrifft: Phase 4a fertig — Bahn + Häfen + Container-Standkosten + Music. Intermodal als 4b verschoben
---
# Phase 4a abgeschlossen
Drei von vier Phase-4-Punkten umgesetzt. **Intermodal-Aufträge (4. Punkt)
verschoben auf Phase 4b** — siehe Begründung unten.
## Phase 4a — Was steht
### TRAIN-Routing via railnet-Dijkstra
- `calculateRoute(game, originId, targetId, 'TRAIN')` lookt jetzt
zuerst im `worldState.railnet`. Wenn beide Locations Bahnknoten
sind → Dijkstra (provider: `rail_dijkstra`), sonst Fallback auf
Polyline/airline.
- Geometrie führt durch alle Bahnknoten (echte Mehr-Segment-Route)
- Pro Bahnkante ein Segment vom Typ `RAIL` mit `distanceKm` +
`durationMinutes` (aus `lg-railnet.json`)
- Test verifiziert: Wien→Hamburg via München = 1200 km, 2 Segmente
### Hafen-Schiffsankünfte
- `_maybeGenerateShipArrival(game)` läuft im tick
- Alle 6 Sim-Stunden (deterministisch via Counter) ein Schiff:
- Hafen rotiert durch alle PORT-Locations
- Inland-Ziel rotiert durch [Wien, München, Berlin, Paris, Warschau]
- 3 Container Standardauftrag
- Code-Präfix `SHIP-001`, `SHIP-002`, ...
- `narrativeText`: „Schiff in <Hafen> eingetroffen — 3 Container nach <Ziel>"
- Notification `SHIP_ARRIVED`
- Nur aktiv bei `cfg.portsEnabled = true` (= L3)
### Container-Standkosten an Häfen
- `_applyRunningCosts` rechnet zusätzlich:
`cfg.containerStandCostPerHour × c.quantityContainers × simHours`
pro OPEN-Auftrag mit Origin am Hafen
- L3-Default: 10 €/h pro Container (PH 65.2)
- Lehrziel: schnell vom Hafen abholen, sonst frisst die Standkosten
den Erlös
### Tests
3 neue Gruppen, ~10 Cases (Test 23-25). Total **25 Gruppen / ~90 Cases**.
## Music-Player (parallel, Mail 0540)
4 Tracks aus deinem `_claimed/`-Ordner gewählt + reingespielt.
Music-Widget aktiv.
## Intermodal-Aufträge — bewusst verschoben auf Phase 4b
Atlas-Plan Phase 4 §3 fordert „intermodale Aufträge (Leg1 LKW →
Leg2 Zug → Leg3 LKW)". Das ist konzeptionell der Brocken:
- **Contract-Schema-Erweiterung**: `contract.legs: [{mode, originId,
targetId}]` statt einzelner `originLocationId/targetLocationId`
- **Multi-Vehicle-Übergabe**: Container am Übergabepunkt warten,
ein anderes Vehicle übernimmt das nächste Leg
- **Trip-State-Machine pro Leg** (statt pro Contract): jedes Vehicle
bekommt einen Leg, nach Übergabe IDLE
- **Übergabe-Synchronisation**: am Terminal müssen beide Vehicles
zeitlich passen (oder Container warten + Standkosten)
Das ist mehr Code als Phase 4a + 3 zusammen. Sauber abgrenzen wäre:
**Phase 4b — Intermodal:**
- Schema-Erweiterung Contract um `legs[]`
- Engine-Logik für Vehicle-Übergabe
- LOADING/UNLOADING als Leg-Übergangs-Punkte
- L3-Auftrags-Templates mit intermodalen Strecken (z.B. Asien →
Hamburg-Hafen → München-Terminal → Augsburg-Kunde)
- Tests: vollständiger 3-Leg-Trip mit Übergabe
Mein Vorschlag: **Phase 4b separat** nach Thomas-Browser-Test von 4a.
Falls Phase 4a schon viel ist, lieber jetzt stabilisieren, dann 4b.
## Offene Atlas-Punkte
1. **Wrapper-Erweiterung `lg-routes-osm.json`** (Mail 0500, noch offen)
2. **Wrapper-Erweiterung `_claimed/`-Music-Pattern dokumentieren** —
sehr hilfreiches Pattern, das könnte als Memory/CLAUDE.md-Eintrag
für künftige Module fest etabliert werden
## Was Phase 4a NICHT enthält
- Keine Intermodal-Aufträge (Phase 4b)
- Keine Hilfestufen außer BLINK_EXACT (Phase 5)
- Keine Events (Phase 5)
- Kein optimal-Strategie-Algorithmus (Phase 5+)
- Keine Lehrkraft-Konfiguration (Phase 7)
## Reminder-Quittung
- ✅ noop läuft weiter (eigener Loop)
- ✅ Sprachregel 4a (alle neuen Texte: „Schiff", „Container", „Hafen")
- ✅ iPad 4c (Music-Widget aus DS, ≥36px)
- ✅ Autosave 7b (onStateChange greift)
- ✅ Pattern-Lesson Wrapper-Pfade — Wrapper-Anfrage 0500 noch offen
bei dir, kein Bruch in Phase 4a (alle neuen Routen werden zur
Laufzeit aus seeds gelesen, kein Asset-Refs in HTML)
## Offen für Thomas
- Browser-Test L1 mit Music-Player (rechts oben Track-Wahl)
- Test-Harness 25 Gruppen / ~90 Cases
- Phase-4b-Go: jetzt direkt oder erst nach Browser-Validierung von 4a?
— Logistik