
# İş Akışında Zamanda Yolculuk

Queuety, bir iş akışını önceki bir adıma geri sarıp yürütmeyi o noktadan sürdürmenizi sağlar. Bir adım hatalı çıktı ürettiğinde, farklı bir yapılandırmayla yeniden denemek istediğinizde veya tüm iş akışını baştan başlatmadan bozuk verileri kurtarmanız gerektiğinde kullanışlıdır.

Geri sarma, [İş Akışı Olay Günlüğü](https://queuety.inline0.dev/tr/docs/workflows/event-log) özelliğine bağlıdır. Hedef adım için olay günlüğünde `state_after` verileri bulunmalıdır.

## İş akışını geri sarma

### PHP API

Geri sarılacak iş akışı kimliği ve adım diziniyle `Queuety::rewind_workflow()` çağrısını yapın:

```php
use Queuety\Queuety;

// Rewind workflow 42 to step 1.
// The state is restored to the snapshot taken after step 1 completed,
// and step 2 is enqueued for re-execution.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );
```

`to_step` parametresi, tamamlanmış durumu geri yüklenecek adımın sıfır tabanlı dizinidir. Yürütme _sonraki_ adımdan (to_step + 1) devam eder.

### CLI

```bash
wp queuety workflow rewind <id> <step>
```

| Seçenek | Açıklama |
|---|---|
| `<id>` | İş akışı kimliği (gerekli) |
| `<step>` | Geri sarılacak adım dizini, 0 tabanlı (gerekli) |

```bash
wp queuety workflow rewind 42 1
```

## Nasıl çalışır

Bir iş akışını N. adıma geri sardığınızda:

1. Olay günlüğünde, N. adım tamamlandıktan sonra kaydedilen `state_after` değeri sorgulanır
2. Anlık görüntü yoksa `RuntimeException` fırlatılır
3. İş akışı satırı kilitlenir
4. İş akışı durumu, mevcut iş akışı satırındaki ayrılmış tüm anahtarlar (`_steps`, `_queue`, `_priority` vb.) korunarak anlık görüntüyle değiştirilir
5. `current_step` N + 1 olarak, `status` ise `running` olarak ayarlanır
6. `error_message` ve `failed_at` alanları temizlenir
7. N + 1 dizinindeki adım işlenmek üzere kuyruğa alınır
8. Bir `workflow_rewound` günlük olayı kaydedilir

Ardından çalışan, kuyruğa alınan adımı işler ve iş akışı bu noktadan itibaren normal şekilde devam eder.

## Gereksinimler

Geri sarma, olay günlüğünde `state_after` verisinin bulunmasını gerektirir. Olay günlüğü bunu her `step_completed` olayı için otomatik olarak kaydeder. Olay günlüğü budanmışsa (`WorkflowEventLog::prune()` aracılığıyla) ve hedef adımın durumu artık mevcut değilse geri sarma başarısız olur.

Olay günlüğü saklama süresinin, geri sarmaya ihtiyaç duyabileceğiniz dönemi kapsadığından emin olun.

## Kullanım alanları

### Hatalı bir adım işleyicisini düzeltme

Bir adım işleyicisindeki hata yanlış çıktı ürettiyse düzeltmeyi dağıtıp geri sarabilirsiniz:

```php
// Step 2 (CallLLMHandler) produced garbled output due to a prompt bug.
// After fixing CallLLMHandler, rewind to step 1 so step 2 runs again
// with the corrected handler.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );
```

### Farklı yapılandırmayla yeniden deneme

Bir adım harici etkenler (API hız sınırı, hatalı kimlik bilgileri) nedeniyle başarısız olduğunda, yapılandırmayı düzeltip yeniden çalıştırmak için geri sarın:

```php
// Step 3 failed because the API key was expired.
// After updating the key, rewind to step 2 so step 3 retries.
Queuety::rewind_workflow( $workflow_id, to_step: 2 );
```

### Hatalı verilerden kurtarma

Önceki bir adım duruma hatalı veri eklediyse bilinen iyi bir anlık görüntüye geri sarın:

```php
// Step 0 fetched correct data, but step 1 corrupted it.
// Rewind to step 0 to restore the good state and re-run step 1.
Queuety::rewind_workflow( $workflow_id, to_step: 0 );
```

## Yeniden denemeyle karşılaştırma

| Özellik | `retry_workflow()` | `rewind_workflow()` |
|---|---|---|
| Nereden devam eder | Başarısız adım | Önceki herhangi bir adım |
| Durum | Mevcut iş akışı durumu | Olay günlüğünden geri yüklenir `state_after` |
| Gereksinim | İş akışının durumu `failed` olmalı | Hedef adımda olay günlüğü anlık görüntüsü |
| Sonraki durum | `running` | `running` |
| Günlük olayı | yok | `workflow_rewound` |
