Je rencontre un problème intermittent où un message modifié est bien enregistré, mais le message déjà affiché dans DiscourseHub sur iOS reste parfois obsolète jusqu’à ce que je rafraîchisse le sujet.
Environnement
Le site de production est mon propre installateur Discourse auto-hébergé, que j’utilise en privé comme archive d’études personnelle.
Au moment où je l’ai reproduit aujourd’hui :
- Client : DiscourseHub sur iPhone
- iOS : 27.0.1
- Discourse de production :
v2026.10.0-latest +112 - Site : auto-hébergé, archive d’études privée
- Navigateur iOS par défaut : iCab Mobile
J’ai changé mon navigateur par défaut pour iCab Mobile à cause d’un problème local de téléchargement non lié. Cependant, cette reproduction s’est produite alors que j’utilisais le site Discourse à l’intérieur de DiscourseHub, plutôt qu’après l’ouverture d’un navigateur externe, je ne pense donc pas pour l’instant que le choix du navigateur par défaut soit pertinent.
Flux de travail réel
Le sujet où j’ai remarqué cela contenait environ 50 messages représentant des diapositives de cours.
Mon flux de travail normal est le suivant :
- créer un message contenant une image d’une diapositive de cours ;
- parcourir ensuite le sujet de manière consécutive ;
- modifier chaque message existant ;
- ajouter une transcription OCR / des notes sous l’image de diapositive déjà publiée ;
- appuyer sur Enregistrer la modification et passer à la diapositive suivante.
Il ne s’agit donc pas de modifications rapides synthétiques : c’est un flux de travail d’étude normal où j’ajoute progressivement des transcriptions OCR aux messages contenant des images de diapositives de cours.
Pour les messages précédents du sujet, appuyer sur Enregistrer la modification remplaçait immédiatement le message affiché par le nouvel contenu modifié, comme prévu.
Plus tard dans le même sujet, j’ai rencontré des cas où :
- J’ai modifié le message et ajouté le texte OCR.
- J’ai appuyé sur Enregistrer la modification.
- La modification a été enregistrée avec succès.
- Le message affiché dans DiscourseHub est resté sur son contenu précédent.
- Le rafraîchissement de la page a immédiatement affiché la modification déjà enregistrée.
La modification elle-même semble donc avoir réussi. La partie obsolète semble être la représentation client du message déjà chargée.
Test de développement
J’ai ensuite créé une instance de développement complètement propre à partir du main amont actuel :
833e1576d47 DEV: Update README.md note on self-hosting (#44320)
J’ai généré un sujet contenant 60 messages, avec une image dans chaque message, pour imiter la structure du sujet de production.
J’ai ensuite répété le flux de travail dans Firefox sur Linux, en ajoutant du texte aux messages d’image existants.
J’ai initialement observé une possible mise à jour obsolète autour du message 19 lors de mon premier test. Cependant, après avoir répété l’expérience plus soigneusement - y compris la création d’un nouveau sujet de 60 messages et la modification des messages de manière consécutive - je n’ai pas pu reproduire le comportement de production dans Firefox/Linux sur le main actuel.
Les modifications y ont redessiné le message immédiatement après l’enregistrement de la modification, y compris bien au-delà du premier groupe de messages du sujet.
Cela m’a rendu moins confiant dans l’idée que la pagination du sujet ou le bloc de flux normal de 20 messages en est la cause.
Prochain test
La reproduction en production s’est produite dans DiscourseHub sur iOS, et non dans une PWA d’écran d’accueil.
Ma prochaine comparaison prévue est donc :
- instance de développement Discourse amont actuelle ;
- le même sujet d’images de 60 messages ;
- le même iPhone exécutant iOS 27.0.1 ;
- d’abord DiscourseHub ;
- Safari sur le même iPhone comme contrôle ;
- éventuellement l’application web d’écran d’accueil comme autre comparaison ;
- modifier les messages de manière consécutive en utilisant le même flux de travail de type OCR.
Pour le moment, mon ordinateur portable de développement est sur eduroam, donc exposer directement son serveur de développement local à l’iPhone n’est pas simple.
Est-ce que lancer l’instance de développement main actuel sur le même iPhone dans DiscourseHub est la bonne prochaine étape pour réduire le champ des possibles ?
Si c’est le cas, y a-t-il un moyen préféré utilisé par l’équipe Discourse pour exposer une instance de développement locale à un iPhone / DiscourseHub pour les tests, idéalement via HTTPS ?
Lors de la prochaine occurrence, je peux également laisser le message obsolète non rafraîchi et capturer une enregistrement d’écran, afin que l’enregistrement réussi / l’état du serveur puisse être comparé directement à ce que le client DiscourseHub déjà ouvert affiche.
Observation potentiellement pertinente
Ce comportement semble similaire, à un niveau élevé, au problème d’état client obsolète auquel j’ai été confronté lors de la travail sur
PR #43285, “Refresh event dates in topic lists”.
C’était un chemin de code différent, et je ne suggère pas que ce soit le même bug.
Cependant, l’échec observable était similaire : l’état côté serveur pouvait être correct tandis qu’un client déjà chargé continuait d’afficher un état obsolète jusqu’à ce que le rafraîchissement / la réhydratation pertinente ait lieu.
Avec le problème de date d’événement, j’ai pu observer une situation A/B sur différents clients déjà ouverts en fonction du moment.
Cela me fait me demander si ce problème de modification est également quelque part dans la chaîne de notification / mise à jour du modèle / rendu, plutôt que la modification elle-même qui échoue.