Files
geograsim/v2-modules/_spec/level-unlock-konzept.md
T
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- 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>
2026-07-08 02:27:02 +02:00

3.9 KiB
Raw Blame History

Anhang: Level-Unlock-Konzept (Drei-Modi-Logik)

Beschreibt, wie Schüler*innen Schwierigkeitsstufen wählen können — in welchem Modus, mit welchem Recht, und wie die Freischaltung läuft.

Drei Modi

A) Freies Arbeiten (mode=free)

Schüler*in öffnet ein Modul, das die Lehrperson generell für die Klasse freigegeben hat. Sie wählt eine Schwierigkeit aus dem freigeschalteten Bereich ihres Profils.

  • Default-Start: Level 1 (L1) immer freigeschaltet
  • L2 freigeschaltet, sobald L1 erfolgreich abgeschlossen (Score / ScoreMax ≥ 60% UND completed = true)
  • L3 freigeschaltet, sobald L2 erfolgreich abgeschlossen
  • … usw. für alle in manifest.difficultyLevels definierten Stufen

Modul liest levelUnlocks[moduleSlug].highestUnlocked aus dem Profil und rendert Level-Wähler entsprechend (z.B. L1 + L2 wählbar, L3 ausgegraut mit Schloss-Icon).

B) Auftragsmodus (mode=teacher_started)

Lehrperson hat einen Auftrag erstellt (class_assignments_v2) mit fester difficulty. Modul startet direkt mit dieser Schwierigkeit, Schüler*in kann nicht wechseln. Level-Wähler wird ausgeblendet.

C) Nachteilsausgleich-Override (Schüler*in × beide Modi)

Wenn students.nachteilsausgleich = TRUE (von Lehrperson in Klassenliste gesetzt), darf die Schüler*in immer jeden Level frei wählen — auch im Auftragsmodus.

Pädagogische Begründung:

  • Kind mit Lernschwäche darf auf L1 herunter, wenn der Auftrag L2 war
  • Kind mit Hochbegabung darf auf L3 hoch, wenn der Auftrag L1 war
  • Übergeordnetes Prinzip: keine künstliche Über- oder Unterforderung

Modul erkennt das aus profile.nachteilsausgleich und ignoriert die difficulty-URL-Vorgabe — zeigt stattdessen den Level-Wähler.

DB-Tabellen

student_level_unlock_v2

student_id              INT
module_slug             VARCHAR(64)
highest_unlocked_level  VARCHAR(20)    -- 'L1', 'L2', 'L3'
highest_completed_level VARCHAR(20)    -- nullable
best_score_per_level    JSON           -- {"L1": {"score":95,"max":100}, "L2":{...}}
attempts_per_level      JSON           -- {"L1": 3, "L2": 1}
last_played_at          TIMESTAMP
PRIMARY KEY (student_id, module_slug)

students.nachteilsausgleich

ALTER TABLE students ADD COLUMN nachteilsausgleich BOOLEAN DEFAULT FALSE

class_assignments_v2

id                  BIGINT
class_id            INT
teacher_id          INT
module_slug         VARCHAR(64)
difficulty          VARCHAR(20)    -- vorgegebene Schwierigkeit
custom_params       JSON           -- V3: weitere Lehrperson-Overrides
starts_at, ends_at, active

Automatische Updates beim Result-Empfang

Wenn ein Modul ein Result via POST /api/result postet, aktualisiert die Plattform student_level_unlock_v2 automatisch:

  1. attempts_per_level[difficulty] += 1
  2. best_score_per_level[difficulty] = max(alt, neu)
  3. Wenn completed = true UND score/scoreMax >= 0.6:
    • highest_completed_level = max(alt, difficulty)
    • Wenn difficulty == highest_unlocked_level UND es einen nächsten Level in manifest.difficultyLevels gibt:
      • highest_unlocked_level = nächster Level

Modul muss keinen Update-Call machen — passiert serverseitig im result.php-Endpoint.

Lehrperson-Sicht im Cockpit (V2)

Pro Schüler*in × Modul zeigt das Cockpit:

  • highest_completed_level mit Best-Score
  • highest_unlocked_level (was als nächstes freigeschaltet ist)
  • attempts_per_level (wie oft pro Stufe versucht)
  • Liste der Versuche mit Datum + Score

Damit ist die Lerngeschichte transparent.

V3-Ausblick (nicht heute)

In V3 darf die Lehrperson:

  • Beim Auftrag zusätzlich zur difficulty einzelne Parameter überschreiben (z.B. „L2 mit 8000 Startbudget statt 5000") via custom_params in class_assignments_v2
  • Frei-Modus-Levels pro Klasse einschränken (z.B. „diese Klasse darf nur L1 und L2 nutzen")

V2: nur difficulty einstellbar. Genug für den Anfang.

Memory-Verweis

Siehe project-v2-level-unlock-konzept in der Atlas-Memory.