
# Pulizia dello stato

Man mano che un workflow attraversa molti passaggi, lo stato accumulato può diventare voluminoso. La pulizia dello stato rimuove automaticamente i risultati dei passaggi meno recenti per mantenerlo JSON entro limiti gestibili, conservando i dati importanti.

## Attivare la pulizia dello stato

Chiamate `prune_state_after()` sul builder del workflow. L'argomento indica il numero di passaggi più recenti di cui conservare i risultati:

```php
use Queuety\Queuety;

Queuety::workflow( 'long_pipeline' )
    ->then( StepA::class )
    ->then( StepB::class )
    ->then( StepC::class )
    ->then( StepD::class )
    ->then( StepE::class )
    ->prune_state_after( 2 )
    ->dispatch( [ 'input' => $data ] );
```

Con `prune_state_after( 2 )`, al completamento del passaggio D, i risultati dei passaggi A e B vengono rimossi dallo stato. I passaggi C e D (i due più recenti) vengono conservati.

## Come funziona la pulizia

Quando la pulizia dello stato è attiva, Queuety tiene traccia delle chiavi aggiunte da ciascun passaggio in un array `_step_outputs` riservato. Dopo il passaggio a uno step successivo, rimuove tutte le chiavi introdotte dai passaggi precedenti alla soglia.

Ad esempio, con `prune_state_after( 2 )`:

```
After step 0 (StepA): state has keys from StepA + initial payload
After step 1 (StepB): state has keys from StepA + StepB + initial payload
After step 2 (StepC): state has keys from StepA + StepB + StepC + initial payload
  -> prune: StepA output removed (only 2 most recent kept)
After step 3 (StepD): state has keys from StepB + StepC + StepD + initial payload
  -> prune: StepB output removed
```

## Cosa viene conservato

Queuety non elimina mai le chiavi riservate che iniziano con `_`, come `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` e `_step_outputs`. Vengono conservate anche le chiavi del payload iniziale passate a `dispatch()`, perché non sono tracciate come risultati dei passaggi. Inoltre, Queuety mantiene i risultati degli N passaggi più recenti, in base alla soglia configurata.

## Quando usarlo

La pulizia dello stato è utile nei workflow con molti passaggi, in cui ciascun passaggio produce dati che quelli successivi non devono effettivamente usare. Esempi tipici sono pipeline lunghe in cui ogni passaggio necessita solo dei risultati del passaggio precedente o dei due precedenti, workflow ETL che generano strutture intermedie voluminose e workflow ricorsivi o ripetitivi che altrimenti accumulerebbero stato ridondante. Se il workflow ha solo pochi passaggi o se quelli finali dipendono ancora dai risultati iniziali, probabilmente non è necessario attivare la pulizia.

## Comportamento predefinito

La pulizia dello stato è disattivata per impostazione predefinita. Il metodo `prune_state_after()` accetta un argomento intero. Se lo chiamate senza argomenti, il valore predefinito è 2:

```php
->prune_state_after()     // keeps the 2 most recent step outputs
->prune_state_after( 5 )  // keeps the 5 most recent step outputs
```
