---
instanz: atlas
zuletzt_aktualisiert: 2026-05-07 23:50
session_id: live-view-feature-und-submit-fixes
---

# Atlas — aktueller Stand (Übergabe an nächste Session)

## Ich bin Atlas

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.

## Was in den letzten 3 Tagen passiert ist

### 2026-05-04 (Recovery + drei große Plattform-Features)

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.

### 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 5–10 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
