Atlas: Live-View-Feature + Submit-Bug-Fixes + Admin-Styleguide

- Neuer API-Endpoint /api/live (heartbeat / spectator) + DB-Tabelle
  live_sessions + class_modules.paused-Spalte
- Plattform-Live-Client (assets/js/live-client.js): Heartbeat,
  Pause-Overlay, Spectator-Mode bei ?view=teacher
- ggs_inject_live() in _scripts.php als Helper, in alle 11 Sim-Wrapper
  integriert
- Lehrer-Cockpit: tabellarische Klassen-Live-Ansicht pro Sim,
  Pause-Toggle, blinkender Tab-Indikator wenn aktive Sessions
- Submit-Bug erschlagen: progress.php hat jetzt submit_assessment-
  und reflection-Action; saves.php akzeptiert beide Key-Konventionen;
  alle Direkt-Pfad-API-Files mit require_once-Bootstrap
- Avatar-Default: zufaelliger DALL-E-Avatar fuer neue Schueler:innen
- Admin-Styleguide-Seite mit Bildstil, Farb-Tokens, Layout, iPad-Pattern
- Klima 2D + 3D: GGS_LIVE_STATE-Hook, Klima 2D zusaetzlich skipResume
  fuer Klassenaufgaben-Reset
- Test-Lehrer Jakob + 3 Schueler:innen lokal + auf Live angelegt
- Rundbriefe an alle Sim-Instanzen + Submit-Briefe an sonnensystem,
  busfahrt, energiemanager + Glossar-Anfrage zu Grundriess
- Status-Uebergabe in _inbox/zentrale/_status.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-07 01:20:53 +02:00
parent e354a30a44
commit 33fb423967
56 changed files with 4869 additions and 226 deletions
+156 -29
View File
@@ -1,39 +1,166 @@
---
instanz: atlas
zuletzt_aktualisiert: 2026-04-18 23:55
session_id: plattform-zentrale-laufend
zuletzt_aktualisiert: 2026-05-07 23:50
session_id: live-view-feature-und-submit-fixes
---
# Atlas — aktueller Stand
# Atlas — aktueller Stand (Übergabe an nächste Session)
## Rolle
Plattform-Zentrale. Verwalte Design-System, APIs, Admin-Interface,
Dashboards, Interface-Dokumente, Music-Registry, Crash-Recovery.
## Ich bin Atlas
## Aktive Instanzen (aktuell)
| Name | Status | Nächste Aufgabe |
|------|--------|-----------------|
| **Klima** | 2D-Refactor Schritt 1+2 fertig (Engine extrahiert) | 3D V2 — wartet auf neue Session (Übergabe-Notiz in eigener Inbox) |
| **Fluss** | Phase 1 (PHP-Wrapper + Gerüst) gestartet | Phase 2: Spiellogik aus V1 portieren mit 4 Pain-Points als Leitfaden |
| **Glossar** | 28 Einträge + 12 Infografiken + 5 Repräsentationsbilder (Querformat) live | Auf Bildwunsch-Anfragen von Fluss warten |
| **Lehrplan** | 4 Modul-Detailseiten + 78 Lehrplan-Anker + `lehrplan.php` live | `simulationen.php` → Country-Helper → Landing-Diff |
Plattform-Zentrale für GeoGraSim. Working Directory:
`c:/xampp/htdocs/geograsim/` (ohne Modul-Subordner). Erkenne dich beim
Recovery an: Bearbeitung von `App/pages/`, `App/teacher.html`,
`App/schueler.html`, `App/php/api/`, `module_info`-DB,
`App/Don_t_Deploy/deploy.sh`. Modul-Instanzen arbeiten in
`App/sims/<slug>/`-Subworkspaces.
## Zuletzt geänderte Dateien
- `App/docs/crash-recovery.md` (neu)
- `App/docs/music-registry.md` (Drama-Slot + Fluss-Claim)
- `App/assets/img/glossar/*.png` (5 Querformat-Bilder)
- `App/scripts/generate-sounds.py` (zentrale SFX-Pipeline)
- `App/sims/_inbox/*` (diverse Nachrichten)
## Was in den letzten 3 Tagen passiert ist
## Als nächstes (wenn Thomas zurück ist)
- Ggf. Fluss' Phase-1-Rückmeldung reviewen
- Ggf. neue Klima-Session aufsetzen (Schritt 3 3D V2)
- Commit-Konvention an alle Instanzen kommunizieren (läuft)
- Offen: Remote-Backup-Entscheidung (eigener Server)
### 2026-05-04 (Recovery + drei große Plattform-Features)
## Offene Entscheidungen für Thomas
- Remote-Git-Backup (eigener Server via Meister-Instanz) — später
- Klima-Drama-Track A/B-Test — Thomas vergleicht im Browser, dann final
1. **Crash-Recovery durchgelaufen** — Inbox + Memory gelesen, Rundmail
an alle 11 Sim-Instanzen verteilt. Antworten kamen von Farmer +
Energiemanager + Glossar.
2. **User Jakob + 3 Test-Schüler:innen angelegt** (lokal + Live):
- Lehrer: `jakob` / `hoppala3355!` (Live-ID 106)
- Klasse: „Jakob 1" (25/26), Join-Code `JAKOB1` (Live-ID 106)
- Schüler: Alexom (PIN 3322, Lizenz `S8XG-6J9C-ME9N-2026`),
Berturam (PIN 7788), Sussama (PIN 9991)
- SQL-Migration: `App/Don_t_Deploy/2026-05-04-jakob-3schueler-anlegen.sql`
3. **Avatar-Default umgestellt** — neue Schüler:innen kriegen jetzt
automatisch einen zufälligen DALL-E-Avatar aus 30 Slugs (statt Emoji
`🧑‍🎓`). Code: `students.php``ggs_random_avatar_slug()`.
UI-Bug in `teacher.html:1208` (Slug als Text statt Bild) gefixt.
## Blocker
Keine.
### 2026-05-04 / 05 (Drei große Bugs gefunden + gefixt)
1. **Submit-Bug in progress.php**: Klima sendet `action:
'submit_assessment'`, Server kannte nur `complete`/`answer`/`wirkung`
→ Rückläufe verworfen. Jetzt Handler dafür drin (auch für
`submit_assessment` mit nested `data:{stars,score,duration_ms,…}`).
2. **Save-API-Mismatch**: Klima sendet `save_key`/`save_data`,
`saves.php` erwartete `key`/`data`. Beide Schreibweisen werden jetzt
akzeptiert.
3. **Direkt-Pfad-Pfad-PHP-Files ohne require_once**: progress.php /
saves.php / modules.php / live.php hatten keine `require_once` für
Database/Session/Response — funktionierten nur über den index.php-
Router. Klima ruft `/php/api/progress.php` aber direkt → Fatal Error.
Gefixt mit `require_once`-Bootstrap-Block in allen 4 API-Files.
4. **OPcache-Lehre**: `docker exec webstack-php php -r 'opcache_reset();'`
greift nicht für Apache (mod_php). **Immer `apachectl -k graceful`**
nach Code-Deploy. Memory: `feedback_apache_opcache.md`.
### 2026-05-05 (Live-View-Feature)
1. **DB-Migration**: `class_modules.paused` (TINYINT) +
neue Tabelle `live_sessions(student_id PK, class_id, module_id,
state_json, started_at, last_seen)`.
2. **Neuer API-Endpoint** `App/php/api/live.php`:
- POST `{action:'heartbeat', module_id, state}` (Schüler-Sim, ~4 s)
- GET `?class_id=X` (Lehrer: aktive Sessions in Klasse)
- GET `?student_id=X` (Spectator: state eines Schülers)
3. **Plattform-Live-Client** `App/assets/js/live-client.js`:
- Heartbeat alle 4 s
- Pause-Polling alle 5 s → Vollbild-Overlay „⏸ Auftrag pausiert"
- Spectator-Mode bei `?view=teacher` → Input disabled, Banner oben
4. **Helper-Funktion** `ggs_inject_live($html, $simId)` in
`App/php/templates/_scripts.php` — alle Sim-Wrapper rufen das vor
`echo $html;` auf. Pattern: 1 Zeile pro Wrapper, idempotent.
5. **Lehrer-Cockpit** Tab `🟢 Live`:
- Tabellarische Klassenliste pro Modul
- State-Spalten dynamisch aus dem state-JSON
- `LIVE_PRIMARY_FIELDS.<sim>` als Schema-Override pro Sim
- Klick auf Zeile öffnet Inline-Modal (Spectator) — kein 404 mehr
- **Tab-Indikator pulsiert grün, sobald ≥ 1 Session aktiv** (10 s
Background-Polling, läuft auch auf anderen Tabs)
6. **Sim-Eingriff in Klima 2D + 3D**:
- `window.GGS_LIVE_STATE` in beiden game.html (state-Snapshot)
- `skipResume`-Flag in `klima-2d.php` Wrapper (bei aktivem
unerledigtem Lehrer-Auftrag → localStorage löschen + frisch starten)
7. **Modul-Auftrags-UI in teacher.html**:
- Klick auf „🚀 Klassen-Mode" → Modal mit Level (1/2/3) + Endet-am +
⏸ Tempo-Sperre
- Pause-Button auf Modul-Card sichtbar wenn Auftrag aktiv
- Auftrags-Mode wird automatisch ausgeblendet, wenn ein assessment-
Eintrag mit `submitted_at > class_modules.started_at` existiert
(Auftrag erledigt → wandert in reguläre Modul-Liste)
### 2026-05-05 / 06 (Briefe an Sim-Instanzen)
- 11 Sim-Inboxen haben Briefe für `GGS_LIVE_STATE` bekommen
(Vergleichstabellen-Schema). Antworten:
- **Farmer** ✓ eingebaut (`game.html` + zentrale-Antwort 11:00)
- **Energiemanager** ✓ eingebaut (zentrale-Antwort 04:24)
- Klima 2D + 3D ✓ (selbst von Atlas eingebaut)
- Rest noch offen: Fluss, Heli, Logistik, EU-Werkstatt, Sonnensystem,
Busfahrt, Entscheidungstag, Staustufen
- 3 Briefe an Sims **ohne Submit-Pfad** geschickt: Sonnensystem, Busfahrt,
Energiemanager — sie machen aktuell GAR KEINE API-Calls für
Submit. Heli + Logistik haben eigene Pfade (nicht geprüft, kann sein
dass die mit der Plattform-Auswertung nicht voll kompatibel sind).
### 2026-05-04 (zwei Glossar-Inbox-Mails an Glossar-Instanz)
- Anfrage zu „Grundriess(er)"-Eintrag (Klima-Sim grüne Häuser/Bewohner)
- Glossar-Instanz hat zusätzlich die Memory-Files
`reference_design_tokens.md` + `reference_avatar_slugs.md` neu
angelegt — Atlas-Memory wurde von Glossar mitgepflegt.
### 2026-05-06 (Admin-Styleguide-Seite)
- Neue Seite `App/admin-styleguide.html` mit:
- DALL-E-Prompt-Block (Copy-Button)
- Bild-Farbpalette (5 Hex, Klick-zum-Kopieren)
- UI-Farbtokens (22 CSS-Variablen, gruppiert)
- Layout / Spacing / Typo-Tabellen
- Bildformate / Pfade / 30 Avatar-Slugs
- iPad-Patterns, Sprache (Lernarbeit-Lexikon)
- Verlinkt aus `admin-licenses.html` / `admin-modules.html` /
`admin-levels.html` Topbar als „🎨 Styleguide".
- Auth-Check über `/api/admin?action=status`.
## Live-Status der Plattform
- Server: `geograsim.at` / `staatsgeheimnis.at/geograsim/`
- DB-Stand kompatibel (Live hat keine `country`-Spalte in
`teachers`/`classes`, Migrations entsprechend angepasst)
- Apache reload nach Deploy: `docker exec webstack-php apachectl -k graceful`
- Server-Doppelstruktur: bei Deploy IMMER `App/<x>/` UND Top-Level `<x>/`
spiegeln. Pattern aus `deploy.sh` übernehmen.
- 9 reale Lehrer-Accounts auf Live (siehe `reference_prod_user_bewahren.md`)
+ 1 neuer Test-Lehrer Jakob.
## Offen / Nächste Schritte
1. **Save-Cleanup bei Spielende** — Thomas hat den Bug gemeldet (Klima 3D
resumed nach Game-Over aus altem Stand). Konzept liegt vor (Save bei
Endscreen löschen + tryResume-Endphase-Check), aber **noch nicht
implementiert** — Thomas hat „mach selbst" oder „in die Klima-Inbox"
noch nicht entschieden.
2. **Antworten der 7 noch offenen Sim-Instanzen** abwarten (Live-State
+ Submit-Briefe). Bei Antwort `LIVE_PRIMARY_FIELDS.<sim>`-Schema in
`teacher.html` eintragen.
3. **Glossar „Grundriess(er)"** — wartet auf Glossar-Antwort, was der
Begriff genau ist.
4. **Lehrer-View für Reflexionen** — `assessments.reflections` werden seit
2026-05-05 gespeichert (progress.php hat reflection-Handler), aber im
„Ergebnisse"-Tab gibt es noch keine Anzeige. Thomas hat das offen
gelassen („Sag Bescheid").
5. **Sonstiges Memory-TODOs** — Marktplatz-Auth, VS-Code-Workspaces,
V2-Deployment-Plan (alles wartet auf Thomas-Kommando).
## Wenn Thomas dich morgen reaktiviert
```
Lies:
C:/Users/herr_/.claude/projects/c--xampp-htdocs-geograsim/memory/MEMORY.md
App/sims/_inbox/zentrale/_status.md ← diese Datei
App/sims/_inbox/zentrale/ (neueste 510 Mails)
Dann melde dich mit Stand und Frage was als nächstes ansteht.
```
Antworte zu Beginn mit: **„Hier Atlas. Stand vom 2026-05-07: Live-View
läuft, Save-Cleanup bei Spielende ist noch offen, …"**
— Atlas, 2026-05-07 23:50