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 tramite DataManager, all’esecuzione del modello TimesFM, fino alla creazione della figura Plotly — è 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 QCPlotlyChartWidget e nella sua interazione con l’ambiente di rendering QWebEngineView e la libreria Plotly.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 IpotizzataProva Definitiva di EsclusioneStato
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 InterrottoRisolto 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 UIRisolto 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 DatiI 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 runJavaScriptL’aggiunta di una callback (_on_js_done) ha prodotto il log JS-DONE: OK, confermando che la chiamata viene eseguita.ESCLUSO
Dimensione Eccessiva del JSONIl 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):

  1. Sposta l’Abilitazione del Debug: La causa più probabile è che la variabile d’ambiente QTWEBENGINE_REMOTE_DEBUGGING venga impostata troppo tardi. Modifica il file run.py (il punto di ingresso dell’applicazione) per impostarla prima di qualsiasi import relativo a Qt.

    File da modificare: run.py

    import os
    os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = '8888'
     
    # Ora importa gli altri moduli
    from fire.main import run_app
    # ...
  2. 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 LISTENING sulla porta 8888.
  3. Se il punto 2 fallisce (Piano B):

    • Implementa la soluzione “low-tech” suggerita da Kimi: crea una classe LogPage personalizzata che eredita da QWebEnginePage e sovrascrivi il metodo javaScriptConsoleMessage per reindirizzare i log JavaScript al terminale Python.

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.