- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6.2 KiB
Anhang: Migration von V1 nach V2
Nicht alle Module starten auf der grünen Wiese. Die meisten existieren
bereits als V1 unter App/sims/<slug>/ und sind seit 2026-05-04 live
mit echten Schul-Accounts. Diese Anleitung beschreibt, wie ein
V1-Modul nach V2 portiert wird.
Grundregeln
- V1 bleibt unangetastet.
App/sims/<slug>/wird NICHT geändert, außer für echte Bugfixes (siehefeedback_live_betrieb_versionen.md). - V2 entsteht parallel in
v2-modules/<slug>/als self-contained Lieferpaket nach dieser Spec. - Daten bleiben kompatibel. V2-Tabellen sind additiv. Alte V1-Daten werden NICHT migriert — sie bleiben in V1-Tabellen, neue V2-Sitzungen schreiben in V2-Tabellen mit Versions-Marker.
- Modul-Instanz entscheidet selbst, ob V2 neuer Code oder refaktorierter V1-Code wird. Empfehlung: bei kleinen Modulen neu, bei großen gezielt refaktorieren.
Schritt-für-Schritt
Schritt 1: V1-Bestandsaufnahme
Modul-Instanz schreibt eine kurze MIGRATION-NOTES.md mit:
- Aktuelle V1-Architektur (welche Files, wie viele Zeilen)
- V1-Tabellen-Schema
- V1-Asset-Liste
- Bekannte Probleme / Tech-Debt
- Was in V2 anders/besser werden soll
Lege diese Notes in v2-modules/<slug>/docs/MIGRATION-NOTES.md ab.
Schritt 2: Lieferordner anlegen
v2-modules/<slug>/
├── manifest.json ← neu schreiben nach Spec
├── README.md ← neu schreiben
├── public/
│ ├── game.html ← kopiert oder neu, mit Spec-Anpassungen
│ └── assets/ ← Bilder/Audio/Daten aus V1 kopieren
├── db/
│ └── migrations.sql ← neue m_<slug>_*-Tabellen oder leer
└── tests/
└── mock-platform.html ← neu schreiben
Schritt 3: Easy-Sprache hinzufügen
V1-Module hatten Easy-Sprache uneinheitlich. V2 verlangt sie für alle sichtbaren Texte. Modul-Instanz muss:
- Alle UI-Texte als i18n-Keys auslagern
- Easy-Variante für jeden Text schreiben (Netzwerk-Leichte-Sprache- Regeln, A1–A2-Niveau)
public/i18n/de-AT-standard.jsonundde-AT-easy.jsonanlegen- Beim Start aus
lang-URL-Param laden
Schritt 4: Telemetry-Hooks einbauen
V1 kannte keine Telemetry. V2 verlangt drei Event-Typen (siehe telemetry-api.md):
- Heartbeat-Loop auf 15-Sekunden-Intervall starten, sobald Schüler*in aktiv ist
- Milestone-Calls an allen definierten Erfolgs-Punkten einbauen (zuerst im Manifest deklarieren!)
- Stuck-Detection — letzten User-Input-Timestamp tracken, bei 90s+ Stuck-Event posten
Hilfsbibliothek wird Atlas in
v2-platform/lib/telemetry-client.js als ESM-Modul anbieten,
das Module einbinden können statt selbst zu implementieren.
Schritt 5: Result-Output anpassen
V1-Module schickten Ergebnisse an unterschiedliche Endpoints
(/api/save_assessment.php, /api/level_complete.php, etc.). V2
hat einen einheitlichen Endpoint:
POST /v2beta/api/result
Modul muss alle alten Ergebnis-Calls auf diesen Endpoint zusammenziehen (siehe output-api.md).
Schritt 6: Direkten DB-Zugriff entfernen
V1-Module hatten teils direkten Zugriff auf students, classes,
assessments. V2 verlangt API-Zugriff via Plattform-Endpoints.
Modul muss:
- Alle SQL-Queries auf Plattform-Tabellen entfernen
- Stattdessen
/v2beta/api/student/meund/v2beta/api/module/statenutzen - Eigene Modul-Tabellen mit Prefix
m_<slug>_neu anlegen (V1-Tabellen werden NICHT mitgenutzt)
Schritt 7: Lehrplan-Anker und Glossar deklarieren
Modul-Instanz pflegt im Manifest:
lehrplanAnker— Codes aus AT-GW-Lehrplan, die das Modul wirklich trainiert (mit Lehrplan-Instanz abstimmen)glossarBegriffe— Slugs ausglossar-Tabelle, die das Modul voraussichtlich verwendet (mit Glossar-Instanz abstimmen)
Schritt 8: Konformitäts-Check
cd v2-modules/<slug>
php ../../v2-platform/tools/conformance-check/check.php
Bei „LIEFERBEREIT": Inbox an Atlas. Bei Fehlern: fixen.
Schritt 9: Atlas-Integration und Live-Deploy
Siehe delivery-format.md ab Abschnitt „Lieferprozess".
Reihenfolge der Modul-Migration (Roadmap)
Thomas-Vorgabe (2026-05-16): „Erst die einfachen, dann die schwierigen. Updates in Modulen sind dabei OK."
Vorschlag-Reihenfolge:
| Welle | Module | Begründung |
|---|---|---|
| 1 | Glossar, Lehrplan | Fundament für alle anderen — müssen als erstes V2 sein |
| 2 | Sonnensystem, Entscheidungstag | Kompakt, klar abgegrenzt |
| 3 | Energiemanager, Heli, Busfahrt, Farmer | Mittelgroß |
| 4 | Klima, Logistik | Größte/komplexeste Module zuletzt |
| – | Fluss, Staustufen | Status klären (Fluss aktiv? Staustufen pausiert) |
Genaue Reihenfolge wird mit Modul-Instanzen abgestimmt, sobald die Spec stable ist.
Was passiert mit V1?
- V1 bleibt während der gesamten V2-Migration produktiv unter
geograsim.at/ - Sobald ein Modul V2 hat und freigeschaltet ist:
- Lehrer*innen können in V2-Cockpit das V2-Modul wählen
- V1-Modul bleibt parallel verfügbar in V1-Cockpit (für Klassen, die mitten in V1-Stunde sind)
- Wenn alle Module V2 haben:
- Stable-Switch (siehe project_v2_arbeitsmodell.md)
- V1 wandert nach
/v1archiv - V1-Code wird 6+ Monate als Notfall-Rollback aufbewahrt
- V1-Daten bleiben dauerhaft erhalten — nichts wird gelöscht
✅ Geklärt mit Thomas (2026-05-17)
- Migrations-Wellen: bestätigt — Plattform-Services (Glossar, Lehrplan) zuerst (Welle 1), dann kompakte Module (Sonnensystem, Entscheidungstag — Welle 2), dann mittelschwere (Energiemanager, Heli, Busfahrt, Farmer — Welle 3), zuletzt die komplexen (Klima, Logistik — Welle 4). Fluss + EU-Werkstatt: Status vorher klären.
- V1 bleibt parallel voll nutzbar bis zum Stable-Switch. Keine Read-only-Markierung pro Modul. Lehrperson entscheidet selbst, wann sie ihre Klasse auf V2 umzieht. V2 erscheint zunächst als „Beta"- Angebot im V1-Cockpit.
- Keine Daten-Bridge zwischen V1 und V2: cleaner Schnitt. Schüler*in startet in V2 frisch (alle Module L1, Lerngeschichte leer). Hintergrund: V1-XP-Level ≠ V2-Difficulty-Level (V1 hat das vermischt, V2 trennt es sauber). V1-Daten bleiben in V1-Tabellen als historische Auswertung sichtbar.