Le rôle "admin" contournait entièrement l'isolation par projet
(core/auth_guard.py) : il pouvait ouvrir/modifier/supprimer le jeu de
n'importe quel autre compte en connaissant son slug, et la page d'accueil
listait sans filtrage tous les projets de tous les comptes.
- La propriété d'un projet se vérifie désormais sur le segment
"propriétaire" du slug (id du compte), pour tous les rôles y compris
admin — un slug "à plat" (sans compte associé) reste réservé à
l'admin, comportement historique conservé pour ce cas précis.
- routes/games/index.py ne liste plus que les projets du compte connecté.
- Le dossier propriétaire d'un projet est maintenant l'id numérique du
compte, plus jamais son email slugifié (visible en clair dans chaque
URL auparavant) — script de migration fourni et déjà exécuté sur les
données existantes.
- Changer d'email ne renomme plus aucun dossier (n'en dépend plus).
- Deux nouveaux tests de régression, fixtures corrigées en conséquence.
- README réécrit pour refléter l'état actuel du produit (jeu 2D
uniquement, plus de traces de l'ancien éditeur "document").
Comportement SYSTÉMATIQUE à chaque création de jeu (admin compris), pas
une formalité réservée à l'inscription : /onboarding (routes/onboarding/)
devient le point d'entrée unique — 4 cartes retournables (survol =
explication au dos), défilement horizontal animé vers le nom du jeu. Un
admin y repasse à volonté (pas de project_slug dédié, jamais bloqué/
redirigé vers un projet précédent) ; un compte "user" n'en a plus qu'un
créé d'office (routes/auth/register_2fa.py), guidé ici à la place.
- db/games/game_type_catalog.py : catalogue des 4 types (Quiz/
Embranchement-escape game/RPG/Créer mon jeu de A à Z), _meta['onboarding_type']
décide du "kind" du premier écran créé et si le tableau de bord complet
reste accessible.
- routes/games/game_dashboard.py, templates/game_dashboard_simple.html :
un type restreint (quiz/embranchement/rpg) voit désormais SON tableau
de bord (même route que "custom"), rendu en version simplifiée — juste
ses écrans en cartes avec un aperçu RÉEL du contenu (scène mise à
l'échelle par container query CSS, adaptée à la largeur réelle de la
carte). "+ Ajouter un écran" n'y propose pas de choix de type : imposé
par le projet (routes/screens/screens_new.py), verrouillé aussi côté
serveur.
- core/auth_guard.py : plus de blocage de game_dashboard par type — la
restriction se fait au rendu, pas à l'accès à la route.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>