- Spegnimento
- 2 settembre 2026 alle ore 08:48 UTC
- Autore
- Kamo
- Impegno
- 83e30bc
Un membro ha iniziato una chat sugli articoli KB, minimizzato al suo hexhead, è andato alla loro posta e ha riportato la finestra a una conversazione vuota — "deve ricominciare da capo". Niente è stato perso: entrambe le domande e entrambe le risposte sono stati in ai chat messages per tutto il tempo, e nessuna nuova sessione è mai stata creato, che è il racconto. La finestra è tornata puntando a destra conversazione e non poteva leggere. AiChatController.getMessages risponde con una busta — { messaggi, totale, hasMore } — più vecchio-primo, tenendo il più nuovo `limit` righe. Questo lo legge come un nudo AiChatMessage[]. `data.length` su un oggetto non è definita, `data.reverse()` non è una funzione, e la cattura inghiottita il TypeError: la lista rimase vuota, `initialLoaded` mai capovolto, e il pannello non ha reso nulla — nessuna trascrizione, nessuna conversazione vuota pannello, nessun errore. Una finestra vuota su una trascrizione perfettamente sicura. Si nascose per tutto il tempo che ha fatto perché una finestra LIVE non fa mai questa chiamata. Ogni messaggio sullo schermo arriva attraverso l'eco locale in AiChatWebSocketContext, inserito direttamente nell'elenco tenuto-alive. The leggere solo conta quando la trascrizione deve tornare dal server: dopo un carico completo del documento — l'istantanea dell'utensile ripristina la finestra Con la sua guida di sessione, quindi nessuna nuova riga di sessione — o una riapertura passata 5 minuti di pausa. Esattamente i due modi in cui un membro raggiunge una finestra AI stavano già usando. Quindi leggere la busta, mantenere l'ordine del servizio invece di invertire cosa già invertito, e prendere `hasMore` dalla risposta piuttosto che inferrarlo da una lunghezza che non c'era mai. Pagare va bene. getMessages dichiara un parametro `prima` e mai legge — ogni chiamata è PageRequest.of(0, limit) — così il rotolo-to-top una seconda copia di loro. Non ha mai sparato prima (ha bisogno di `initialLoaded`, che non è mai diventato vero), quindi fissare il letto avrebbe acceso. La storia più antica è ora una pagina BIGGER, che è la richiesta del servizio In realta' serve. Non mentre un invio è in volo: una pagina sostituisce l'elenco, e il messaggio del membro è un'eco locale fino a quando la risposta non atterra. E una lettura fallita ora dice così, con una riprovazione, invece di rendere il void che ha fatto questo aspetto come una chat cancellata. Mai "avviare una conversazione" su uno che è seduto nel database — una trascrizione già sullo schermo è lasciato solo quando un riletto fallisce. Entrambe le stringhe esistevano già in tutti 22 locali. La guardia in volo si sposta dallo stato di carico a una rif. Era nel useCallback deps mentre l'effetto di carico iniziale è keyed sulla sessione da solo, così l'effetto ha tenuto qualsiasi copia esisteva quando la guida è arrivata.