Las etiquetas de emojis existentes aparecen como nuevas en el editor; las nuevas desaparecen tras publicar

He encontrado un comportamiento inconsistente con las etiquetas de emoji en el compositor de temas y lo he reproducido en la rama main sin modificar, en el commit 802125b979b5bb848a7cfc52409ef3176ffd4d82.

Para una etiqueta de emoji existente, escribir su nombre puede mostrar la opción Crear en lugar de la etiqueta existente y su recuento de uso. Seleccionar esa opción y publicar aún así adjunta la etiqueta existente. Una etiqueta de emoji realmente nueva es un caso diferente: se puede seleccionar en el compositor, pero desaparece después de publicar.

Para reproducir el problema de la etiqueta existente:

  1. Utilice un sitio con una etiqueta de emoji existente, como 😊, y otras etiquetas más frecuentemente usadas.
  2. Abra el compositor de temas e introduzca el nombre de la etiqueta de emoji.
  3. Si esa etiqueta está fuera del límite de etiquetas populares devueltas, el menú desplegable muestra una opción de creación y etiquetas populares no relacionadas, sin el recuento de uso de la etiqueta existente.
  4. Seleccione la opción de creación, publique y actualice la página. El tema sigue utilizando el registro original de la etiqueta.

En una prueba aislada en el navegador, usé una etiqueta de emoji existente con un recuento de 17, una etiqueta no relacionada con un recuento de 100 y un límite de búsqueda de 1. El menú desplegable mostró Crear: '😊' y popular x100; después de publicar, la etiqueta de emoji existente se reutilizó correctamente. Sin un registro existente de 😊, la misma operación devolvió HTTP 200 pero no guardó ninguna etiqueta.

La causa está en DiscourseTagging.clean_tag, que se utiliza tanto para los términos de búsqueda como para guardar nuevos nombres. Elimina los caracteres de emoji. La búsqueda luego recurre a resultados populares, mientras que el guardado aún puede encontrar una etiqueta existente por su nombre original antes de limpiar los nuevos nombres.

Tengo un pequeño parche que preserva los grafemas completos de emoji reconocidos por los datos existentes de Emoji.unicode_replacements. Mantiene el filtrado ASCII existente y elimina caracteres inválidos del texto que no es emoji. También permite que las sugerencias de etiquetas deshabilitadas coincidan con el inicio de un nombre, ya que la expresión de límite de palabra actual omite nombres que comienzan con emoji, como 😊-restricted.

El parche modifica dos archivos de implementación y añade cobertura de regresión en tres archivos de prueba. No añade una migración de base de datos, cambios en el frontend, una nueva API ni otra caché de emoji.

Validación local: pasaron 572 ejemplos relacionados del backend y 8 ejemplos del navegador. Las pruebas del navegador verifican que una etiqueta de emoji existente muestre x17, y que tanto ella como una 😊 realmente nueva permanezcan después de publicar y actualizar.

Rama del parche:

Informes y discusiones relacionados:

Estos informes describen limitaciones anteriores de las etiquetas de emoji. Este parche aborda las fallas en la búsqueda y el guardado del compositor reproducidas anteriormente; no afirma resolver todos los problemas de las etiquetas de emoji.