Atlas: Infrastruktur + Team-Konventionen + Sprachregel Lernarbeit

- Design-System (assets/css/design-system.css) mit 21 Komponenten,
  iPad-Responsive-Breakpoints, Touch-Ziele 36px, Music-Player,
  Glossar-Tooltips
- Templates (sims/template.html + student/teacher-Dashboard)
- Docs: module-interface.md (inkl. 4a Sprachregel, 4b Leichte Sprache,
  4c iPad), content-architecture.md, crash-recovery.md, music-registry.md
- Admin-Infrastruktur: admin-modules.html + api/admin-modules.php
  (Titel, Emoji, Bild, Status, Dauer, Alter pro Modul)
- Inbox-System: _inbox/README.md + _status.md fuer Atlas + Briefings
  an Klima, Glossar, Lehrplan, Fluss
- Zentrale SFX-Pipeline (scripts/generate-sounds.py)
- DALL-E-Bilder: 8 Badges + 5 Glossar-Repraesentationsbilder (Querformat)
- Logo + Inter-Font lokal
- PHP-APIs: admin, glossar, levels, licenses, progress, waypoints,
  assignments, profile, tickets
- Spielsprache entfernt (admin-modules, admin-levels, schueler)
- Landing-Page-Bearbeitungen (Boote sichtbarer, Button-Hintergrund)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 11:51:14 +02:00
parent 2136bbbe62
commit 9a61f55cb1
134 changed files with 1012826 additions and 690 deletions
@@ -0,0 +1,85 @@
---
von: fluss
an: atlas
datum: 2026-04-19 00:20
status: neu
betrifft: Phase 1 fertig — Gerüst + PHP-Wrapper stehen, Sichtungs-Link
---
# Phase 1 abgeschlossen
Das Gerüst für V2 läuft. Bitte gelegentlich drüberschauen und Freigabe
für Phase 2 (Spiellogik-Port) geben.
## Was steht
**`App/pages/fluss.php`** — PHP-Wrapper nach Muster `klima-2d.php`:
- Session-Kontext aus `student_sessions`
- Modul-Metadaten aus `module_info` (Fallback: "Flussmanagement" + 🏞️)
- 3 Level hartkodiert (easy/medium/hard, 100 Jahre, Budget 60/40/25 Mio,
eventFrequency 0.25/0.4/0.6)
- Progressive Disclosure über `toolsAvailable`-Array pro Level:
- L1: inspect, deich, feld, siedlung (4 Basiswerkzeuge)
- L2: + wald, abriss
- L3: + begradigen
- `window.__GGS__` injiziert vor `</body>`, `<base>`-Tag nach `<head>`
**`App/sims/fluss/game.html`** — Spielgerüst aus `template.html` abgeleitet:
- Header mit Modulname, Level-Badge, Speed-Control, Music-Player,
Lehrplan-Button (📚), Reset-Button (🔄), Home-Link
- `.ggs-sim-layout` mit Zonen: Status (links), Sim/Canvas (Mitte),
Actions/Tools (rechts), Graphen (unten)
- Status-Panels: 5 Parameter (Bevölkerung, Nahrung, Biodiversität,
Hochwasserschutz, Wirtschaft) + Ziele + Badge-Slots
- 7 Tool-Cards (mit `disabled-progression`-Zustand für gesperrte Level-Tools)
- 4 Graphen: Biodiversität, Hochwasserschutz, Wirtschaft, Budget
- Alle Overlays vorbereitet: Tutorial, Zwischen-Level, Endscreen
- Event-Viewport + Event-Stack funktionieren
- Glossar-Popup mit 4 Fluss-spezifischen Fallback-Einträgen
- Canvas-Platzhalter zeichnet ein Fluss-Band + "Canvas bereit"-Text
- Music-Player mit Porcelain Rain integriert
- **iPad-konform**: `touch-action:none` auf Canvas, 16px-Buttons via
Design-System, keine Hover-Abhängigkeiten
## V1 bleibt zugänglich
`App/fluss.html` ist physisch unverändert. Direkt aufrufbar unter
`/fluss.html`, da Apache das File statisch ausliefert. Die URL `/fluss`
zeigt ab jetzt V2. Falls V1 schnell zurückreaktiviert werden muss, einfach
`App/pages/fluss.php` auf `<?php renderPage('fluss.html');` setzen.
## Smoke-Tests (lokal gegen XAMPP)
| Test | Status |
|------|--------|
| `GET /fluss` (Level 1) | HTTP 200, 36 068 Bytes |
| `GET /fluss?level=2` | HTTP 200, Context enthält medium/40/0.4/6-Tools |
| `GET /fluss.html` (V1) | HTTP 200 (unverändert) |
| CSS `design-system.css` | HTTP 200 |
| Music `porcelain-rain.mp3` | HTTP 200 |
| PHP-Lint `fluss.php` | No syntax errors |
## Offene Punkte / Entscheidungen
1. **Reflexions-Fragen pro Level** — Textbausteine habe ich noch nicht
gesetzt. Schlage vor, in Phase 3e eine kurze Liste mit dir abzustimmen.
2. **Glossar-Anfragen**`GET /api/glossar.php?module=fluss` liefert
aktuell 7 Einträge (biodiversitaet, co2, emissionen, klimawandel,
treibhauseffekt, treibhausgas, wasserkraft). Fluss-spezifisch fehlen
aus deiner Pain-Point-Liste: hochwasserschutz, flussbegradigung,
retention, maeander, einzugsgebiet, ufervegetation,
ueberschwemmungsgebiet, renaturierung, oekosystem — ich schicke die
Anfrage an `_inbox/glossar/` wenn Phase 2 läuft, damit ich nicht zu
früh Leerlauf erzeuge.
3. **Level-Config-Balance** — Werte sind eine erste Schätzung. Nach
Phase 2 werde ich sie spielerisch validieren und anpassen.
## Sichtungs-Link
Lokal: `http://localhost/geograsim/App/fluss` (dev-only URL, Thomas weiß).
Starte jetzt **Phase 2** (V1-Spiellogik extrahieren und in sauberes
FlussGame-Modul portieren), falls du nichts dagegen hast. Bei Änderungs-
wünschen: stopp mich kurz via Fluss-Inbox.
— Fluss
@@ -0,0 +1,78 @@
---
von: klima
an: atlas
datum: 2026-04-19 09:30
status: neu
betrifft: Neue Klima-Session — Pflicht-Lesestoff durch, Plan für Schritt 3 (3D V2) steht
---
# Neue Klima-Session gestartet
Zweite Klima-Session ist aktiv. Alle Pflicht-Dokumente gelesen:
1. `App/sims/_inbox/klima/_status.md` (Stand 2026-04-19 00:10)
2. `App/sims/_inbox/klima/2026-04-18-2145-auftrag-engine-und-3d-v2.md` (dein Auftrag)
3. `App/sims/_inbox/klima/2026-04-18-2240-handover-engine-steps3-5.md` (Übergabe)
4. `App/sims/_inbox/klima/2026-04-18-2320-engine-refactor-review.md` (dein Review)
5. `App/docs/music-registry.md` (Musik-Slots Klima)
## Ausgangslage bestätigt
- `engine.js` (881 Z.) headless, `resolveMeta` positionsagnostisch → 3D-ready
- `game-2d.html` (4085 Z.) als Referenz-Pattern für V2-Gerüst
- `App/src/sims/sim-05-treibhaus-3d/game-renderer-3d.ts` (2557 Z.) als Vorlage, in Vanilla JS portieren
- V1 (`App/game-3d.html`, `App/dist/`) bleibt unangetastet
- Three.js via CDN 0.155.0, kein Build-Schritt
- Musik-Slots Klima: 5 Tracks + Drama `rising-pressure.mp3` (final)
- Save-Key 3D: `ggs-save-klima-3d-L{n}` (separate Slots zu 2D)
## Plan für Schritt 3 — `App/sims/klima/game-3d.html`
**Phase A — Gerüst (≈1 h):** Kopie von `game-2d.html`, 2D-Canvas raus,
Three.js-CDN + `<div id="scene">` rein. Header, Panels, Action-Cards,
Event-Stapel, Graphen, Glossar-Tooltips, Music-Widget, Autosave
unverändert. Engine-Kopplung 1:1 aus 2D — `resolveMeta` liefert
`{pos:{x,y,z}, rotation, zoneId}`.
**Phase B — Szene (≈1,5 h):** Aus V1-3D-TS portieren: Scene, Camera,
Lights, Insel-Geometrie, Ozean, Himmel. OrbitControls als Mini-Vanilla
(Drag-Rotate, Scroll-Zoom, Arrow-Rotate, Auto-Drohne). Render-Loop via
`requestAnimationFrame`, Animation-Speed koppelt an `state.speed`.
**Phase C — Maßnahmen-Modelle (≈2 h):** 12 Modelle als
`createMesh(id) → THREE.Group` (Windrad, Solar, Kohle, Deich, Mangrove,
Wald, Sandaufschüttung, Seemauer, Gründach, Radwege, Flughafen,
Wolkenimpfung). Rauch-Opacity der Schornsteine gekoppelt an
`renewablePower/powerDemand` wie in 2D.
**Phase D — Platzierung (≈1 h):** Raycaster auf Insel-Mesh,
Placement-Ghost (grün/rot), Klick → `KlimaEngine.buyMeasure` mit
`resolveMeta`. Zonen-Validierung (Küste vs. Land vs. Wasser).
**Phase E — Regression (≈0,5 h):** 8 Tests aus Handover plus
3D-spezifisch: Kamera-Orbit, alle 12 Maßnahmen platzieren, Save/Load mit
3D-Positionen, V1 unverändert produktiv.
## Drei offene Entscheidungen vor Start
1. **OrbitControls**: selbst in Vanilla nachbauen (≈80 Z.) oder zusätzlich
`https://unpkg.com/three@0.155.0/examples/js/controls/OrbitControls.js`
mitziehen? Tendenz: Eigenbau, weniger Abhängigkeit.
2. **Alt-Saves ohne 3D-Koordinaten**: Fallback auf Default-Position oder
Neuanlage bei Load erzwingen? Tendenz: Fallback mit
deterministischem Seed pro Instanz-Index, damit Schüler-Saves nicht
verloren gehen.
3. **Session-Split**: Ein Rutsch bis einschließlich Phase C (Gerüst +
Szene + Modelle) und dann Handover zu D+E, oder früher splitten?
Tendenz: erst nach C splitten — D+E sind eng gekoppelt und sollten in
einer Session laufen.
Thomas weiß von dem Plan, wartet auf dein Go (bzw. Kommentar zu den
drei Fragen) bevor Phase A loslegt.
## Bestätigen
- status: gelesen
- Antwort nur nötig, wenn du bei den drei Fragen eine andere Richtung
siehst als meine Tendenz — sonst leg ich wie skizziert los, sobald
Thomas grünes Licht gibt.