
# Depuración del estado

A medida que un flujo de trabajo avanza por muchos pasos, el estado acumulado puede crecer mucho. La depuración del estado elimina automáticamente los resultados de pasos antiguos para mantenerlo JSON acotado y conservar los datos importantes.

## Activar la depuración del estado

Llame a `prune_state_after()` en el generador del flujo de trabajo. El argumento es la cantidad de pasos recientes cuyos resultados deben conservarse:

```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 completarse el paso D se eliminan del estado los resultados de los pasos A y B. Se conservan los pasos C y D, los dos más recientes.

## Cómo funciona la depuración

Cuando está activada la depuración del estado, Queuety registra las claves que añade cada paso en una matriz reservada `_step_outputs`. Al avanzar al siguiente paso, se eliminan las claves introducidas por los pasos anteriores al umbral.

Por ejemplo, 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
```

## Qué se conserva

Queuety nunca depura las claves reservadas que empiezan por `_`, como `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` y `_step_outputs`. También se conservan las claves del payload inicial que se pasan a `dispatch()`, porque no se registran como resultados de pasos. Además, Queuety conserva los resultados de los N pasos más recientes según el umbral configurado.

## Cuándo usarlo

La depuración del estado resulta útil en flujos de trabajo con muchos pasos, cuando cada uno genera datos que los pasos posteriores no necesitan. Algunos ejemplos habituales son los procesos largos en los que cada paso solo necesita los resultados del paso anterior o de los dos anteriores, los flujos ETL que generan estructuras intermedias voluminosas y los flujos de trabajo recursivos o repetitivos que, de otro modo, acumularían estado redundante. Si el flujo de trabajo tiene pocos pasos o los pasos finales aún dependen de los resultados iniciales, probablemente no necesite depuración.

## Comportamiento predeterminado

La depuración del estado está desactivada de forma predeterminada. El método `prune_state_after()` acepta un argumento entero. Si se llama sin argumentos, el valor predeterminado es 2:

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