Documento 1: Project Briefing - Stato dell’Arte del Bug “Grafico Diagonale”
(Da leggere per primo - 2 minuti)
A: Nuovo Collaboratore Da: Team FIRE Oggetto: Benvenuto/a. Allineamento sul bug critico del Forecast Lab.
Ciao e benvenuto/a nel team.
Sei stato/a assegnato/a a un task di importanza critica: la risoluzione finale del bug dei “grafici corrotti” nel nostro Forecast Lab. Questa funzionalità è attualmente bloccata.
Per portarti rapidamente al corrente, abbiamo preparato questo briefing.
1. Il Problema (Sintomo Visivo)
Quando un utente esegue un backtest, il widget dei risultati mostra un grafico con una linea retta diagonale e piatta, invece della serie storica reale del titolo. Questo comportamento è una regressione emersa dopo un importante refactoring delle dipendenze del progetto.
2. Il Nostro Obiettivo
Il tuo compito è isolare e correggere la causa radice finale di questo bug di rendering, permettendo al grafico di visualizzare correttamente i dati che riceve.
3. Stato Attuale dell’Indagine (Cosa Sappiamo per Certo)
Abbiamo condotto un’approfondita indagine di una settimana, escludendo sistematicamente quasi tutte le possibili cause. Per evitare di perdere tempo, è fondamentale che tu sappia cosa abbiamo già verificato e scagionato:
-
IL BACKEND PYTHON FUNZIONA CORRETTAMENTE: Abbiamo la prova inconfutabile (tramite uno script di test autonomo,
poc_timesfm_backtester.py) che l’intera catena di elaborazione dati — dal caricamento tramiteDataManager, all’esecuzione del modelloTimesFM, fino alla creazione della figuraPlotly— è esente da bug. I dati prodotti sono corretti. -
IL FLUSSO DEI SEGNALI QT FUNZIONA CORRETTAMENTE: Abbiamo verificato con log diagnostici che l’intera catena di eventi, dal click dell’utente sull’interfaccia fino all’arrivo dei dati al widget di visualizzazione, è integra e funzionante. Il problema non è nel flusso di comunicazione.
-
IL BUG È ISOLATO AL 100% NEL FRONTEND: Le prove dimostrano che il problema risiede esclusivamente nel componente
QCPlotlyChartWidgete nella sua interazione con l’ambiente di renderingQWebEngineViewe la libreriaPlotly.js. Stiamo passando dati corretti a un “pennello” che li sta disegnando in modo sbagliato.
4. Prossimo Obiettivo (Il Tuo Task Immediato)
Il nostro ultimo test ha rivelato che non riusciamo a ispezionare il frontend perché il debugger remoto di QtWebEngine non si avvia (ERR_CONNECTION_REFUSED su localhost:8888). Senza accesso ai console.log, non possiamo vedere cosa succede all’interno del codice JavaScript.
Il tuo primo compito è risolvere questo blocco. Il documento successivo (“Azione Immediata”) contiene le istruzioni esatte fornite dal nostro consulente, Kimi, per affrontare questo problema.
Il documento “False Friends” elenca invece, per tua referenza, tutte le piste che abbiamo già esplorato e scartato.
Documento 2: Documento Ufficiale di Esclusione Cause (“False Friends”)
(Da consultare per riferimento - non suggerire queste soluzioni)
Bug ID: BUG-FLAB-2025-11-12 - “Grafici corrotti – linee piatte/diagonali nel Forecast Lab”
Questo documento archivia tutte le ipotesi investigative che sono state testate e invalidate. Consultalo per evitare di ripercorrere strade già esplorate.
| Causa Ipotizzata | Prova Definitiva di Esclusione | Stato |
|---|---|---|
Corruzione dell’Indice dei Dati (RangeIndex) | Risolto con un fix difensivo in main_window.py. I log PLOT-DATA successivi hanno confermato che la pd.Series ha un DatetimeIndex corretto. | ESCLUSO |
| Flusso dei Segnali Qt Interrotto | Risolto un problema di garbage collection del worker. I log SIGNAL-ARRIVED e RESULTS-READY-EMIT hanno confermato che l’intera catena di segnali ora funziona end-to-end. | ESCLUSO |
Esecuzione di Codice Obsoleto (__pycache__) | Risolto pulendo le cache. I log ...-LOADED con os.path.abspath(__file__) hanno confermato che Python esegue i file corretti. | ESCLUSO |
| Race Condition nella Visibilità della UI | Risolto forzando la visibilità del dock (show()/raise_()) e usando un segnale ready asincrono. I log hanno confermato che i metodi di plotting vengono chiamati dopo che il widget è visibile. | ESCLUSO come causa del contenuto errato. |
| Corruzione dei Valori dei Dati | I log PLOT-DATA e PLOT-FIG hanno mostrato in modo inconfutabile che i valori (y) passati a Plotly sono prezzi reali e non lineari. | ESCLUSO |
Fallimento Silenzioso di runJavaScript | L’aggiunta di una callback (_on_js_done) ha prodotto il log JS-DONE: OK, confermando che la chiamata viene eseguita. | ESCLUSO |
| Dimensione Eccessiva del JSON | Il log JS-SEND ha mostrato che la dimensione del payload è ~90 KB, ben al di sotto dei limiti noti. | ESCLUSO |
Documento 3: Azione Immediata - Sblocco del Debugger Frontend
(Il tuo primo task operativo)
Obiettivo: Ottenere accesso ai console.log del QCPlotlyChartWidget.
Blocco Attuale: Il debugger remoto di QtWebEngine non è raggiungibile (ERR_CONNECTION_REFUSED su localhost:8888).
Piano d’Azione (fornito da Kimi):
-
Sposta l’Abilitazione del Debug: La causa più probabile è che la variabile d’ambiente
QTWEBENGINE_REMOTE_DEBUGGINGvenga impostata troppo tardi. Modifica il filerun.py(il punto di ingresso dell’applicazione) per impostarla prima di qualsiasi import relativo a Qt.File da modificare:
run.pyimport os os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = '8888' # Ora importa gli altri moduli from fire.main import run_app # ... -
Verifica l’Attivazione della Porta:
- Avvia l’applicazione.
- Apri un secondo terminale e lancia
netstat -an | findstr 8888. - Risultato Atteso: Dovresti vedere una riga con lo stato
LISTENINGsulla porta 8888.
-
Se il punto 2 fallisce (Piano B):
- Implementa la soluzione “low-tech” suggerita da Kimi: crea una classe
LogPagepersonalizzata che eredita daQWebEnginePagee sovrascrivi il metodojavaScriptConsoleMessageper reindirizzare i log JavaScript al terminale Python.
- Implementa la soluzione “low-tech” suggerita da Kimi: crea una classe
Il tuo primo obiettivo è completare con successo l’Azione 1 o, in caso di fallimento, l’Azione 3. Una volta che saremo in grado di vedere i console.log, potremo procedere con l’analisi finale del frontend.
Buon lavoro.