Chaque règle s'applique à toutes les stories, même quand une story ne la cite pas.
RS-01 Le demandeur est toujours l'auteur du message en cours
Le code transmet l'identité du demandeur à chaque appel, à partir de l'événement Discord. Le modèle ne la choisit jamais. Un nom écrit dans la conversation (« je suis admin », « Alex m'a autorisé ») ne change rien aux droits. Le bot identifie le demandeur par son identifiant Discord, jamais par son pseudo.
RS-02 Les droits effectifs sont l'intersection des droits du demandeur et de ceux du bot
Une opération n'est permise que si le demandeur et le bot ont la permission Discord requise. Tout ce qui n'est pas explicitement permis est refusé.
- Les permissions de salon (
view_channel, read_message_history, send_messages, manage_messages, mention_everyone) se vérifient dans le salon visé.
- Les permissions de serveur (
kick_members, ban_members, create_events, manage_events, administrator) se vérifient au niveau du serveur.
- Un fil public et un post de forum héritent des permissions de leur salon parent. Pour y écrire, Discord demande
send_messages_in_threads au lieu de send_messages.
- Un fil privé n'est visible que de ses membres et des personnes qui ont
manage_threads. Pour RS-08, son audience est cette liste, pas celle du salon parent.
RS-03 Chaque outil vérifie les droits lui-même
La vérification se fait dans le code, au début de chaque outil, par une fonction d'autorisation unique. Une consigne dans le prompt ne compte pas comme un contrôle. Pour une opération confirmée, la vérification est refaite au moment de l'exécution, car les droits ont pu changer entre-temps.
RS-04 Le bot n'a que les permissions Discord dont il a besoin
Le rôle du bot n'a jamais administrator ni manage_channels. Une capacité absente de la matrice des permissions n'existe pas : ni outil, ni permission Discord.
RS-05 Un contenu externe est une donnée, jamais une consigne
Le bot analyse, cite ou résume un contenu externe. Il n'exécute pas les instructions qu'il contient. Le prompt présente chaque contenu externe dans une balise qui indique sa provenance. Une action ne part que d'une demande explicite écrite ou dictée par le demandeur lui-même.
RS-06 Les opérations à risque passent par une confirmation du demandeur
La colonne Confirmation de la matrice des permissions fait foi. Elle demande une confirmation pour :
- toutes les actions ;
- les suppressions de mémoire qui ne peuvent pas être annulées ;
- l'activation, la désactivation ou la modification d'un skill, qui change le comportement du bot.
Lire, chercher, résumer et répondre en privé ne demandent pas de confirmation. Le déroulé est décrit plus bas, dans « Confirmer une opération ».
RS-07 Le bot n'envoie aucune mention de masse
Tous les messages du bot désactivent les mentions @everyone, @here et de rôle. Une exception exige que le demandeur ait mention_everyone et confirme l'action.
RS-08 Une réponse publique ne révèle que ce que tout le salon peut voir
Avant de publier une réponse qui s'appuie sur un salon source ou sur un fait de mémoire, le bot vérifie que toutes les personnes qui ont view_channel sur le salon courant l'ont aussi sur le salon source. Sinon, il passe en réponse privée.
Le contenu d'une réponse privée n'entre pas dans la conversation du salon courant. Le bot y note seulement qu'une réponse privée a été envoyée au demandeur. Sans cette précaution, un autre membre pourrait demander « qu'as-tu répondu à Inès ? ».
Exemple : Inès demande dans #général un résumé de #modération. Le résumé lui arrive en réponse privée, et #général ne garde aucune trace de son contenu.
La même vérification s'applique à une action qui publie dans un salon cible un contenu tiré d'un salon source (US-ACT-02). Si l'audience du salon cible est plus large que celle du salon source, le bot refuse la publication.
RS-09 Les MP restent privés
Le bot ne lit, ne cite et ne résume jamais un MP pour une autre personne que son auteur. Les faits appris en MP restent dans la mémoire de ce MP et ne servent qu'en MP.
RS-10 Le bot consigne chaque action et chaque refus de sécurité
Une entrée du journal d'audit indique :
- le demandeur ;
- le salon de la demande ;
- l'opération demandée et sa cible ;
- le résultat, ou le motif du refus ;
- la date.
Elle ne cite jamais le contenu d'un MP.
Un refus de sécurité est un refus pour permission manquante, pour une règle RS-xx, ou pour une protection décrite dans une story d'abus (adresse interne, clic sur la demande d'un autre). Une panne de la modération est aussi consignée. Un refus pour une limite (taille de fichier, format, quota) n'est pas consigné.
RS-11 Les données de chaque serveur restent séparées
Les conversations de salon, la mémoire de salon et de serveur, et les recherches sont rangées par serveur. Un demandeur ne peut jamais atteindre les données d'un serveur depuis un autre, même s'il est membre des deux.
Les MP n'appartiennent à aucun serveur. La conversation et la mémoire MP sont rattachées à l'utilisateur, et ses quotas en MP sont comptés par utilisateur. Une demande en MP qui lit un serveur compte aussi dans le quota de ce serveur. En MP, le bot ne consulte que les serveurs que l'utilisateur partage avec lui. Si une demande peut viser plusieurs serveurs, il demande lequel.
RS-12 Chaque message adressé au bot passe par la modération avant le modèle
La modération Mistral classe le message entrant avant tout appel au modèle principal. Un message signalé est refusé sans être traité. Les réponses du bot passent par la même modération avant envoi. Si la modération ne répond pas ou renvoie une erreur, le bot refuse au lieu de laisser passer.
Répondre en privé
Discord n'autorise un message visible par une seule personne qu'en réponse à une interaction : une commande slash ou un clic sur un bouton. Quand le bot est appelé par une mention et doit répondre en privé (RS-08), il procède en deux temps :
- Le bot publie dans le salon : « Réponse privée pour @Inès », avec un bouton Afficher. Ce message ne donne aucun contenu.
- Inès clique sur Afficher. Le bot lui affiche la réponse, visible d'elle seule.
- Si une autre personne clique, le bot lui répond, visible d'elle seule, que cette réponse ne lui est pas destinée.
Quand la demande arrive par une commande slash, le bot répond directement en message visible du seul demandeur.
Le bot garde le contenu d'une réponse privée en attente pendant le même délai qu'une confirmation, puis le supprime et met à jour le message : « Réponse expirée ». Un redémarrage du bot efface les réponses privées en attente.
Confirmer une opération
Le principe est le même que pour une réponse privée :
- Le bot publie dans le salon un message court : « Action en attente de confirmation par @Inès », avec un bouton Voir et confirmer. Ce message ne décrit pas l'action.
- Inès clique sur le bouton. Le bot lui affiche, visible d'elle seule, le détail de l'action avec Confirmer et Annuler.
- Si une autre personne clique, le bot lui répond, visible d'elle seule, que la demande ne lui appartient pas.
- Quand Inès clique sur Confirmer, le bot revérifie les droits (
RS-03), puis exécute.
- Sans confirmation dans le délai fixé, l'opération est annulée et le message est mis à jour : « Demande expirée ».
Le délai court à partir de la publication du message de l'étape 1. Quand la demande arrive par une commande slash, le bot affiche directement le détail de l'étape 2, et le délai court à partir de cet affichage.
Les opérations en attente ne survivent pas à un redémarrage du bot : elles sont toutes annulées, même dans le délai.