既存の絵文字タグが作成欄で新規として表示され、投稿後に新しい絵文字タグが消える

トピック作成画面の絵文字タグで不整合な挙動が発生しており、未修正の main ブランチ(コミット 802125b979b5bb848a7cfc52409ef3176ffd4d82)で再現しました。

既存の絵文字タグに対して、その名前を入力すると、既存のタグとその使用回数ではなく 作成 オプションが表示されることがあります。このオプションを選択して投稿しても、既存のタグが正しく付与されます。完全に新しい 絵文字タグは別件の問題です:作成画面では選択可能ですが、投稿後に消えてしまいます。

既存タグの問題を再現するには:

  1. 😊 のような既存の絵文字タグと、より頻繁に使用される他のタグがあるサイトを使用します。
  2. トピック作成画面を開き、絵文字タグの名前を入力します。
  3. そのタグが返される人気タグの上限外にある場合、ドロップダウンには作成オプションと無関係な人気タグが表示され、既存タグの使用回数は表示されません。
  4. 作成オプションを選択して公開し、ページを再読み込みします。トピックには元のタグレコードが使用されています。

分離されたブラウザテストでは、使用回数が 17 の既存の絵文字タグ、使用回数が 100 の無関係なタグ、および検索上限 1 を使用しました。ドロップダウンには Create: '😊' と popular x100 が表示されましたが、投稿後、既存の絵文字タグは正しく再利用されました。既存の 😊 レコードがない場合、同じ操作では HTTP 200 が返されましたが、タグは保存されませんでした。

原因は DiscourseTagging.clean_tag にあります。これは検索語と新しい名前の保存の両方に使用されます。このメソッドは絵文字文字を削除します。そのため、検索は人気結果にフォールバックしますが、保存時は新名のクリーニング前に元の名前で既存のタグを見つけられる場合があります。

既存の Emoji.unicode_replacements データによって認識される完全な絵文字グラフェムを保持する小さなパッチを作成しました。既存の ASCII フィルタリングを維持し、非絵文字テキストから無効な文字を削除します。また、現在の単語境界表現では 😊-restricted のような絵文字で始まる名前を見逃すため、無効化されたタグの提案が名前の先頭部分に一致するようにしました。

このパッチは 2 つの実装ファイルを変更し、3 つのテストファイルにリグレッションカバレッジを追加します。データベースマイグレーション、フロントエンドの変更、新しい API、または別の絵文字キャッシュは追加しません。

ローカル検証:関連するバックエンド例 572 件とブラウザ例 8 件が合格しました。ブラウザテストでは、既存の絵文字タグが x17 と表示され、それが完全に新しい 😊 タグとともに公開・再読み込み後も残っていることを確認しています。

パッチブランチ:

関連する報告と議論:

これらの報告は以前の絵文字タグの制限について説明しています。このパッチは上記で再現した作成画面での検索と保存の失敗に対処していますが、すべての絵文字タグの問題を解決するものではありません。