Commit Graph

319 Commits

Author SHA1 Message Date
Adminator 193c6dcc8f Tag-Zeitstrahl: 23 Stunden-Trennlinien + stuendliche Beschriftung + dunklere Nachtzeiten (00-01/20-24)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 21:48:33 +02:00
Adminator 74736a33aa Tag-Ansicht: Zeitfenster-Doppelschieberegler (00-24 Uhr, stuendlich) ueber der Tabelle
Default = Auto (erste bis letzte Aktivitaet, auf volle Stunden). Zwei Fader zum
Zusammenschieben (z.B. aktuelle Stunde). Balken werden aufs Fenster gekappt (overflow).
"Ganzer Zeitraum"-Reset zurueck auf Auto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 21:42:27 +02:00
Adminator f7bf0f0901 Fix: alle heutigen Leistungen zaehlen (Ben) + Live-Session started_at bei Modulwechsel (Clara)
- live.php: ON DUPLICATE KEY UPDATE-Reihenfolge korrigiert (started_at VOR module_id), sonst
  wird der Modulwechsel nie erkannt -> Balken behielt alten Startzeitpunkt (Clara EU-Werkstatt seit 14:30).
- results.php view=today: liefert todayScores (Pro-Schueler-Aggregat aus student_results, zuverlaessig).
- teacher.html HEUTE-Triage: fertige Laeufe aus student_results + laufende aus Summary zusammengefuehrt;
  Totalversagen heute (<40) -> Foerdern. Ben (klima 36) erscheint jetzt korrekt in Foerdern.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 15:21:04 +02:00
Adminator cc83493055 Lehrer-Live: idle-pausierte gelten in Aktuell als pausiert (nicht aktiv) + Tag-App-Symbol immer sichtbar
- Aktuell: paused beruecksichtigt jetzt __idlePaused/__paused (heartbeatet trotz Pause weiter)
  -> kein Widerspruch mehr "navigiert UND pausiert" (Klara).
- Tag: App-Symbol als immer sichtbares Overlay am Balkenstart, auch bei winzigem Balken (darf ueberstehen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 15:11:20 +02:00
Adminator abbc0580c5 Heli M17: A10-Tauern-Zielpunkt auf Tauerntunnel-Nordportal (lag 7km noerdlich im Gebirge)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 15:07:51 +02:00
Adminator be7d9fce1a Empfehlung: 6. Karte 'Laeuft gut' in gleicher Form (volle Liste mit Balken) statt Kompakt-Streifen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 15:05:08 +02:00
Adminator da1e6e6e87 Weltkueche: correct_for im Spiel scharfgeschaltet (V3)
ING-Build kopiert jetzt v.correct_for -> der bestehende Heimat-Branch (ing.correct_for[heimat])
liefert die kuratierten Zweit-Laender: mehl->Ungarn, majoran->DE, safran->Iran, feta/lamm->
Bulgarien (statt Gravitations-Schaetzung). Datenkonsistenz geprueft (Moussaka feta/lamm).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 14:50:13 +02:00
Adminator bc468272ba Heli M10: A2-Baden-Zielpunkt zurueck auf die A2-Linie (DB-Wert lag daneben); Prod-SQL ergaenzt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 14:36:26 +02:00
Adminator 4976582400 Heli Routenplanung: Timing-basierte Wertung (3 Stufen) + Bonus vor rotem Hint
Pro Wegpunkt: 2=Treffer VOR der roten Einblendung (Bonus) · 1=waehrend der 10 s · 0=danach.
computePlanStars() aus Ø-Timing (5/4/3/2/1); Fehlklick-Abbruch bleibt 0. wpRevealAt merkt
Reveal-Zeitpunkt, onPlanClick klassifiziert. Bonus im Endbildschirm + Assessment (planBeforeRed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 14:32:02 +02:00
Adminator bf5b026b46 Heli-Wegpunkt-Fix: Prod-SQL persistent im Repo (Live-DB hat gleiche Luecke)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 14:04:32 +02:00
Adminator 77023ff7a3 Heli: fehlende Wegpunkte-Datenluecke behoben + Routing-Score = Klick-Genauigkeit
- 5 Wegpunkte fehlten in geo_waypoints (bodensee_bregenz/kaiser_kufstein/felswand_raetikon/
  schlucht_mellau/maria_saal) -> Missionen M5/M7 u.a. hingen nach dem vorletzten WP. In v3-DB
  eingespielt; Prod-SQL in .dontDeploy (Live-DB gleiche Luecke). waypoints.js: maria_saal ergaenzt.
- GGS_LIVE_STATE score: Routing zaehlt jetzt Klick-Genauigkeit (richtige/alle) statt Fortschritt
  -> kein roter Tag-Balken mehr am Planungs-Anfang (0 Klicks = grau, nicht rot).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 14:03:53 +02:00
Adminator aaa40e9f1a Heli Aktuell: letzten Einsatz in der Auftragswahl behalten
game.html: bei Mission-Ende Snapshot game.lastResult (Start/Landung/Gesamt); GGS_LIVE_STATE
zeigt in mission/briefing den letzten Einsatz statt leerer Spalten. teacher.html Status:
"✓/⚠ letzter Einsatz" wenn Werte aus dem letzten Lauf stammen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 13:57:57 +02:00
Adminator 0d9481cae2 Tag-Ansicht: pausierte Zeiten bleiben als Verlauf stehen (verschwinden nicht mehr)
live-client loggt Pausen-Spannen (__pauseSpans: {s,e}), live.php reicht sie durch,
renderLiveSummary zeichnet jede als bleibendes halbhohes Segment im Tag-Balken
(offene/laufende Pause blinkt). Fallback fuer Sim-Pause via phase bleibt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:53:07 +02:00
Adminator 0d765961af Idle-Pause fuer Heli funktionsfaehig + iframe-aware Interaktionserfassung
- Interaktionen aus gleich-origin iFrames (Heli-Start/-Flug/-Landung) zaehlen jetzt
  (periodisches _hookFrame), plus postMessage {type:'ggs-activity'} + __GGS_LIVE__.ping().
  Aktives Steuern gilt nicht mehr faelschlich als idle.
- EVENTS erweitert (keyup/touchmove/pointermove). Heli in IDLE_PAUSE_SIMS aufgenommen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:50:30 +02:00
Adminator 7986bb2eb6 Heli: Treibstoff kann leer werden (1★-Takeover) + Live-Score fuer Tag-Farbe + Aktuell-Status/Phase
- start.html: Sprit-Floor 0.05->0; Treibstoff-leer loest Chefpilotin-Takeover aus (stars:1)
- game.html: GGS_LIVE_STATE liefert progressiven score (Routing/Start/Landung/Gesamt) -> farbige Tag-Balken
- teacher.html: Phasen-Map + Status-Spalte fuer mission/briefing/unterwegs (kein leeres "...")

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:48:26 +02:00
Adminator 6dfcf4d57f Idle-Pause vorerst NUR in Klima (per-App-Freischaltung)
Die plattformweite Idle-Pause stoerte passive/iframe-Phasen (Heli-Flug: aktiv gesteuert,
aber Steuerung im iframe/Halte-Taste zaehlte nicht als Interaktion -> Fehlpause).
Jetzt Allowlist (klima/klima-3d) bzw. window.GGS_IDLE_PAUSE=true. Andere Apps: keine
Auto-Pause, bis sie dort einzeln getestet + die Interaktionserfassung angepasst ist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:27:01 +02:00
Adminator 0532327e6a Heli: Onboarding-Zurueck-Button + Routen-Card-Sicherheitsnetz (ohne Ton)
- Onboarding: "Zurueck"-Button (ab Schritt 2, prevHeliOnboarding)
- Routenplanung: planInstruction-Card erscheint garantiert auch ohne Ton / bei
  Audio-Ladefehler (Fallback + Timeout-Netz); bleibt bis zum Wegpunkt-Fund stehen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:25:08 +02:00
Adminator 5d79fa3c3a Klima: Flut-Bewertung ans 40%-Spielziel angeglichen
Flut-Score (End- + Live-Score in game-2d/3d) = max(0, 25*(1-Flut/50)): 0% volle 25 Pkt,
40% noch ~5 Pkt, erst ~50% gegen 0 (statt 0 schon ab 31%). Lehrer-Geflutet-Ampel gruen
<25 / gelb <=40 / rot >40. Klima-Stimmung nutzt jetzt den (fairen) Score.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:19:41 +02:00
Adminator c9eb0e7764 Cockpit: "Empfohlene Aktivitaet fuer dich" zweigeteilt - HEUTE (oben) + insgesamt (darunter)
HEUTE triagiert exakt gleich (support/more/work/good/idle), aber nur auf die heutigen
Laeufe (Erfolg = Ø der heutigen Scores aus summary-Endpoint). Karten-Renderer in
_ivTriageCards ausgelagert + wiederverwendet. Neuer summary-Fetch im Promise.all.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:16:10 +02:00
Adminator 3c28794012 Tag-Ansicht: pausierte Laeufe als halbhoher weiterlaufender Balken
live.php meldet paused (Idle-Pause/Sim-Pause/phase=paused) + activeUntilMs (letzte
Interaktion). renderLiveSummary: Hauptbalken volle Hoehe bis Pausenbeginn, danach
halbhoher gedaempfter "Pausen-Schwanz" der mit der Zeit weiterwaechst. Legende + tz.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 12:02:27 +02:00
Adminator 5633d3f9f9 Lehrer-Live-Zeiten fest auf Europe/Vienna (Server laeuft UTC) -> immer oesterreichische Zeit
_hhmm/_vdt/_fmtHM formatieren mit timeZone Europe/Vienna; _asMs normalisiert Epoch UND
MySQL-UTC-Strings. Betrifft Tag-Achse+Balken, Session-Detail, "Heute erledigt", Cockpit
"zuletzt aktiv", Reflexionen, letztes Lebenszeichen. Vorher zeigte new Date().getHours()
je nach Geraet evtl. UTC.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 11:55:44 +02:00
Adminator e4b877de4b Tag-Ansicht: Zeitachse hugt die Aktivitaet (Start am ersten Spiel statt gerundeter halber Stunde)
Vorher rundete winStart auf 30-min + 15-min-Polster -> bis zu 45 min leerer Platz vor
dem ersten Balken (z.B. Spiel 09:44, Achse begann 09:00). Jetzt winStart = erstes Spiel
minus 4 min, Marker adaptiv auf sauberen Uhrzeiten (15/30/60-min je nach Spanne).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 11:48:45 +02:00
Adminator 550a35eae8 Klima Aktuell: Bevoelkerungs-Balken relativ zur Startbevoelkerung (klemmte vorher bei 100%)
Skala war fix 1500-4500 -> alle Populationen (5000-8800) klammerten bei 100%. Jetzt
relativ zum Level-Start (6000/7000), 30%-160% -> unter Start rot, gewachsen gruen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 11:45:21 +02:00
Adminator 47adf0497d Klima: Geflutet an Meeresspiegel koppeln (kein Deckel-Plateau) -> Zahl passt zur Karte
floodedPct = sea*0.45 + max(0,sea-prot)*1.1. Vorher deckelte der Strand-Anteil bei
12%, sobald Schutz das Inland trocken hielt -> alle Spieler zeigten 12% egal wie das
Klima stand. Die Karte zeichnet die Flut aber aus seaLevelCm -> Zahl und Bild liefen
auseinander. Jetzt steigt die Zahl stetig mit dem Meeresspiegel (Klimafolge), Schutz
daempft nur den Zusatzschaden. Node-validiert: gutes Klima=niedrige Flut, hohe Temp=
hohe Flut, gleiche-Tick-Spreizung statt Plateau.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 11:43:58 +02:00
Adminator 48971b4588 Plattformweit: Idle-Pause-Overlay nach 3 min Untaetigkeit mit "Weiter"-Button
live-client.js (laedt in JEDER Sim): nach 3 min ohne Interaktion sichtbare Pause
(friert Aktivzeit ein -> Idle zaehlt nicht als Arbeitszeit), Weiterarbeiten per
Klick. Heartbeat meldet __paused/__idlePaused. Kein Sim-Code noetig.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 23:32:50 +02:00
Adminator 2386756a20 Klima: Geflutet-Kurve stetig + Schutz wirksam (Rebalance) · Lehrer-Cockpit "Nicht aktiv" responsiv
- engine.js: floodedPct steigt jetzt stetig mit dem schutzbereinigten Meeresspiegel statt bei 15% zu plateauen. Guter Schutz haelt das Inland lange trocken (effRise = sea - prot*0.85), Strand-Verlust gedeckelt bei 12%. Downstream mitrebalanciert: Pop-Verlust-Multiplikator 5->3, Wachstums-Schwellen 15/35, Flut-Events 8-20/40, Ende bei >60. Node-validiert: guter Spieler gewinnt + Bevoelkerung waechst (statt Kollaps), Flut diskriminiert gut/mittel/schlecht.
- teacher.html: iv-prow/iv-cols Grid flexibel (Name minmax(0,1fr) + Ellipsis, Datenspalten auto) -> "Nicht aktiv"-Liste laeuft nicht mehr aus der Karte.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 23:29:39 +02:00
Adminator 0c4fb84606 Lehrer-Live: Avatar-Slug (avatar:xxx) wird als Bild gerendert statt als Rohtext (Reflexionen + Session-Detail)
Gemeinsamer _avatarHtml-Helper: erkennt Slug in avatar_slug ODER als "avatar:<slug>" im emoji-Feld.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 23:21:32 +02:00
Adminator 2160a99896 Lehrer-Live: laufende Klima-Balken farbig (Ampel) + "Heute bereits erledigt" zeigt alle heutigen Durchgaenge
- klima game-2d/3d: GGS_LIVE_STATE liefert laufenden Punktestand (score, gleiche Formel wie Endbewertung)
- live.php summary: laufende Sessions jeder Sim bekommen Ampel-Score (nicht mehr nur Farmer) -> Tag-Ansicht faerbt laufende Balken statt grau
- teacher.html _renderInactiveToday: zeigt jetzt ALLE heute abgeschlossenen Laeufe (auch von gerade aktiven Schueler:innen); nur das laufende Spiel bleibt oben. Titel -> "Heute bereits erledigt"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 23:19:23 +02:00
Adminator 8cc48b1bc6 Klima: Aktuell-Linien gruen->rot (CO2/Temp/Geflutet/Budget/Bev.) + "Nochmal spielen" setzt wirklich zurueck
- teacher.html: LIVE_PRIMARY_FIELDS.klima Kennzahlen mit _liveBar-Ampel (absolute Skalen), _liveBar +Nachkomma-Param; tick-Spalte entfernt (redundant zu Jahr)
- game-2d/3d: beendete Laeufe (phase=end) werden beim Resume verworfen -> "Nochmal spielen"/erneutes Oeffnen startet frisch statt im Endbildschirm

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 17:17:33 +02:00
Adminator eb67cbc79f Aktuell/Fortschritt: "Heute bereits aktiv" mit allen Aktivitaeten pro Name
Umbenannt von "Heute nicht mehr aktiv"; zeigt jetzt ALLE heutigen Aktivitaeten
pro Schueler:in (group by name, eine Zeile je Aktivitaet, Trennlinie zwischen
Personen) mit Uhrzeit + Leistung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 16:47:52 +02:00
Adminator 3c856ff5ce Aktuell + Fortschritt: zweite Tabelle "Heute nicht mehr aktiv" darunter
Unter den aktiven Schueler:innen eine eigene Tabelle (gleiche Form): wer HEUTE
schon gespielt hat, gerade aber offline ist -> Zuletzt aktiv (Uhrzeit),
Aktivitaet (Sim), Leistung (Score-Prozent, Ampelfarbe). Reusable
_renderInactiveToday(activeSet), gespeist aus dem summary-Endpoint (heute),
laufende/online ausgenommen. In renderLive und renderLiveCompare eingehaengt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 15:21:51 +02:00
Adminator 64a9a62157 Gesamt/Fleiss: laufende Sessions als blinkende Saeule im aktuellen Bucket
Statt separatem Top-Streifen (rueckgebaut): results.php view=fleiss spielt
laufende live_sessions in den aktuellen Bucket (Stunde/Wochentag/Tag/Monat) ein,
markiert ihn `live`. renderFleiss laesst diese Saeule blinken (roter Rahmen).
So sieht man Bens laufendes Spiel direkt bei "Fleiss pro Schueler*in".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 15:02:19 +02:00
Adminator ad8c6b7d7e Gesamt: "Jetzt live"-Streifen oben (laufende Spiele, blinkend)
In Ergebnisse/Gesamt fehlten laufende Sessions (Fleiss baut nur auf fertigen
Laeufen). Neuer blinkender Live-Streifen ganz oben aus live_sessions: Name +
Sim-Symbol + Laufzeit, Klick = zuschauen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 14:55:32 +02:00
Adminator 71226581fa Tag-Ansicht: laufende Spiele als langsam blinkende Bloecke
Running-Balken (isLive/running) blinken jetzt sanft (_tagblink 1.8s), damit
laufende Spiele klar von fertigen zu unterscheiden sind. Breite = Spieldauer
(waechst mit der Zeit) war bereits so.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 14:47:51 +02:00
Adminator 540b27a2bd Cockpit: "Heute in der Klasse"-Zeile ganz oben in der Klassenuebersicht
Immer sichtbare Live-Zeile ueber den Empfehlungen: wie viele gerade aktiv +
welche Sims, und wer JETZT Hilfe braucht (needsHelp) als klickbare Chips mit
Klartext-Grund (z.B. "Ben - Trefferquote 10 %"). Quelle: cockpit.students.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 14:30:07 +02:00
Adminator 5635fa26b4 Lehreransicht: Ampel Farmer=Trefferquote, Vergleich->Fortschritt+Qualitaet, Mini-Balken ueberall
- _liveMood: farmer-Fall (hit_rate >=60 gruen / >=30 gelb / sonst rot) -> Ampel
  spiegelt Qualitaet, nicht mehr nur Fortschritt.
- qualityScore: farmer hit_rate -> "Qualitaet"-Spalte im Fortschritt-View gefuellt.
- "Vergleich"-Button/Titel -> "Fortschritt (& Qualitaet)".
- "Aktuell"-Tabelle: Mini-Balken jetzt fuer ALLE Zahlenspalten aller Sims
  (relativ zum Spalten-Max, neutral), Spalten mit eigenem Balken ausgenommen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 14:26:47 +02:00
Adminator 4e38b27c64 Tag-Ansicht: echte Spieldauer + Ampelfarbe nach Erfolg + Sim-Symbol
Bug: fertig gespielte Laeufe (Farmer-Endbericht = 1 Assessment) erschienen als
kurzer "Abbruch"-Balken (Dauer 0). Fix:
- live.php summary: nutzt duration_ms -> Balken decken die echte Spielzeit ab und
  fluchten am Start; kein Falsch-Abbruch mehr. Neues Feld `score` (0-100) je
  Session (Score/Sterne); laufende Farmer-Sessions bekommen hit_rate als Live-Score.
- teacher.html Tag-Balken: einheitliche Hoehe (Hoehe raus), Farbe = Ampel nach
  Erfolg (gruen->rot), App-Farbe ersetzt durch Sim-Symbol; Klick = Details.
  Legende angepasst.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:56:47 +02:00
Adminator 85ee58c56d Farmer: "Braucht Hilfe" auch bei schlechter Trefferquote (nicht nur cash<0)
Ben spielt bewusst schlecht (hit_rate ~10%), Konto aber wieder im Plus -> blinkte
nicht. needsHelp (teacher.html client + live.php server) jetzt: cash<0 ODER
(attempts>=6 UND hit_rate<30). Faengt dauerhaft falsche Boden/Klima-Wahl; Clara
(hit 75, 3 Krankheiten) bleibt bewusst ruhig.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:41:39 +02:00
Adminator fecd8bb9c9 Textsystem: Bis-Strich mit Leerzeichen (Zahl – Zahl) per Agent-Sweep
562 Ersetzungen in 50 Dateien: Halbgeviertstrich zwischen zwei Ziffern (=
"bis"-Bereich) bekommt Leerzeichen davor/danach (3–4 -> 3 – 4). Regex
/([0-9])\s*–\s*(?=[0-9])/ auf Rohtext (format-erhaltend, CRLF/Einrueckung
unveraendert), Bindestriche in Woertern und Minuszeichen unangetastet, alle
JSON weiter gueltig. Energiemanager-Zeitbloecke sind Display-Labels (kein
Logik-Key) -> safe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:38:19 +02:00
Adminator 9c99359d9c Farmer-Fix: Klima-Fallback laengengrad-bewusst + "Vernalisation" ersetzt
- defaultZoneByLatitude: bei 32-38 Grad nicht mehr pauschal "mittelmeer" (das
  gab kontinentalem Innerasien wie Westchina faelschlich Mittelmeerklima ->
  "Mediterraner Reisanbau" in Xinjiang). Jetzt nur in echten Mittelmeer-
  Laengenfenstern (Mittelmeerbecken/Kalifornien/Chile/Kap/SW-Australien),
  sonst "wueste". lon wird jetzt an die Funktion uebergeben.
- crops.json: Weizen-Fachbegriff "Vernalisation" durch "kuehle Winter, die der
  Winterweizen fuer die spaetere Kornbildung braucht" ersetzt (Thomas: gehoert
  nicht ins Lehrwerk).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:25:57 +02:00
Adminator b32097b617 Farmer-Fix: Begruendungstext passt jetzt zur echten Klimazone (nicht mehr zufaellig)
Bug: Kamel in tropischem Brasilien zeigte "Polargebiet/Permafrost", weil der
generische N2-Pool tropisch+polar mischt und pickFromPool zufaellig zog. Ebenso
"Kamele in Nordeuropa" auf einem Feld in Suedamerika (fester Regionsname).
- engine.js: pickZoneAware() waehlt per Klima-Stichwoertern (ZONE_KEYWORDS) den
  zur Zone passenden Grund-Text statt zufaellig; Fallback = alt.
- crops.json: Kamel-N1-Text regions-neutral ("viel zu feucht" statt "Nordeuropa").
S1-Erfolgstexte mit Regions-Beispielen (Reis/Kaffee/Datteln) bewusst belassen
(Vergleich auf passendem Feld, didaktisch ok).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:19:32 +02:00
Adminator 257b5e5099 Lehreransicht "Aktuell": Mini-Balken unter den Zahlen (Farmer-Spalten)
Kleine Balkengrafik unter jedem Zahlenwert: bounded Metriken (Jahr/Trefferquote/
Sorten absolut zur Skala) + offene Werte (Konto/Laender/Felder/Versuche/CO2)
relativ zum groessten Wert der Spalte ueber alle Schueler:innen -> auf einen
Blick "wer liegt vorn". Konto signiert (rot bei minus), CO2/Krankheiten
invers (rot = mehr). Helfer _liveMiniBar/_liveBarColor, colMax pro Spalte.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:03:29 +02:00
Adminator 532b5471ec Lehreransicht: Farmer-Spalten in "Aktuell" uebersetzt statt roher Keys
LIVE_PRIMARY_FIELDS um farmer-Eintrag ergaenzt: Jahr /10, Markt, Konto (rot bei
minus), Trefferquote (Balken), Sorten /10, Laender, Felder, Versuche, CO2 kg,
Krankheiten (rot bei >0). Redundante/interne Keys (phase, market-id, progressPct,
simId, timestamp) fallen weg. Vorher fiel die Tabelle auf rohe englische Keys.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 11:58:45 +02:00
Adminator ff751f3a05 Farmer: Onboarding-Schritt korrigiert - keine Geraete, Sorten werden freigeschaltet
"Ertraege verkaufen, in Geraete und Sorten investieren" -> "Ernten und
verkaufen - mit den Jahren werden neue Sorten freigeschaltet". Es gibt keine
Geraete-Mechanik, und Sorten werden automatisch (nach 3 Jahren) freigeschaltet,
nicht gekauft.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 11:53:56 +02:00
Adminator 714abc026a Farmer: Intro-Satz korrigiert - "Hoefe auf der ganzen Welt"
"Du bewirtschaftest einen Hof" -> "In dieser Simulation bewirtschaftest du
Hoefe auf der ganzen Welt" (die Sim spielt weltweit, nicht auf einem Hof).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 11:52:38 +02:00
Adminator 8c316f22e8 Weltkueche: Marillenknoedel auf reinen Topfenteig (Erdaepfel raus) + Panel final
- wachauer-marillenknoedel Rezept-Schritt 1: Erdaepfel entfernt, klassischer
  Topfenteig (Topfen/Ei/Butter/Mehl/Griess). Passt jetzt zu den ings.
- Admin-Maengelliste: komplett abgearbeitet markiert; mediterrane Kraeuter
  bleiben (Thomas-Entscheidung).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 11:49:33 +02:00
Adminator 8ffc43d7b2 Weltkueche: Maengelliste abgearbeitet (14 Zutaten-Fixes) + Guanciale neu
Zutaten, die im Rezept nicht vorkamen/falsch waren, korrigiert:
- raus: Apfelstrudel(zitrone,essig), Sauerbraten(mehl), Pierogi(milch),
  Gulasch(tomaten), Guacamole(olivenoel), Groestl(kuemmel)
- ersetzt: Kirschtorte/Zuercher/Quiche milch->sahne, Pizza hartweizen->mehl
  (Weichweizen; hartweizen bleibt bei Carbonara=korrekt Durum), Gulasch
  butter->oel, Curry+PadThai olivenoel->oel, Carbonara speck->GUANCIALE (neu).
- guanciale (NEU, production-matrix): feste Herkunft Italien + Distraktoren.
Admin-Maengelliste als erledigt markiert; offen bleiben mediterrane Kraeuter
+ Marillenknoedel-Teig (Thomas-Entscheidung).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 01:17:01 +02:00
Adminator 9bc3ca7b26 Weltkueche-Admin: Maengelliste Zutaten vs. Rezept (manuelle Pruefung aller 30 Gerichte)
Panel oben im QA-Tool: Zutaten, die im Rezepttext nicht vorkommen oder falsch
sind (z.B. Sauerbraten/mehl, Kirschtorte/milch, Pizza/hartweizen, Carbonara/speck
statt Guanciale, Gulasch/tomaten+butter, Curry+PadThai+Guacamole/olivenoel).
Plus mediterrane-Kraeuter-Kandidaten und kleinere Rezept-Themen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 00:41:26 +02:00
Adminator 13f14c26a8 Weltkueche: 6 Zutaten mit fest verdrahteter Herkunft (Thomas-Vorgaben)
Kein Automatismus mehr - Zutat hat feste Laenderliste (correct) + feste
Distraktoren, die das Spiel 1:1 ausliest. Vorrang vor Consumer/Heimat.
- greyerzer (NEU, "Greyerzer & Vacherin"): Schweiz+Frankreich -> ersetzt den
  mozzarella-Hack im Fondue (Signatur entfernt, Rezept nannte Gruyere+Vacherin
  schon korrekt).
- hefe: Oesterreich+Frankreich | lamm: Neuseeland+UK (Import, nicht Griechenland)
  tomaten: Niederlande+Spanien | schmand: Oesterreich+Deutschland
  fischsauce: Thailand+Vietnam (nicht Italien).
game.html: schlanker Auslese-Zweig fuer `correct`/`distractors` (isWorldIngredient
+ ING-Build + Aufloesungstext). admin spiegelt als "Feste Herkunft".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 00:35:24 +02:00
Adminator d7dd3f9de5 Weltkueche: Cache-Busting (no-store) fuer die Daten-Fetches im Spiel
Damit das Spiel nach einem Deploy nie eine gecachte dishes/production-matrix
zeigt (gleiche Klasse Fix wie im Admin-Tool).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-21 23:55:33 +02:00