Diagnosi AI (GPT 5.6 Sol Ultra) in Codex (se utile):
L’ho trovato: Discourse Reactions lascia trapelare uno stato globale di “nessuna selezione del testo”.
- Il touchstart della reazione aggiunge discourse-reactions-no-select a in
plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222. - Questa classe applica user-select: none e disabilita il menu contestuale a lungo tocco di WebKit per l’intero documento in
plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1. - Se uno scorrimento verticale inizia sopra il pulsante di reazione,
plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:249invalida il gesto senza rimuovere la classe. plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257poi torna precocemente, lasciando la classe indefinitamente.- Non c’è nemmeno una pulizia per touchcancel o distruzione del componente.
L’unica rimozione è in plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:690. Questo spiega la soluzione alternativa segnalata (The popup menu for quoting text is unresponsive on Android): aprire e chiudere il popup delle reazioni chiama collapseAllPanels(), ripristinando la selezione.
La barra degli strumenti delle citazioni è a valle: ascolta selectionchange e richiede una reale selezione del browser in frontend/discourse/app/components/post-text-selection.gjs:58. Con user-select: none globale, Android non crea mai quella selezione.
La storia conferma questa famiglia di bug: una correzione dello scorrimento del 2023 (FIX: prevents triggering a reaction while scrolling (#224) · discourse/discourse-reactions@d1970cf · GitHub) ha introdotto il ritorno precoce per touch invalido, e una correzione parziale del 2024 (FIX: couldn't select text after dismissing a reaction (#296) · discourse/discourse-reactions@c6710ef · GitHub) ha spostato la pulizia al collasso del pannello ma ha lasciato scoperti i percorsi di scorrimento/cancellazione.
La correzione dovrebbe cancellare la classe in ogni ciclo di vita del touch completato, rifiutato, cancellato o distrutto, con test di regressione per touchstart → touchmove → touchend e touchcancel.