0011-worker-data-passthrough
Data: 2025-12-06 Stato: Accettato Contesto: Bug “bgcolor flow interruption” (v5.1.0)
Il Contesto
Durante l’implementazione della feature strategy.bgcolor(), abbiamo riscontrato un bug critico in cui i dati prodotti dal BacktestEngine non raggiungevano la UI.
La causa è stata identificata nel BacktestWorker: questo componente ricostruiva manualmente il dizionario dei risultati (Approccio “Whitelist”), scartando involontariamente qualsiasi chiave non esplicitamente prevista nel suo codice (in questo caso, background_events).
La Decisione
Adottiamo ufficialmente il Pattern “Passthrough” (Merge) per tutti i Worker e gli Handler intermedi che trasportano dati complessi.
Invece di costruire un nuovo dizionario selezionando le chiavi:
# ❌ ANTI-PATTERN (Vietato)
return {
"stats": engine_output["stats"],
"trades": engine_output["trades"]
# Se engine_output ha nuove chiavi, vengono perse!
}I Worker DEVONO copiare l’output originale e aggiornarlo/arricchirlo:
# ✅ PASSTHROUGH PATTERN (Obbligatorio)
results = engine_output.copy()
results.update({
"metrics": calculated_metrics,
"equity": calculated_equity
})
return resultsConseguenze
Positive
- Estensibilità: Aggiungere nuovi dati all’Engine non richiede più la modifica a catena di Worker e Handler.
- Robustezza: Si evitano bug silenziosi di perdita dati.
Negative
- Payload Size: Potremmo trasportare dati “inutili” se l’Engine produce molto output di debug, ma il trade-off è accettabile.