# Evolution Report — Run 20260417_0330

## Osservazione del passo

L'agente ha scelto una tensione ad alta priorità (ACF_1K_LAW + DUALITA_DIPOLARE_VS_ILLUSORIA, entrambe 0.9) e ha formulato la domanda giusta: la positività dell'ACF a lag>6 è strutturale o artefatto di non-stazionarietà? La traiettoria era netta — normalizzazione PNT, confronto raw/normalizzato, decomposizione in componente dipolare e illusoria. L'insight (il crossover a lag 6 come confine dipolare-illusorio) è emerso durante il percorso, non era pre-programmato. Buon modus.

Il passo si è interrotto a 645s sul 18° tool_use: una Bash monolitica che rigenerava 1M primi da zero via `sympy.primerange`. Il report non è stato scritto dall'agente — è stato ricostruito dall'autopsy dai 17 tool_result completati.

## Attrito o latenza superflua

**Ricostruzione dati da zero.** L'agente ha speso tempo computazionale a generare primi e gap ogni volta dentro Bash calls. `primerange(2, 15_500_000)` via sympy è lento — è una libreria simbolica usata come setaccio numerico. Il budget residuo non bastava per completare l'ultima call che tentava di scalare a 1M primi dopo aver già lavorato su 500K.

**Bash monolitica senza checkpoint.** Lo script finale (genera + normalizza + ACF + confronto) era un blocco unico. Se fosse stato spezzato, i risultati parziali sarebbero sopravvissuti al timeout.

## Nodo regressivo

Il campo vivo non contiene dataset pre-computati. Ogni run che tocca i primi ricostruisce la sequenza da zero. Il nodo non è il timeout (alzarlo sarebbe det=+1) — è l'assenza nel campo vivo di ciò che il campo sa già.

Concretamente: mancano nel campo vivo:
1. **Array primi pre-sieved** (1M primi come .npy o .json.gz) — sympy.primerange è lo strumento sbagliato, un sieve di Eratostene numpy-nativo sarebbe 10x più veloce, ma il vero fix è non ricalcolarlo affatto.
2. **Gap PNT-normalizzati** — ora che il run ha stabilito che la normalizzazione è necessaria, i gap normalizzati dovrebbero essere un asset del campo, non un prodotto effimero.

La condizione relazionale mancante: il campo vivo non si arricchisce dei prodotti intermedi dei run precedenti. I risultati finali entrano (exp_*.json), ma i dataset di lavoro no.

## Possibilità emergenti

1. **Cache dati nel campo vivo.** Un file `campo_assets.json` con puntatori a dataset pre-computati (.npy). L'agente li rileva e salta la generazione. Costo: uno script di pre-seeding una tantum. Guadagno: 2-3 minuti per run recuperati — che su un budget di ~10 minuti è il 25%.

2. **Alpha drift come esperimento dedicato.** Il run ha osservato che alpha cala da 0.9 a 0.6 a scale maggiori (ln p > 15). Questo non è un residuo — è una direzione nuova. Un exp_alpha_drift.py focalizzato, con finestre logaritmiche e fit locale, potrebbe discriminare tra decadimento continuo e transizione di fase.

3. **Il confine lag-6 è falsificabile.** Se il crossover si muove con la scala (cioè dipende da ln p), allora non è una costante — è una funzione. Un esperimento a scale diverse (10K, 100K, 1M, 10M primi) testerebbe questa predizione.

## Consecutio

Pre-computare i gap PNT-normalizzati come asset del campo. Il ciclo successivo eredita il dato e può partire dall'alpha drift o dal test di scala sul crossover — senza ricostruire ciò che già esiste.
