トピック作成画面での絵文字タグの動作に不整合があることを発見し、修正されていない main の 802125b979b5bb848a7cfc52409ef3176ffd4d82 で再現しました。
既存の絵文字タグの場合、その名前を入力すると、既存のタグとその使用回数ではなく、作成(Create) というオプションが表示されることがあります。このオプションを選択して投稿しても、既存のタグが正しく付与されます。完全に新規の絵文字タグは別ケースです:作成画面では選択可能ですが、投稿後に消失します。
既存タグの問題を再現するには:
😊のような既存の絵文字タグと、より頻繁に使われる他のタグがあるサイトを使用します。- トピック作成画面を開き、絵文字タグの名前を入力します。
- そのタグが返される人気タグの制限数に含まれていない場合、ドロップダウンには作成オプションと無関係な人気タグが表示され、既存タグの使用回数は表示されません。
- 作成オプションを選択して公開し、ページを再読み込みします。トピックには元のタグレコードが引き続き使用されています。
隔離されたブラウザテストでは、使用回数が17の既存の絵文字タグ、使用回数が100の無関係なタグ、および検索制限を1に設定しました。ドロップダウンには Create: '😊' と popular x100 が表示されましたが、投稿後、既存の絵文字タグは正しく再利用されました。既存の 😊 レコードがない場合、同じ操作は HTTP 200 を返しましたが、タグは保存されませんでした。
原因は DiscourseTagging.clean_tag にあります。これは検索語と新しい名前の保存の両方で使用されており、絵文字文字を削除します。これにより、検索は人気結果にフォールバックしますが、保存処理では、新しい名前をクリーニングする前に、元の名称で既存のタグを見つけることがまだ可能です。
既存の Emoji.unicode_replacements データによって認識される完全な絵文字グラフェムを保持する小さなパッチを作成しました。既存の ASCII フィルタリングを維持しつつ、非絵文字テキストから無効な文字を削除します。また、現在の単語境界式が 😊-restricted のような絵文字で始まる名前を見逃すため、無効化されたタグの提案が名前の先頭に一致するようにしました。
このパッチは2つの実装ファイルを変更し、3つのテストファイルに回帰テストのカバレッジを追加します。データベースマイグレーション、フロントエンドの変更、新しいAPI、または別の絵文字キャッシュは追加しません。
ローカル検証:関連するバックエンドの例572件とブラウザの例8件が合格しました。ブラウザテストでは、既存の絵文字タグが x17 と表示されること、およびそれが本物の新規 😊 タグとともに公開・再読み込み後も残存することを確認しています。
更新 — 2026年10月23日
修正は PR #44994: FIX: Preserve emoji tags during search and saving として提出され、レビュー待ちの状態です。
私のフォークでのフル CI は合格しました:全10件のテストマトリックスジョブ、リンティング、およびライセンスチェック。
今回の実行では、同じ修正を含む別の検証ブランチを使用し、以前のランがフォークランナーでタイムアウトしたため、テストジョブのタイムアウトを20/30分から90分に延長しました。テストコマンド、マトリックス、アサーションは変更ありません。タイムアウトの調整はアップストリームの PR の一部ではありません。PR はマージされておらず、アップストリームの CI はメンテナの承認を待っています。
パッチブランチ:
関連する報告と議論:
これらの報告は以前の絵文字タグの制限について説明しています。このパッチは上記で再現した作成画面の検索と保存の失敗に対処するものであり、すべての絵文字タグの問題を解決すると主張するものではありません。