Console d'instance
Réservée au rôle INSTANCE_ADMIN, qui n'existe que dans l'organisation système. Il ne s'agit pas d'administrer une organisation cliente — c'est l'objet de la page Administration — mais l'instance elle-même : ce qu'elle expose au public, qui peut y entrer, et ce qui y tourne.
L'accès à cette console exige un second facteur, et l'exigence est immédiate : le compte doit l'enrôler à sa première connexion, sans délai de grâce.
Supervision
Des comptages seuls — organisations, comptes, exercices, participants —, jamais de donnée personnelle. C'est ce qui permet de suivre la charge d'une instance sans lire le contenu de ses clients.
Annonce aux utilisateurs
Un bandeau visible de tous, y compris avant connexion : message, niveau (information, avertissement, alerte) et date d'expiration. Utile pour prévenir d'une maintenance. Retirer l'annonce le fait disparaître immédiatement.
Adresse publique de l'instance
Préfixe tous les liens envoyés par courriel — accès joueur, écran de salle, activation, réinitialisation. Réglable ici sans redéploiement ; ce réglage prime sur la variable APP_URL. L'origine réellement appliquée est affichée, ce qui évite de chercher pourquoi un lien pointe ailleurs.
Envoi de courriel
Les réglages SMTP saisis ici priment en bloc sur les variables d'environnement dès qu'un hôte est renseigné, et le mot de passe est chiffré avant d'être stocké — contrairement à .env, où il est lisible par quiconque peut faire un docker inspect. Envoyer un test propage l'erreur du serveur telle quelle : c'est l'objet d'un test.
Sans serveur de courriel, les invitations sont impossibles et le formulaire disparaît : l'interface ne propose pas un envoi qui n'aurait pas lieu. Les comptes se créent alors directement, avec un mot de passe temporaire affiché une seule fois.
Inscription publique
Trois modes : fermée (défaut), modérée (une demande est déposée, l'administrateur l'approuve ou la refuse avec un motif obligatoire), ou libre-service. Le visiteur ne saisit que le nom de son organisation : l'identifiant public en est déduit automatiquement.
En mode modéré, chaque demande déposée avertit les administrateurs d'instance par courriel : organisation, contact, message du demandeur, et l'adresse de la console. Sans cet avis, une demande attendait qu'un administrateur pense à ouvrir sa console — et la modération, faute d'être vue, revenait à un refus silencieux.
Un courriel par destinataire, jamais un envoi groupé : les administrateurs d'une instance n'ont pas à découvrir la liste des autres dans un en-tête.
Sans serveur de courriel configuré, la demande est enregistrée quand même et l'avis est seulement journalisé : perdre la demande d'un visiteur parce qu'un serveur SMTP ne répond pas serait le pire des deux maux.
Organisations
Créer, régler les plafonds d'usage (exercices, membres, stockage, rétention propre), suspendre et supprimer.
- Une organisation suspendue bloque aussi ses joueurs et ses écrans de salle, avec le motif affiché. L'effet est différé de 30 secondes au plus : l'état est mis en cache, arbitrage assumé pour ne pas relire la base à chaque requête.
- Observer / Intervenir bascule dans une organisation cliente. La bascule est tracée, et en lecture seule par défaut.
- La suppression redemande l'identifiant public en confirmation, et efface tout en cascade.
- Réarmer le second facteur d'un membre demande un motif, qui est tracé.
Bac à sable public
Fermé par défaut. L'ouvrir expose une route publique et non authentifiée : la confirmation est explicite, et l'action est tracée.
Deux réglages, bornés pour qu'ils ne puissent pas vider de leur sens la purge et le plafond : la durée de vie d'une séance (5 minutes à 24 heures) et le nombre de séances simultanées (50 au plus). Un champ vide applique la valeur par défaut.
La valeur est enregistrée quand vous quittez le champ, pas à chaque frappe — sans quoi il serait impossible de saisir un nombre dont le début est hors bornes.
Les séances en cours
Une organisation éphémère est exclue de la liste des organisations clientes — ce n'en est pas une. Ce tableau est donc le seul endroit où l'on voit ce que le bac à sable fait tourner : scénario, identifiant public cliquable, rôles pris sur le total, dernière activité, temps restant. Il se relit tout seul.
« Jamais ouverte » distingue une séance abandonnée d'une séance active : un rôle peut avoir été pris sans que personne n'ait suivi son lien.
Deux gestes, tracés tous les deux :
- +30 min repousse l'échéance. Les accès des joueurs sont repoussés avec elle — sans cela, la page de séance resterait ouverte pendant qu'ils se feraient refuser à la porte. Jamais au-delà de 24 heures au total.
- Fermer supprime la séance sur-le-champ, avec tout son contenu, après confirmation : des joueurs sont peut-être en train de jouer.
Ces gestes ne peuvent atteindre que des organisations éphémères : une organisation cliente y est hors de portée.
Signalements de bug
N'importe quel compte, quel que soit son rôle, peut signaler un défaut depuis l'icône 🐞 de l'en-tête : celui qui bute sur un problème est rarement l'administrateur, et l'obliger à passer par quelqu'un revient à ne jamais être prévenu. La page courante et le navigateur partent avec le message — sans eux, il faut rappeler l'auteur pour savoir où il était.
Les signalements sont enregistrés, et pas seulement envoyés : l'envoi de courriel n'est pas configuré sur toutes les instances, et un signalement qui n'existerait que dans un message serait perdu au moment même où il est écrit. Le courriel n'est qu'un avertissement, la table est la mémoire.
Ce panneau les liste, les ouverts d'abord. Chaque ligne se déplie sur le détail, et Marquer traité la referme — rouvrir efface la trace de traitement, qui ne doit pas laisser croire qu'une décision tient encore.
Journal d'instance
Toutes les actions sensibles y sont consignées avec leur auteur et, le cas échéant, leur motif : ouverture du bac à sable, suspension, bascule dans une organisation, réarmement d'un second facteur, prolongation et fermeture d'une séance. Il est purgé après 730 jours par défaut.
Réarmer un second facteur perdu
L'administrateur d'organisation peut être réarmé depuis cette console. L'administrateur d'instance, lui, n'a personne au-dessus de lui : la reprise en main passe par le serveur.
docker compose exec app node apps/api/dist/scripts/reset-mfa.js \
--email=root@exemple.org --confirm
La commande demande un accès au serveur et à la base — c'est précisément ce qui en fait un privilège acceptable.
Balayer les fichiers orphelins
Supprimer un exercice ou une organisation efface aussi les fichiers téléversés qui lui appartenaient : images publiées par les joueurs, pièces jointes, logo. C'est vrai des suppressions faites depuis la console, de la purge de rétention et de l'échéance d'une séance de découverte.
Les instances qui tournaient avant cette version ont accumulé les fichiers de tout ce qui avait été supprimé : la base ne les connaît plus, le disque les porte encore. Un balayage les retrouve et les efface.
docker compose exec app node apps/api/dist/scripts/balayer-fichiers.js
Sans argument, la commande mesure et ne touche à rien : elle indique combien
de fichiers sont orphelins et le poids qu'ils occupent. Ajoutez --confirm pour
les effacer.
docker compose exec app node apps/api/dist/scripts/balayer-fichiers.js --confirm
À lancer application arrêtée, ou en acceptant une fenêtre de quelques millisecondes : un fichier téléversé à l'instant même, dont la ligne n'est pas encore écrite, serait vu comme orphelin. Un balayage n'est pas une opération de routine — les suppressions courantes n'en ont pas besoin.
Le compteur Fichiers de la supervision donne l'état du disque avant et après.
Débloquer les connexions
La page de connexion est plafonnée à dix tentatives par quart d'heure et par adresse IP, pour freiner les essais de mots de passe.
Le piège tient à l'adresse : une cellule de crise, ce sont des gens dans la même pièce, derrière le même routeur. Pour l'application, ils n'ont qu'une seule adresse. Douze personnes qui arrivent un lundi matin, deux ou trois fautes de frappe, et les suivantes se voient refuser l'entrée quinze minutes durant — avec de bons identifiants.
Le bouton Débloquer les connexions, dans la supervision, remet les compteurs à zéro pour tout le monde. Il indique combien il en a effacés, et l'action apparaît au journal d'instance.
Débloquer ne la désactive pas : elle continue de s'appliquer, à l'identique, y compris en production. C'est une reprise en main, pas un interrupteur — au même titre que la remise à zéro du second facteur.
Serveur MCP
La supervision compte les jetons d'agent actifs dès lors que la surface est ouverte. Ce qu'elle recouvre, et comment l'ouvrir, sont décrits sur la page Serveur MCP.