
# Pemangkasan Status

Seiring alur kerja melewati banyak langkah, status yang terkumpul dapat membesar. Pemangkasan status secara otomatis menghapus keluaran langkah lama agar status tetap JSON terbatas, sambil mempertahankan data yang penting.

## Mengaktifkan pemangkasan status

Panggil `prune_state_after()` pada builder alur kerja. Argumennya adalah jumlah langkah terbaru yang keluarannya harus dipertahankan:

```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 ] );
```

Dengan `prune_state_after( 2 )`, setelah langkah D selesai, keluaran dari langkah A dan B dihapus dari status. Langkah C dan D (dua langkah terbaru) dipertahankan.

## Cara kerja pemangkasan

Saat pemangkasan status diaktifkan, Queuety melacak kunci yang ditambahkan setiap langkah ke status dalam array `_step_outputs` yang dicadangkan. Setelah beralih ke langkah baru, kunci apa pun yang ditambahkan oleh langkah yang lebih lama dari ambang batas akan dihapus.

Contohnya, dengan `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
```

## Data yang dipertahankan

Queuety tidak pernah memangkas kunci cadangan yang diawali `_`, seperti `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after`, dan `_step_outputs`. Kunci payload awal yang diteruskan ke `dispatch()` juga dipertahankan karena sejak awal tidak dilacak sebagai keluaran langkah. Selain itu, Queuety mempertahankan N keluaran langkah terbaru sesuai ambang batas yang Anda tetapkan.

## Kapan menggunakannya

Pemangkasan status berguna untuk alur kerja dengan banyak langkah ketika setiap langkah menghasilkan data yang tidak benar-benar dibutuhkan oleh langkah berikutnya. Contoh umumnya adalah pipeline panjang yang setiap langkahnya hanya memerlukan satu atau dua keluaran sebelumnya, alur kerja ETL yang menghasilkan struktur perantara berukuran besar, serta alur kerja rekursif atau berulang yang jika tidak dipangkas akan terus menumpuk status berulang. Jika alur kerja Anda hanya memiliki beberapa langkah, atau langkah-langkah akhir masih bergantung pada keluaran awal, Anda mungkin tidak memerlukan pemangkasan sama sekali.

## Perilaku default

Pemangkasan status dinonaktifkan secara default. Metode `prune_state_after()` menerima argumen bilangan bulat. Jika dipanggil tanpa argumen, nilai defaultnya adalah 2:

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