AI (GPT 5.6 Sol Ultra) の Codex による診断(参考になれば):
原因を発見しました:Discourse Reactions がグローバルな「テキスト選択不可」状態をリークしています。
- Reaction の
touchstartイベントで、plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222において<html>にdiscourse-reactions-no-selectクラスが追加されます。 - このクラスは
plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1でuser-select: noneを適用し、ドキュメント全体に対して WebKit の長押し呼び出し(callout)を無効にします。 - Reaction ボタン上で垂直スクロールが開始されると、
plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:249でジェスチャが無効化されますが、クラスは削除されません。 - その後、
plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257で早期リターンが発生し、クラスが永久に残ったままになります。 - また、
touchcancelやコンポーネントの破棄時のクリーンアップ処理も存在しません。
クラスが削除されるのは plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:690 のみです。これが報告されたワークアラウンド(https://meta.discourse.org/t/the-popup-menu-for-quoting-text-is-unresponsive-on-android/407332)の説明になります:Reaction のポップアップを開いて閉じると collapseAllPanels() が呼び出され、選択機能が復元されます。
引用ツールバー自体は下流に位置しており、frontend/discourse/app/components/post-text-selection.gjs:58 で selectionchange を監視し、ブラウザによる実際の選択を必要とします。グローバルな user-select: none が設定されているため、Android ではこの選択が作成されません。
履歴はこのバグの傾向を確認しています:2023 年のスクロール修正(https://github.com/discourse/discourse-reactions/commit/d1970cf750e82a3035e05ddc3d52733a5c76a6ab)で無効なタッチの早期リターンが導入され、2024 年の部分的な修正(https://github.com/discourse/discourse-reactions/commit/c6710ef909481fd2fc16c10405f3daa92b6481fc)でクリーンアップがパネルの閉じに移動しましたが、スクロール/キャンセルのパスは未対応のまま残されました。
修正では、タッチライフサイクルの完了、拒否、キャンセル、または破棄のたびにクラスをクリアし、touchstart → touchmove → touchend および touchcancel に対する回帰テストを追加する必要があります。