Pro Anfrage eine Identität, nie ein globaler aktiver Lernender.
Lernvisite läuft mit einem gthread-Worker. Jede Anfrage wird zuerst in request_store.py an einen Benutzer gebunden: has_pack wird gelesen, dann erzeugt make_binding den LearningStore für genau diesen Benutzer. g.user ist eine aufgelöste Sitzungsidentität, kein globaler „aktueller Lernender“. Der alte globale Profil-Selektor wurde durch echte Sitzungsidentität ersetzt.
Ein Beispiel
Beim Start einer Lerneinheit (POST /api/session) nimmt der Store nur Themen dieses Benutzers an; ein fremdes topic_id wird mit „Bitte ein vorhandenes Thema auswählen“ abgelehnt.