Я обнаружил некорректное поведение с эмодзи-тегами в редакторе темы и воспроизвёл его на неизменённой ветке main в коммите 802125b979b5bb848a7cfc52409ef3176ffd4d82.
Для существующего эмодзи-тега при вводе его имени вместо самого тега и количества его использований может отображаться опция Создать. Выбор этой опции и публикация всё равно привязывают существующий тег. Отдельным случаем является действительно новый эмодзи-тег: его можно выбрать в редакторе, но он исчезает после публикации.
Чтобы воспроизвести проблему со существующим тегом:
- Используйте сайт с существующим эмодзи-тегом, например
😊, а также другими, более часто используемыми тегами. - Откройте редактор темы и введите имя эмодзи-тега.
- Если этот тег находится за пределами возвращаемого лимита популярных тегов, выпадающий список покажет опцию создания и нерелевантные популярные теги, без указания количества использований существующего тега.
- Выберите опцию создания, опубликуйте тему и обновите страницу. Тема по-прежнему использует исходную запись тега.
В изолированном браузерном тесте я использовал существующий эмодзи-тег со счётчиком 17, нерелевантный тег со счётчиком 100 и лимит поиска 1. Выпадающий список отобразил Create: '😊' и popular x100; после публикации существующий эмодзи-тег был корректно переиспользован. При отсутствии записи для 😊 та же операция возвращала HTTP 200, но тег не сохранялся.
Причина кроется в функции DiscourseTagging.clean_tag, которая используется как для поисковых запросов, так и для сохранения новых имён. Она удаляет символы эмодзи. В результате поиск переходит к популярным результатам, тогда как при сохранении существующий тег всё ещё может быть найден по его исходному имени до очистки нового имени.
У меня есть небольшой патч, который сохраняет полные графемы эмодзи, распознаваемые данными существующей структуры Emoji.unicode_replacements. Он сохраняет существующую фильтрацию ASCII и удаляет недопустимые символы из текста, не содержащего эмодзи. Также он позволяет предложениям заблокированных тегов совпадать с началом имени, поскольку текущее регулярное выражение с границами слов пропускает имена, начинающиеся с эмодзи, такие как 😊-restricted.
Патч изменяет два файла реализации и добавляет регрессионное покрытие в трёх файлах тестов. Он не включает миграцию базы данных, изменения во фронтенде, новый API или дополнительный кэш эмодзи.
Локальная проверка: прошли 572 связанных backend-примера и 8 browser-примеров. Браузерные тесты проверяют, что существующий эмодзи-тег отображает x17, и что как он, так и действительно новый 😊 сохраняются после публикации и обновления страницы.
Обновление — 23 октября 2026 г.
Исправление теперь отправлено в виде PR #44994: FIX: Preserve emoji tags during search and saving и готово к ревью.
Полный CI на моей форке прошёл успешно: все 10 задач матрицы тестов, линтинг и проверки лицензий.
Для этого запуска я использовал отдельную ветку проверки с тем же исправлением и увеличил таймаут задачи тестирования с 20/30 минут до 90 минут, так как предыдущий запуск превысил время ожидания на раннере форка. Команды тестов, матрица и ассерты не изменялись. Настройка таймаута не входит в состав upstream PR. PR ещё не слит; upstream CI ожидает одобрения мейнтейнера.
Ветка с патчем:
Связанные отчёты и обсуждения:
Эти отчёты описывают ранее известные ограничения с эмодзи-тегами. Данный патч решает проблемы поиска и сохранения в редакторе, воспроизведённые выше; он не претендует на решение всех проблем с эмодзи-тегами.