Commit Graph

183 Commits

Author SHA1 Message Date
Adminator b9bcbf9198 Backend-Editoren admin-geschuetzt (admin_gate) + Admin-Hub auf Admin-Seite; save_map admin-oder-lehrer; foto-upload admin-bypass (PIN bleibt)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 11:54:08 +02:00
Adminator 2bdaa0f6cc Admin-Accounts-Editor (CRUD inkl. 2FA-Mail) + Regel: Lehrer-Username = E-Mail (Maske + register), Schueler frei
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 11:43:04 +02:00
Adminator b0fe3fdf86 Tourismusregion: neues Passstrassen-Hintergrundbild (Photoshop, 1536x1024)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 19:40:26 +02:00
Adminator ad627331f0 Fix: save_map.php ruft Session::start() vor requireTeacher (Editor-Speichern schrieb nie in Datei, fiel immer auf Copy-Fallback zurueck)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 19:16:09 +02:00
Adminator 75511630c8 Tourismusregion: Talschleife-Startpunkt korrigiert (Route beginnt weiter links)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 19:14:09 +02:00
Adminator 81ba268ea8 Tourismusregion: Custom-Karte kreuzung ergaenzt (Routen + Bauslots aus Editor)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 16:33:45 +02:00
Adminator 1950542ae5 Tourismusregion: Custom-Karten talschleife + seerunde (Routen + Bauslots aus Editor)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 15:57:41 +02:00
Adminator eba9e54c70 Review-ToDo aktualisiert: Batch 2 deployed; Heli-Navi gestrichen; neue Liste
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 12:02:09 +02:00
Adminator 8b1088a070 Balancing: sonnensystem (Erst-Treffer-Bewertung, Loesung nicht aufdecken, Level-Badge) + energiemanager (echter Blackout an Netzfrequenz, Schwierigkeitsrampe)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-15 21:59:32 +02:00
Adminator fb44ec7afe student_id-FK-Migration Stufe 1+2: Name-Joins -> student_sessions.student_id
- student_sessions: neue Spalte student_id (+Index), backfilled aus (class_id,display_name)
- Session::createStudent setzt student_id (per Lookup, falls nicht uebergeben)
- alle Joins students<->student_sessions von display_name auf student_id umgestellt:
  Benchmark.php, live.php (5x), results.php (4x + runs), modules.php, profile.php, progress.php (answers+runs)
- verlustfrei verifiziert (alt-Join == neu-Join, class 99/102)

Robuster gegen Umbenennung/Doppelnamen, indexierbare Joins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-15 19:16:41 +02:00
Adminator 2984d93e7e Review-Batch P0: Sicherheit + Schueler-Ergebnisse + Assessments-Aufblaehung
Sicherheit:
- progress.php: IDOR geschlossen (student_id-Zweig verlangt Lehrer-Login + Klassenbesitz)
- licenses.php: ?admin=1 und generate nur noch fuer echten Admin; Collision-Retry mit Cap
- .htaccess: .env/.sh/.sql/.bak Deny (Defense-in-Depth)

Schueler-Ergebnisse (kritisch):
- sim-metrics.js + .ivm-CSS in schueler.html; renderOwnRunCard-Fallback zeigt jetzt
  Sterne + grafische Kennzahlen fuer die 9 bisher leeren Sims
- sim-metrics.js: klima final_budget als "Mio EUR" statt "EUR" (Faktor 10^6)

Skalierung:
- assessment.php: Zwischen-Pings (phase running/started) nicht mehr persistiert
- heli: 30-s-assessmentPing entfernt (Live-Zustand laeuft ueber Heartbeat)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-15 16:21:25 +02:00
Adminator a3c5753cd7 Aufgabe beenden: class_modules zuruecksetzen (Bug: Schueler sah Aufgabe weiter)
stop setzt class_modules teacher_started -> free (paused=0, started_at=NULL),
sonst liest die Schueler-Ansicht (class_modules) die beendete Aufgabe weiter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 02:45:35 +02:00
Adminator 031ca87daf Aufgabe: Freigabe/Tempo entfernt (sofort startbar); Beenden als Dialog
- keine Vorbereiten/paused/Start-freigeben/Pause mehr — Aufgabe ist ab Vergabe
  sofort startbar (paused:false), Card zeigt nur "Laeuft" + Beenden
- Schueler-Card immer "Jetzt starten" (kein Warte-Zustand)
- "Aufgabe beenden" jetzt ordentlicher Dialog (#modal-stopassign) statt confirm()

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 02:41:43 +02:00
Adminator 405fcc2b69 Aufgabe: Ab-wann + Bis-wann mit gutem Picker; neue Klasse nur Weltkueche frei
- Modal: "Ab wann" (Sofort/Zeitpunkt) + "Bis wann" (Presets + date/time statt
  datetime-local), Live-Zusammenfassung; zukuenftiger Start => vorbereitet
- assignments.php: startsAt-Param (Default NOW()), T->Space
- modules.php: neue Klasse ohne Eintrag -> nur Weltkueche frei (_defaultMode),
  Rest gesperrt; Freigabe-Matrix bleibt (getrennt von der Aufgabe)
- schueler.html: Hinweis "Deine Lehrperson kann weitere Simulationen freischalten"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 17:39:28 +02:00
Adminator 7f774c7b2a Aufgaben-Dropdown: geplante Module nicht vergebbar (nur laufende)
stadt (Stadt & Raumplanung) auf 'geplant' gesetzt (Prod war 'aktiv').

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:53:37 +02:00
Adminator bbef4856d0 Klassenaufgabe: Modal mit Frist-Schnellwahl + Live-Bestaetigung; Start/Tempo auf aktiver Card
- Modal "Aufgabe erteilen": Frist-Buttons (Heute/Morgen/+1 Woche/Kein Limit),
  Default +1 Woche, Tempo-Checkbox "Vorbereiten", Live-Zusammenfassung als
  Bestaetigung, Button "Auftrag erteilen"
- Aktive Klassen-Aufgabe-Card: Sim-Bild + Status (Vorbereitet/Laeuft) +
  Steuerung "Start freigeben" / "Pause" / "Beenden" direkt auf der Card
  (Tempo-Start nicht mehr in der individuellen Freigabe)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 11:58:04 +02:00
Adminator 3a2e65ebd9 Schueler: Auftrags-Card im Marken-Stil (Sim-Bild + Orange + 📋 Auftrag-Badge)
- renderAuftragCard nutzt card_image + .mod-card-Muster statt Verlauf+Emoji
- Warte-Zustand bei pausierter (Tempo-)Freigabe: " Wartet auf Freigabe"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 11:49:34 +02:00
Adminator 97144495a1 Live/Vergleich an Klassenaufgabe gekoppelt
- aktive Klassenaufgabe wird automatisch als Vergleichs-Modul vorgewaehlt
  (Chip mit 📋 markiert, immer vorne)
- Aufgaben-Banner: begonnen X/N (aus matrix) · gerade aktiv A · Oe Fortschritt
- zeigt Aufgabe auch wenn noch niemand aktiv ist (mit Hinweis)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 01:27:36 +02:00
Adminator 5f6abeeb42 Live/Aktuell: allgemeine Erfolgs-Spalten Fortschritt + Lage
- _liveProgressPct/_liveMood: aus dem Live-State jeder Sim ableitbarer
  Fortschritt (%) und Lage-Ampel (health/heuristik) -> modueluebergreifend
  vergleichbar
- weltkueche: redundante "Gerichte" ersetzt durch Fortschritt-Balken + Lage-Ampel

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 01:05:19 +02:00
Adminator ebdd1ce438 Live: weltkueche-Spalten kuratiert; pausierte Sessions bleiben sichtbar
- LIVE_PRIMARY_FIELDS.weltkueche: Gericht/Herkunft/Zutaten/Gerichte/Fehlklicks
  (statt Rohdaten-Dump aller State-Keys) — 5 Spalten, kein Quer-Scroll
- Idle/Pause: live.php Fenster 30s->2h (LIVE_IDLE_WINDOW_SEC); Aktuell zeigt
  laenger inaktive Sessions als "pausiert" (⏸, grau) statt sie zu verlieren;
  braucht-Hilfe + aktiv-Zaehler nur fuer wirklich aktive Sessions

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 00:43:40 +02:00
Adminator 07010f2302 Live: Cockpit entfernt; braucht-Hilfe + Reflexionen in Aktuell
- Live-Modi jetzt nur Tag / Aktuell / Vergleich (Cockpit-Toggle raus)
- Aktuell: Live-"braucht Hilfe"-Banner + rote Zeilen-Hervorhebung (Heuristik
  gespiegelt aus live.php), Spectator per Zeilenklick bleibt
- Reflexionen als Block am Ende von Aktuell, gecacht gegen 4s-Refresh-Flackern

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 00:32:59 +02:00
Adminator 05ace93318 Live-Tag: Sterne nach Abschluss immer am Balkenende (gold, gefuellt+leer)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:31:21 +02:00
Adminator 25faca0819 Lehrer-Menue: Live an 2. Stelle; Live-Default-Ansicht = Tag
- Live-Tab direkt nach Uebersicht (tabs-Array + DOM synchron)
- Live-Modus-Default 'uebersicht' (Tag), Toggle-Reihenfolge Tag zuerst

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:16:53 +02:00
Adminator 532956fd7d Modul-Datumsfilter: Picker auch im Detail-Modal + global persistent
- Datums-Picker (von/bis) jetzt auch im Modul-Detail-Modal; Aendern laedt die
  Ansicht mit neuem Zeitraum und haelt Uebersichts-Cards synchron
- _modFilter global in localStorage persistiert (bleibt bis Aenderung)
- resetModDateModal ↺ setzt auf Schuljahresbeginn

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:07:38 +02:00
Adminator 52e9fafd92 Uebersicht: Wochengrafik mit Navigation, Triage-Cards immer, Modul-Datumsfilter
Wochen-Saeulengrafik:
- Pfeile Woche vor/zurueck (Kalenderwoche, view=activity&week_offset)
- Datum unter jedem Wochentag, halbierte + condensed Schrift
- Y-Skala links mit Anzahl, skaliert auf Max-Saeulenhoehe
- rendert auch bei leerer Woche (mit Hinweis) fuer die Navigation

Triage: alle 5 Cards immer sichtbar, leere mit "Aktuell niemand betroffen".

Module — Stand der Klasse:
- von/bis-Datumsfilter (Default bis=heute, von=Schuljahresbeginn 1. August)
- neuer view=mod_stats speist die Cards datumsgefiltert
- view=module auf student_results umgestellt (Datum+Score+JSON), from/to-Filter
  wirkt auf Tabelle, Highlights, Champions, classStats; Zeitraum im Modal-Header

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 11:43:12 +02:00
Adminator e750402799 Uebersicht: Top Performers heute + neue Abzeichen heute; Wochengrafik-Labels; Spielzeit sortierbar
- results.php view=today: heutige finale Laeufe (topToday) + vorher/nachher-Progress
  je Schueler:in x Sim (aus student_results rekonstruiert) fuer Badge-Erkennung
- teacher.html: Sektion "Top Performers heute" (heutige Wertung, Sterne + Erfolg)
  ersetzt Allzeit-Top; darunter "Neue Abzeichen heute" (badges.js, jetzt erfuellt
  aber vor heute nicht)
- Wochen-Saeulengrafik: Sim-Titel klein in die Balkenabschnitte, hoehere Grafik
- Modul-Tabelle: Spielzeit-Spalte sortierbar (Quoten-Spalten schon sortierbar)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 22:43:41 +02:00
Adminator 56d8a3217b Uebersicht: Abstand vor Top-Performer-Karte
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 22:32:48 +02:00
Adminator bfc90b78de Modul-Uebersicht: relevante Kennzahlen pro App korrigiert + Quoten
Alle $MODULE_HIGHLIGHTS gegen echte Daten (Klasse 102) verifiziert und auf die
tatsaechlichen Feldnamen umgestellt (viele waren veraltet/leer, z.B. farmer,
sonnensystem, energiemanager, busfahrt, logistik, heli, tourismus*).

- kofferdetektiv NEU: Geloest-Quote, Erstversuch, Fehlversuche, Oe Hinweise
- weltkueche/fluss NEU
- fluggesellschaft NEU (aus Submit-Schema)
- Berechnete Quoten via num/den -> Prozent (Erfolgsquote statt Rohzahl):
  kofferdetektiv, weltkueche, busfahrt, logistik, energiemanager, eu-werkstatt,
  sonnensystem, tourismustal, fluggesellschaft
- heli: Planung/Start/Landung/Level; sim-metrics: Level + Oe Hinweise ergaenzt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 21:22:50 +02:00
Adminator ff285e9af3 Verlauf-Grafik aus Sim-Schema (mehrere Linien) + Ampelbalken in allen Spalten
- renderRunsLineChart nutzt wieder SIM_METRICS statt highlights -> deckt auch
  Module ohne Highlight-Def ab (weltkueche/fluss zeigten sonst nur Sterne);
  Snapshot bei einem Durchgang via renderSimMetrics-Kacheln
- Modul-Tabelle: Ampelbalken auch fuer Durchgaenge, Spielzeit, Zuletzt
  (mehr/aktueller = gruen) -> alle Spalten konsistent grafisch

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 16:14:16 +02:00
Adminator d1a01915af Modul-Klassenuebersicht: Ampelbalken pro Zelle + Verlauf als Liniengrafik
- renderModDetail: kleiner Ampelbalken je Kennzahl-Zelle, Werte spaltenweise
  normiert, Richtung aus h.agg (gruen=positiv, weniger-ist-besser invertiert)
- Sterne-Zelle mit Ampelbalken (n/5)
- Verlauf-Button zeigt statt JSON eine Liniengrafik ueber die wichtigsten
  Kennzahlen (eine Linie je Highlight-Spalte + Sterne, oben=besser, Legende
  mit letztem Wert + Trendpfeil); Snapshot-Kacheln bei nur einem Durchgang
- sim-metrics.js: dir:'lo' fuer Kennzahlen wo weniger besser ist

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 16:00:44 +02:00
Adminator 5bf8f0fe03 Drilldown: volle Modalbreite + durchgaengige Ampelfarben (gruen->rot)
- Modal max-width 640->1120px, Kachel-Grid dichter -> Kennzahlen einzeilig
- Werte UND Balken ampelgefaerbt (pct/pctInv/ratio), Sterne mit Ampelbalken
  je n/5 -> Vergleich auf einen Blick

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 15:51:33 +02:00
Adminator c83da66325 Lehrer-Drilldown: grafische Kennzahlen, Avatar-Bild, Sterne & Abzeichen
- sim-metrics.js: kuratiertes Feld-Schema pro Sim (Sterne/Prozentbalken/
  Verhältnis/Geld/Temperatur), technische Felder ausgeblendet, sauber benannt
- Drilldown zeigt Avatar als Bild (avatar:<slug>), Erfolg als Sterne,
  Parameter als grafische Kacheln, Abzeichen-Sammlung pro gespielter Sim
- live.php student_runs liefert player_progress fuer die Abzeichen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 15:35:29 +02:00
Adminator 2db99c37ee Übersicht: Schüler-Drilldown (Klick → aktuelle Simulationsparameter, cockpit-artig)
live.php: student_runs=<id> liefert letzte Läufe (detail_json = Parameter) + Live-State
+ Recency. teacher.html: Klick auf Triage-Zeile öffnet Modal mit Erfolg/Zuletzt, Live-
Tätigkeit und den letzten Durchläufen samt geparsten Sim-Parametern (CO₂, Fehlklicks …).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 15:20:40 +02:00
Adminator 4cd6302f0a Übersicht: Erfolg-Balken-Fix (Farbe auf Füllung statt Track)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 15:16:58 +02:00
Adminator 1f00d83232 Übersicht: Empfehlung nur aus AKTUELLER Leistung (Recency)
Denkfehler behoben — eine Empfehlung reagiert auf das Zuletzt-Gesehene, nicht auf
einen Allzeit-Rückblick. live.php cockpit liefert jetzt recentErfolg (Ø letzte 3
Läufe), earlyErfolg (frühere Läufe), daysSince, recentPlays. Triage rechnet darauf:
>14 Tage weg → Nachfassen; recent schwach → Fördern; recent+viel → Begleiten; recent
stark, kaum gefordert → Fordern; recent > früher → Bestätigen. Neue Spalte „Zuletzt",
Legende erklärt: Erfolg = letzte Läufe, Verlauf = nur Historie. 4b-Daten mit
kontrollierter Recency neu (jede Gruppe besetzt).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 15:11:35 +02:00
Adminator 84386e93d0 Lehrer: Default-Klasse = zuletzt gewählte (persistent), Fallback älteste
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:51:48 +02:00
Adminator 504b0098a6 Abzeichen: thematische Sim-Abzeichen + saubere Icons + Lehreransicht
- badges.js: 5 Basis-Abzeichen + je Sim 1 thematisches (Vier-Jahreszeiten,
  Sterne-Koch, Alpen-Pilot …), 19 sauber generierte Flat-Emblem-Icons (keine Emojis)
- Erfolge-Tab: Sammlung mit Bild-Icons, gesperrte grau = Ziele; alte Emoji-Badges raus
- Lehrer-Matrix: neue Spalte „Abzeichen" (freigeschaltet von gesamt) pro Schüler:in

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:35:43 +02:00
Adminator 65ca8692cb Abzeichen: gemeinsame Bibliothek + Sammlung im Erfolge-Tab
Neue badges.js: 5 einheitliche Abzeichen pro Sim (Einstieg/Fortgeschritten/
Könner/Meister/Ausdauer), Bedingungen aus allgemeinen Leistungsdaten (plays/
best_stars/level) → gelten sofort für ALLE Sims. Gesperrte Abzeichen sichtbar
als Ziele. ggsErfolgToStars() für Sterne aus normiertem Erfolg. Erfolge-Tab in
schueler.html zeigt die Sammlung pro Simulation (auch ungespielte = Ziele).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 14:24:55 +02:00
Adminator 3d1b8e49a3 Übersicht-Feinschliff + Idle-Fairness
- Überschrift „Klassenübersicht", Sektion „Empfohlene Aktivität für dich."
- Volle Legende (Gradient-Balken, Ampelpunkte, Beispiel-Sparkline)
- 4b-Testdaten: jede Triage-Karte besetzt (Beteiligen/Begleiten/Fördern/Fordern/
  Bestätigen), Verlauf in den letzten 10 Wochen inkl. steigender Fälle
- live-client.js: Idle-Fenster 90s→5min (Lesen/Denken nicht bestrafen) +
  Tab-Sichtbarkeit blendet echtes Weg-Sein aus

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:36:03 +02:00
Adminator 1c2fa2e1b4 Übersicht: Cap grafisch (rote Kappe über gedeckelten Verlauf-Balken)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:20:19 +02:00
Adminator 15ac35a7ad Lehrer-Übersicht: Interventions-Block (Erfolg/Aktiv/Verlauf + Triage) live
Neuer Block oben im Übersicht-Tab: 5 Stat-Karten (Erfolg-Klassenschnitt, Aktuell
aktiv als Streifen, Verlauf-Klassenschnitt mit Skala, Schüler, Simulationen) +
Interventions-Triage (Fördern/Fordern/Begleiten/Bestätigen/Beteiligen) mit
Erfolg-Ampelbalken, blinkender Live-Aktiv-Ampel und Verlaufs-Sparkline pro Person.
Ampelfarben nur für Leistung, Triage-Karten neutral. Alte 5 Stat-Cards raus,
Top-Performer bleibt. Wochen-Cap gegen Zwischenspeicher-Log-Ausreißer.

- results.php: neue fleiss-range 'weeks' (letzte 10 ISO-Wochen)
- 2. Testklasse „3b Klasse" (3 Schüler); Klasse 99 → „4b Klasse"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 13:17:22 +02:00
Adminator 69888445c7 Handbuch: Fachtext formative Leistungsbeurteilung + Literaturverzeichnis
Neuer Abschnitt in „6. Bewertung" (Anker #leistungsbeurteilung): formativ vs.
summativ, drei Bezugsnormen (kriterial/ipsativ/prozess statt normativ), Wirkungs-
belege mit ehrlicher Effektstärken-Einordnung, Leitplanken (Butler, Kluger&DeNisi,
keine Bestenliste), Fleiß als produktives Engagement, Diagnose→Intervention. Volles
Literaturverzeichnis (27 Quellen). Lehrer-Cockpit verlinkt an der Benchmark-Box
darauf. Normative Reflexionsaufgabe entschärft.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 00:36:05 +02:00
Adminator cb16c3742e Testklasse: realistische Leistungsdaten (12 neue Schüler + Ben/Clara)
Damit die Lehrer-Leistungsübersicht sinnvolle Werte hat. 14 Schüler:innen mit
Skill-Spread um Anna (Referenz): David 95 … Hannes 34. Pro Schüler:in ~16
Sim-Durchläufe über ~10 Module (Hochrechnung: ~70 GW-Std/Jahr, 1/3 Sims → ~20/Jahr).
Konsistent über player_progress (Matrix), assessments+student_sessions (Benchmark)
und student_results. Benchmark-Scores auf ±10 zum Ziel verifiziert. id-sicher
(username-Referenz) + idempotent (Cleanup-Block), Login gesperrt, Anna unberührt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 23:38:29 +02:00
Adminator 7915512195 Weltküche: DACH/EU-Priorität wiederhergestellt + Beschreibungen
Die Umstellung auf echte Menge hatte die EU-Priorität eingeebnet. Jetzt Stufen-
folge: EU-Nachbar (Hauptweg zu UNSEREM Markt, kurzer Weg) VOR fernem Welt-
Lieferant (nur wo es hier nicht wächst, z.B. Pfeffer→Vietnam+Brasilien) VOR
"Big Player, kommt kaum an" (world-far). Innerhalb einer Stufe zählt die Menge.

- MARKET_TIER {eu:0, global:1, world-far:2}
- explainChoice: EU-Antwort erklärt "aus EU-Binnenmarkt, kurzer Weg, kein Zoll";
  world-far-Fehlklick erklärt "weltweit groß, aber kaum im EU-Handel"
- "in dieser Runde"-Texte entfernt (Auswahl ist jetzt deterministisch)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:54:39 +02:00
Adminator e7453d9072 Weltküche: echte Hauptlieferanten statt Zufall + Einheiten-Fix
- Welt-Zutaten: die 2 tatsächlichen Hauptlieferanten nach Menge (Pfeffer →
  Vietnam+Brasilien, Kakao → Elfenbeinküste+Ghana) statt log-gewichtetem Zufall,
  der kleine Produzenten (Sri Lanka, Kambodscha) fast gleich oft zog
- Reihenfolge: „beliefert unseren Markt" (eu/global) vor „selten hier" (world-far)
- fmtTonnes: „220.000 t/Jahr" statt „220 Tsd t" (kindgerecht, kein SI-Kürzel kt),
  Mio mit deutschem Dezimalkomma („1,5 Mio t")

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:47:35 +02:00
Adminator 1c5356422c Weltküche: Heimat-Regel – Zutaten folgen dem Gericht statt Zufall
Löst "warum kommt Deutschland nicht vor?": In regionalen Gerichten kommt jede
Zutat, die das Herkunftsland selbst erzeugt, von dort (Tiroler Gröstl → Tiroler
Speck/Kartoffeln aus Österreich). Nur was hier nicht wächst (Pfeffer, Olivenöl)
reist von weit her – die eigentliche Lektion. Datengetrieben: Test "erzeugt das
Heimatland die Zutat?" filtert automatisch, kein Länder-Bias (hängt am Gericht).

- dishes.json: heimat (25 Gerichte) + signature-Labels (5); exotische ohne heimat
- buildTaskFor: Heimat-Regel sticht Zufall aus, wenn Heimatland Produzent ist
- Klick-Feedback beantwortet "warum nicht Deutschland?" direkt (showWrong/explainChoice)
- Auflösung erklärt Heimat-Logik + zeigt Antwort auch wenn kein Top-5-Produzent

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:56:55 +02:00
Adminator 7d3b3693db Glossar-Sweep: 39 Einträge auf ganze Sätze (kein Stichwortdeutsch)
- 38 Einträge: Bullet-Listen/Pfeile/Tilden → ganze Sätze; nummerierte Listen
  nur mit vollständigen Sätzen; hub-flughafen: verbotenes „Sim-Spieler" ersetzt
- norroena-faehre: zerschossene Kodierung komplett neu (Island/Färöer/Irland-Fakten)
- Quellen [^n] und Glossar-Links integritätsgeprüft (nichts verloren)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:22:57 +02:00
Adminator 305e3a62f8 Glossar-Review: CO2-Eintrag ganze Sätze + Tabelle, Geviertstrich→Gedankenstrich, Weltküche-Onboarding
- Glossar-Renderer: Markdown-Tabellen (|…|) + .gl-table CSS
- co2-fussabdruck-lebensmittel: telegrafische Liste → ganze Sätze + saubere
  Portions-Tabelle, Avocado-Vergleich, Malpunkt statt ×
- Programmweit „—" (Geviertstrich) → „–" (Gedankenstrich): Glossar-DB,
  glossar_examples, module_info, alle 13 Buch-Kapitel
- Weltküche-Onboarding: Blatt 2 umformuliert (zweites Land nacheinander),
  Blatt 3 Lehrplan-Satz entfernt, Blatt 4 fehlendes markt.webp generiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:15:29 +02:00
Adminator 0357cd188e Buch: 3 echte Fotos in neue Plätze (Schiff/Venedig/Flughafen)
Logistik: Containerschiff auf der Verkehrsträger-Seite (LKW/Zug/Schiff).
Klima: Venedig Acqua alta auf der Meeresspiegel-Seite (europäisches Beispiel).
Kofferdetektiv: Großraumflugzeug an der Fluggastbrücke (Flughafen/Flugverkehr).
Jeweils Standard + Leichte Sprache, EXIF/GPS gestrippt. Fotos von Thomas.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 12:39:37 +02:00
Adminator 6e3de69b3c Buch Weltküche: echtes Gewürzmarkt-Foto (Basar Jerusalem) in gewuerzregal-tropen
Foto von Thomas; Bildunterschriften (Leicht + Standard) an das Marktmotiv angepasst,
Herkunftsfakten (Zimt/Pfeffer/Vanille) behalten. EXIF/GPS gestrippt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 13:27:17 +02:00