Ho riscontrato un problema intermittente in cui un post modificato viene salvato correttamente, ma il post già renderizzato in DiscourseHub su iOS a volte rimane obsoleto finché non aggiorno l’argomento.
Ambiente
Il sito di produzione è la mia installazione self-hosted di Discourse, che uso privatamente come archivio di studio personale.
Al momento in cui l’ho riprodotto oggi:
- Client: DiscourseHub su iPhone
- iOS: 27.0.1
- Discourse di produzione:
v2026.10.0-latest +112 - Sito: self-hosted, archivio di studio privato
- Browser iOS predefinito: iCab Mobile
Ho cambiato il browser predefinito in iCab Mobile a causa di un problema non correlato con i download locali. Tuttavia, questa riproduzione si è verificata mentre stavo usando il sito Discourse all’interno di DiscourseHub, piuttosto che dopo aver aperto un browser esterno, quindi al momento non credo che la scelta del browser predefinito sia rilevante.
Flusso di lavoro reale
L’argomento in cui ho notato questo problema conteneva circa 50 post che rappresentavano le diapositive di una lezione.
Il mio normale flusso di lavoro è:
- creare un post contenente un’immagine di una diapositiva di lezione;
- successivamente lavorare sull’argomento in modo consecutivo;
- modificare ogni post esistente;
- aggiungere una trascrizione OCR / note sotto l’immagine della diapositiva già pubblicata;
- premere Salva modifica e passare alla diapositiva successiva.
Quindi queste non sono modifiche rapide sintetiche: si tratta di un normale flusso di lavoro di studio in cui sto aggiungendo progressivamente trascrizioni OCR ai post con immagini di diapositive di lezioni.
Per i post precedenti nell’argomento, la pressione di Salva modifica ha sostituito immediatamente il post visualizzato con il nuovo contenuto modificato, come previsto.
Più avanti nello stesso argomento ho riscontrato casi in cui:
- Ho modificato il post e aggiunto il testo OCR.
- Ho premuto Salva modifica.
- La modifica è stata salvata con successo.
- Il post visualizzato in DiscourseHub è rimasto sul contenuto precedente.
- L’aggiornamento della pagina ha mostrato immediatamente la modifica già salvata.
Quindi la modifica stessa sembra essere andata a buon fine. La parte obsoleta sembra essere la rappresentazione client del post già caricata.
Test di sviluppo
Ho quindi creato un’istanza di sviluppo completamente pulita dall’attuale main upstream:
833e1576d47 DEV: Update README.md note on self-hosting (#44320)
Ho generato un argomento contenente 60 post, con un’immagine in ogni post, per imitare la struttura dell’argomento di produzione.
Ho quindi ripetuto il flusso di lavoro in Firefox su Linux, modificando il testo nei post con immagini esistenti.
All’inizio ho visto un possibile aggiornamento obsoleto intorno al post 19 nel mio primo test. Tuttavia, dopo aver ripetuto l’esperimento con più attenzione - inclusa la creazione di un nuovo argomento da 60 post e la modifica dei post in modo consecutivo - non sono stato in grado di riprodurre il comportamento di produzione in Firefox/Linux sull’attuale main.
Lì le modifiche hanno ridipinto il post immediatamente dopo Salva modifica, incluso ben oltre il primo gruppo di post nell’argomento.
Questo mi ha reso meno sicuro che la paginazione dell’argomento o il normale chunk di flusso da 20 post sia di per sé la causa.
Prossimo test
La riproduzione in produzione si è verificata in DiscourseHub su iOS, piuttosto che in una PWA della schermata Home.
Il mio prossimo confronto previsto è quindi:
- istanza di sviluppo Discourse upstream attuale;
- lo stesso argomento di immagini da 60 post;
- lo stesso iPhone che esegue iOS 27.0.1;
- prima DiscourseHub;
- Safari sullo stesso iPhone come controllo;
- opzionalmente l’app web della schermata Home come ulteriore confronto;
- modificare i post in modo consecutivo utilizzando lo stesso flusso di lavoro di tipo OCR.
Al momento il mio laptop di sviluppo è su eduroam, quindi esporre direttamente il suo server di sviluppo locale all’iPhone non è immediato.
Eseguire l’istanza di sviluppo current-main sullo stesso iPhone in DiscourseHub è il passo successivo giusto per restringere il campo?
Se è così, c’è un modo preferito che il team Discourse usa per esporre un’istanza di sviluppo locale a un iPhone / DiscourseHub per i test, idealmente su HTTPS?
Al prossimo verificarsi posso anche lasciare il post obsoleto non aggiornato e catturare una registrazione dello schermo, in modo che lo stato di salvataggio riuscito/servidor possa essere confrontato direttamente con ciò che il client DiscourseHub già aperto sta visualizzando.
Osservazione potenzialmente rilevante
Questo comportamento sembra simile, a un livello alto, al problema di stato client obsoleto che ho riscontrato mentre lavoravo su
PR #43285, “Aggiorna le date degli eventi nelle liste degli argomenti”.
Quello era un percorso di codice diverso e non sto suggerendo che sia lo stesso bug.
Tuttavia, il fallimento osservabile era simile: lo stato lato server poteva essere corretto mentre un client già caricato continuava a visualizzare uno stato obsoleto finché non avveniva l’aggiornamento/ricalcolo rilevante.
Con il problema delle date degli eventi sono stato in grado di osservare una situazione A/B su diversi client già aperti a seconda del tempismo.
Questo mi fa pensare che anche questo problema di modifica sia in qualche parte della catena di notifiche / aggiornamento modello / rendering, piuttosto che la modifica stessa stia fallendo.