
# Ταξίδι στον χρόνο στις ροές εργασιών

Το Queuety μπορεί να επαναφέρει μια ροή εργασιών σε προηγούμενο βήμα και να συνεχίσει την εκτέλεση από εκείνο το σημείο. Αυτό είναι χρήσιμο όταν ένα βήμα παρήγαγε λανθασμένο αποτέλεσμα, όταν θέλετε να δοκιμάσετε ξανά με διαφορετικές ρυθμίσεις ή όταν χρειάζεται να ανακτήσετε δεδομένα που έχουν αλλοιωθεί χωρίς να επανεκκινήσετε ολόκληρη τη ροή εργασιών.

Η επαναφορά βασίζεται στο [Αρχείο καταγραφής συμβάντων ροής εργασιών](https://queuety.inline0.dev/el/docs/workflows/event-log). Το αρχείο καταγραφής συμβάντων πρέπει να περιέχει δεδομένα `state_after` για το βήμα-στόχο.

## Επαναφορά ροής εργασιών

### PHP API

Καλέστε το `Queuety::rewind_workflow()` με το ID της ροής εργασιών και τον δείκτη βήματος στο οποίο θέλετε να επιστρέψετε:

```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` είναι ο δείκτης με αρίθμηση από το 0 του βήματος του οποίου πρέπει να αποκατασταθεί η ολοκληρωμένη κατάσταση. Η εκτέλεση συνεχίζεται από το _επόμενο_ βήμα (to_step + 1).

### CLI

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

| Επιλογή | Περιγραφή |
|---|---|
| `<id>` | Αναγνωριστικό ροής εργασιών (απαιτείται) |
| `<step>` | Δείκτης βήματος στο οποίο θα γίνει επαναφορά, με αρίθμηση από το 0 (απαιτείται) |

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

## Πώς λειτουργεί

Όταν επαναφέρετε μια ροή εργασιών στο βήμα N:

1. Αναζητείται στο αρχείο καταγραφής συμβάντων η τιμή `state_after` που καταγράφηκε μετά την ολοκλήρωση του βήματος N
2. Αν δεν υπάρχει στιγμιότυπο, προκαλείται `RuntimeException`
3. Η γραμμή της ροής εργασίας κλειδώνεται
4. Η κατάσταση της ροής εργασίας αντικαθίσταται από το στιγμιότυπο, διατηρώντας όλα τα δεσμευμένα κλειδιά (`_steps`, `_queue`, `_priority` κ.λπ.) από την τρέχουσα γραμμή της ροής εργασίας
5. Το `current_step` ορίζεται σε N + 1 και το `status` ορίζεται σε `running`
6. Τα πεδία `error_message` και `failed_at` διαγράφονται
7. Το βήμα με δείκτη N + 1 τίθεται στην ουρά για επεξεργασία
8. Καταγράφεται ένα συμβάν `workflow_rewound`

Στη συνέχεια, ο worker αναλαμβάνει το βήμα που τέθηκε στην ουρά και η ροή εργασίας συνεχίζεται κανονικά από εκείνο το σημείο.

## Απαιτήσεις

Η επαναφορά απαιτεί δεδομένα `state_after` στο αρχείο καταγραφής συμβάντων. Το αρχείο καταγράφει αυτόματα αυτά τα δεδομένα για κάθε συμβάν `step_completed`. Αν το αρχείο καταγραφής συμβάντων έχει εκκαθαριστεί (μέσω του `WorkflowEventLog::prune()`) και η κατάσταση για το βήμα-στόχο δεν υπάρχει πλέον, η επαναφορά θα αποτύχει.

Βεβαιωθείτε ότι η διατήρηση του αρχείου καταγραφής συμβάντων καλύπτει την περίοδο στην οποία ενδέχεται να χρειαστεί να επαναφέρετε τη ροή.

## Περιπτώσεις χρήσης

### Διόρθωση προβληματικού χειριστή βήματος

Αν ένας χειριστής βήματος είχε σφάλμα που παρήγαγε λανθασμένο αποτέλεσμα, μπορείτε να αναπτύξετε τη διόρθωση και να επαναφέρετε τη ροή:

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

### Επανάληψη με διαφορετικές ρυθμίσεις

Όταν ένα βήμα απέτυχε λόγω εξωτερικών παραγόντων (API περιορισμός ρυθμού, λανθασμένα διαπιστευτήρια), διορθώστε τις ρυθμίσεις και επαναφέρετε τη ροή για να εκτελεστεί ξανά:

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

### Ανάκτηση από λανθασμένα δεδομένα

Αν ένα προηγούμενο βήμα εισήγαγε λανθασμένα δεδομένα στην κατάσταση, επαναφέρετε τη ροή σε ένα γνωστό σωστό στιγμιότυπο:

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

## Σύγκριση με την επανάληψη

| Πτυχή | `retry_workflow()` | `rewind_workflow()` |
|---|---|---|
| Συνέχιση από | Το βήμα που απέτυχε | Οποιοδήποτε προηγούμενο βήμα |
| Κατάσταση | Τρέχουσα κατάσταση ροής εργασίας | Επαναφορά από το αρχείο καταγραφής συμβάντων `state_after` |
| Απαιτείται | Η ροή εργασίας να έχει κατάσταση `failed` | Στιγμιότυπο αρχείου συμβάντων στο βήμα-στόχο |
| Κατάσταση μετά | `running` | `running` |
| Συμβάν καταγραφής | κανένα | `workflow_rewound` |
