Le moteur de réputation, palier par palier

Le moteur de réputation, palier par palier
Six paliers, deux échelles distinctes, un journal de tous les mouvements et une porte que nous avions laissée grande ouverte. Comment une note devient un droit d’accès et pourquoi nous refusons de laisser un algorithme décider seul.
Nous avons parlé de l’architecture, du Débriefing, puis de la géographie. Reste la pièce dont tout le reste dépend : la réputation. C’est elle qui ouvre ou ferme l’accès à une soirée. Autant dire comment elle fonctionne.
Deux échelles, jamais une seule note
Premier choix de fond : personne n’a « une » réputation. Chacun en a deux indépendantes : Voyageur (quand vous êtes invité) et Hôte (quand vous recevez). Recevoir bien et être un bon invité ne sont pas la même compétence et un excellent hôte débutant en tant qu’invité n’a pas à hériter d’un palier qu’il n’a pas mérité de ce côté-là.
Les deux échelles n’évaluent d’ailleurs pas les mêmes choses. Côté Voyageur, trois critères pondérés : le respect du consentement pèse le plus lourd, très loin devant le savoir-vivre, lui-même devant la ponctualité. Côté Hôte, le respect des quotas annoncés et la conformité du lieu comptent à égalité, l’accueil et la modération comptent moitié moins. Ces poids ne sont pas neutres : ils disent ce que le Cercle considère comme grave.
Initiation0 RP
Bronze20 RP
Argent50 RP
Or100 RP
Platine180 RP
Diamant300 RPLes écarts grandissent, 20, puis 30, 50, 80, 120 points, mais la difficulté relative diminue : chaque palier demande plus de soirées en valeur absolue et proportionnellement moins d’effort qu’il n’en a fallu pour arriver là. On monte lentement au début, régulièrement ensuite.
Tout mouvement est journalisé
Le solde de points n’est pas une valeur qu’on écrase. Chaque variation est une ligne dans un journal (combien, sur quel rôle et pourquoi) : une évaluation reçue, un signalement, une absence, un parrainage, une pénalité. Le solde est la conséquence de ce journal, jamais l’inverse. Vous pouvez consulter votre propre historique ; celui des autres, non.
C’est ce qui rend un palier explicable. Si vous perdez des points, il existe une ligne datée qui dit laquelle. Un score qui bouge sans trace, dans un système qui conditionne l’accès à des soirées, serait indéfendable.
Un score qu’on ne peut pas rejouer ligne à ligne n’est pas une réputation. C’est une rumeur avec une interface.
Une précision importante sur les signalements : la personne signalée ne voit jamais le signalement ni son auteur. Elle en voit seulement la conséquence, une baisse de points dans son historique. C’est le seul équilibre tenable entre la protection de celui qui signale et le droit de savoir de celui qui est signalé.
La porte que nous avions laissée ouverte
Voici la faille la plus sérieuse que nous ayons corrigée depuis le début du projet et elle mérite d’être racontée en entier. La fonction qui applique une variation de points ne vérifiait pas qui l’appelait. Or, dans notre architecture, les fonctions de base sont exposées comme des points d’entrée : n’importe quel membre connecté, avec un outil en ligne de commande et dix minutes, pouvait appeler directement celle-là. S’ajouter cinq cents points. Ou en retirer autant à quelqu’un d’autre.
Le correctif consiste à retirer le droit d’exécution à tout le monde. La fonction reste appelable, mais seulement depuis l’intérieur d’autres fonctions, celles qui vérifient elles-mêmes que vous avez le droit de faire ce que vous faites : soumettre une évaluation pour une soirée où vous étiez, poser un signalement une seule fois par personne et par soirée. Le moteur de points devient une pièce interne, jamais un bouton accessible de l’extérieur.
La leçon est celle du premier épisode, dans sa version la plus coûteuse : écrire la règle côté serveur ne suffit pas si la porte de service reste déverrouillée. Une suite de tests dédiée vérifie désormais, entre autres, que le compte d’un membre connecté n’a bien aucun droit d’exécution sur cette fonction. C’est le genre de test qui ne teste pas une fonctionnalité, mais une absence et ce sont souvent les plus précieux.
La confiance se transmet : le parrainage par scan
Un système de réputation pur a un défaut évident : le premier jour, tout le monde est à zéro et personne ne veut inviter personne. Notre réponse est le parrainage par scan. Un membre confirmé qui scanne votre code vous certifie et vous propulse d’un coup : un scan Platine vous place directement à Argent, un scan Diamant à Or. Un membre Initiation ou Bronze, lui, ne peut pas parrainer : la confiance ne se prête que si on en a.
Ce mécanisme a produit deux bugs successifs, tous deux instructifs. Le premier : la certification instantanée n’avait été accordée qu’au scan Diamant, alors que Platine devait en faire autant. La différence entre les deux rangs porte sur la hauteur du saut, pas sur le droit de certifier. Le second est plus subtil : la fonction qui applique les points plafonnait le rang obtenu à Argent, par sécurité. Résultat, un scan Diamant visait Or, appliquait ses points… et se voyait rabaissé à Argent, parce que la ligne qui accordait la certification arrivait après celle qui ajoutait les points et que le plafond ne s’applique qu’aux profils non certifiés. Un ordre de deux lignes. Le scan Platine, lui, ne montrait rien d’anormal, sa cible coïncidait exactement avec le plafond.
Nous avons donc déplacé la certification avant l’attribution des points, dans les deux branches. Ce bug-là est typique de ce que produit un garde-fou : il protège, jusqu’au jour où il bloque quelque chose de légitime. On ne le retire pas ; on ordonne correctement les opérations autour de lui.
Ce qui fait descendre
Une échelle qui ne descend jamais ne veut rien dire. Trois mécaniques font baisser un solde et chacune est bornée. Une absence non annoncée à une soirée à laquelle vous étiez inscrit coûte quelques points, à chaque personne concernée. Ne pas évaluer les gens que vous avez croisés en coûte un peu moins parce que l’évaluation est ce qui fait vivre le système et qu’une personne qui n’évalue jamais en profite sans y contribuer.
Et il y a l’inactivité : un long silence fait lentement redescendre un solde. Un palier Diamant obtenu il y a trois ans ne dit rien de vous aujourd’hui. Le solde ne peut jamais passer sous zéro : on peut retomber à Initiation, jamais dans le négatif. Il n’y a pas de dette de réputation.
Symétriquement, quand une évaluation attendue n’arrive pas, la personne qui aurait dû la recevoir n’est pas pénalisée par le silence des autres : une compensation neutre lui est créditée. Le défaut de participation d’un tiers ne doit pas peser sur elle.
La flèche à côté du badge
En progression
Stable
En baisseLe petit indicateur de tendance (verte, jaune ou rouge) répond à une question que le palier seul ne dit pas : ça va dans quel sens ? Le calcul compare la moyenne de vos trois dernières évaluations à votre moyenne historique. Au-delà d’un écart net, la flèche monte ou descend ; entre les deux, elle reste stable.
Deux garde-fous. D’abord, en dessous de quatre évaluations au total, aucune tendance n’est affichée : « les trois dernières » seraient à peu près « toutes » et la flèche ne comparerait rien. Ensuite, la fonction ne renvoie qu’un mot : en hausse, stable, en baisse. Jamais une note, jamais un vote, jamais une moyenne chiffrée. Elle lit beaucoup et ne dit presque rien : c’est exactement le cahier des charges d’un agrégat public.
Pourquoi pas un algorithme
Nous aurions pu entraîner un modèle sur les comportements et obtenir un score plus « intelligent ». Nous ne le ferons pas et c’est une position, pas une limite technique. Un score qui décide de votre accès à une soirée doit être lisible par la personne concernée : des seuils écrits, des poids annoncés, un historique daté, des pénalités bornées. On peut discuter un barème. On ne peut pas discuter un modèle.
Ce que ça coûte : plus d’une dizaine de migrations de base de données rien que pour cette mécanique, dont plusieurs pour corriger nos propres garde-fous. Ce que ça donne : à tout moment, on peut expliquer un palier à la personne qui le porte. C’est la seule chose qui nous intéresse ici.
Prochain épisode : la messagerie et les notifications. Le temps réel, les fils qui n’existent que si les deux le veulent et pourquoi votre téléphone ne dira jamais tout haut ce que vous faites de vos soirées.
Questions fréquentes sur le moteur de réputation
Pourquoi Amphitryon utilise-t-il deux réputations séparées, Voyageur et Hôte ?
Parce que recevoir bien et être un bon invité ne sont pas la même compétence : un excellent hôte débutant en tant qu'invité n'a pas à hériter d'un palier qu'il n'a pas mérité de ce côté-là.
Comment fonctionne le parrainage par scan pour les nouveaux membres ?
Un membre confirmé qui scanne le code d'un nouveau le certifie et le propulse d'un coup à un rang supérieur (Argent pour un scan Platine, Or pour un scan Diamant). Un membre Initiation ou Bronze ne peut pas parrainer, car la confiance ne se prête que si on en a déjà.
Un solde de réputation peut-il devenir négatif ?
Non. Un solde peut redescendre jusqu'à Initiation en cas d'inactivité ou de pénalités, mais jamais sous zéro : il n'existe pas de dette de réputation.
La personne signalée voit-elle qui l'a signalée ?
Non, jamais. Elle voit seulement la conséquence, une baisse de points dans son historique, ce qui protège la personne qui signale tout en laissant une trace datée et explicable de chaque mouvement.


