J’ai constaté un comportement incohérent avec les balises émoji dans le composeur de sujet et je l’ai reproduit sur la branche main non modifiée, à la référence 802125b979b5bb848a7cfc52409ef3176ffd4d82.
Pour une balise émoji existante, la saisie de son nom peut afficher l’option Créer au lieu de la balise existante et de son nombre d’utilisations. La sélection de cette option et la publication du message associent néanmoins bien la balise existante. Le cas d’une balise émoji nouvelle est différent : elle peut être sélectionnée dans le composeur, mais disparaît après la publication.
Pour reproduire le problème lié aux balises existantes :
- Utilisez un site disposant d’une balise émoji existante, comme
😊, ainsi que d’autres balises plus fréquemment utilisées. - Ouvrez le composeur de sujet et saisissez le nom de la balise émoji.
- Si cette balise se trouve en dehors de la limite des balises populaires renvoyées, le menu déroulant affiche une option de création et des balises populaires non liées, sans indiquer le nombre d’utilisations de la balise existante.
- Sélectionnez l’option de création, publiez le sujet puis actualisez la page. Le sujet utilise toujours l’enregistrement de la balise originale.
Dans un test navigateur isolé, j’ai utilisé une balise émoji existante avec un compteur de 17, une balise non liée avec un compteur de 100, et une limite de recherche de 1. Le menu déroulant affichait Créer : '😊' et populaire x100 ; après publication, la balise émoji existante a été correctement réutilisée. En l’absence d’un enregistrement existant pour 😊, la même opération a renvoyé une réponse HTTP 200 mais n’a enregistré aucune balise.
La cause se trouve dans DiscourseTagging.clean_tag, qui est utilisé à la fois pour les termes de recherche et l’enregistrement des nouveaux noms. Cette méthode supprime les caractères émoji. La recherche bascule alors sur les résultats populaires, tandis que l’enregistrement peut encore trouver une balise existante par son nom original avant le nettoyage des nouveaux noms.
Je dispose d’un petit correctif qui préserve les graphèmes émoji complets reconnus par les données existantes Emoji.unicode_replacements. Il maintient le filtrage ASCII existant et supprime les caractères invalides du texte non émoji. Il permet également aux suggestions de balises désactivées de correspondre au début d’un nom, car l’expression régulière actuelle basée sur les limites de mots ne détecte pas les noms commençant par un émoji, tels que 😊-restricted.
Le correctif modifie deux fichiers d’implémentation et ajoute une couverture de régression dans trois fichiers de test. Il n’ajoute ni migration de base de données, ni modification du front-end, ni nouvelle API, ni autre cache émoji.
Validation locale : 572 exemples backend liés et 8 exemples navigateur ont réussi. Les tests navigateur vérifient qu’une balise émoji existante affiche x17, et que celle-ci ainsi qu’une nouvelle balise 😊 restent présentes après publication et actualisation.
Mise à jour — 23 octobre 2026
Le correctif a désormais été soumis sous forme de PR #44994 : FIX : Préserver les balises émoji lors de la recherche et de l’enregistrement et est prêt pour relecture.
L’intégration continue complète sur mon fork a réussi : les 10 jobs de la matrice de tests, le linting et les vérifications des licences.
Pour cette exécution, j’ai utilisé une branche de validation séparée contenant le même correctif et j’ai augmenté le délai d’expiration du job de test de 20/30 minutes à 90 minutes, car l’exécution précédente avait expiré sur le runner du fork. Les commandes de test, la matrice et les assertions sont restées inchangées. L’ajustement du délai d’expiration ne fait pas partie de la PR amont. La PR n’a pas encore été fusionnée ; l’intégration continue amont attend toujours l’approbation des mainteneurs.
Branche du correctif :
Rapports et discussions liés :
Ces rapports décrivent des limitations antérieures concernant les balises émoji. Ce correctif traite des échecs de recherche et d’enregistrement dans le composeur reproduits ci-dessus ; il ne prétend pas résoudre tous les problèmes liés aux balises émoji.