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:
@@ -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 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
|
||||
|
||||
Reference in New Issue
Block a user