Démo SelfModerate
Une mini-communauté de 5 bots + toi. Tu votes, les scores bougent, le serveur détecte les attaques coordonnées en direct.
👍 ou 👎 modifie la réputation de la cible. Score capé à 30,
plancher à 0. Si tu downvotes @alice_toxique, son score baisse et, si assez
de monde fait pareil, elle perd son droit de vote puis est bannie.
Simulons une attaque coordonnée : 3 bots (@charlie, @dave, @alice) votent 👎
simultanément contre la même cible. L'algorithme détecte la coordination, annule les votes,
restore la réputation.
-1 en
moins de 60s contre la même cible. L'algorithme regarde les votes récents, identifie
la convergence temporelle + le graph d'invitations croisées entre voters, marque
les votes comme blocked = 1, reason = pack_voting, et restore la
réputation de la victime. Aucune IA. Juste du SQL.
Si un user descend sous certains seuils de réputation, les sanctions s'enchaînent automatiquement : perte du droit de vote à rep < 5, ban temporaire à rep = 0 (24h puis 7j puis 30j selon les strikes), ban permanent après 3 strikes.
-1 successifs espacés dans le temps (pour ne pas déclencher
pack-voting). Tu vois la réputation baisser, le moment précis où les droits
de vote sont retirés, puis le ban prendre effet avec sa durée. Pure mécanique
d'escalade de seuils.
Tentative d'upvoter la même cible 4 fois d'affilée. Les 3 premiers passent,
le 4e est bloqué : blocked_reason = upvote_farming. Règle :
plus de 3 upvotes mutuels en 60 jours = gaming du système.
applyVote() qui compte d'abord les upvotes antérieurs du même
voter vers la même cible sur 60 jours. À partir du 4e, vote enregistré mais
marqué blocked — il n'impacte pas la réputation cible. Ça empêche
deux users complices de se "prêter" des points entre eux.
Une fois un user banni, son ban a une fin. Pour la démo on peut avancer
le temps simulé. Quand le temps dépasse banned_until, le user
retrouve reputation = 20 et ses droits de vote, mais conserve
ses strikes (qui mènent à un ban plus long la prochaine fois).
À 90 jours sans incident → reset total des strikes.
tick.php incrémente le
simulated_time en base, puis scanne les users avec
banned_until < simulated_time et les débannit. La boucle
faute → sanction → délai → réparation est complète. Le système ne
punit pas à vie par défaut : il protège, puis laisse la chance de revenir.
Étape à venir (session 7) : démo binôme — comment SelfRecover + SelfModerate neutralisent ensemble une attaque Sybil que ni l'un ni l'autre ne pourrait bloquer seul. 1+1=3.