
# Munkafolyamat elágaztatása

A Queuety egy futó munkafolyamatból teljesen független másolatot hozhat létre. Az elágaztatott munkafolyamat ugyanattól a lépéstől és ugyanazzal az állapottal indul, mint az eredeti, de ettől kezdve a két munkafolyamat egymástól függetlenül halad tovább. Az egyik módosításai nem érintik a másikat.

## Munkafolyamat elágaztatása

### PHP API

Hívja meg a `Queuety::fork_workflow()` elemet a munkafolyamat-azonosítóval. Az új munkafolyamat azonosítóját adja vissza:

```php
use Queuety\Queuety;

$forked_id = Queuety::fork_workflow( $workflow_id );
```

### CLI

```bash
wp queuety workflow fork <id>
```

| Beállítás | Leírás |
|---|---|
| `<id>` | Elágaztatandó munkafolyamat-azonosító (kötelező) |

```bash
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.
```

## Működés

Munkafolyamat elágaztatásakor:

1. Az eredeti munkafolyamatsor zárolódik és beolvasásra kerül
2. Új munkafolyamatsor jön létre ugyanazzal az állapottal, lépésdefiníciókkal és aktuális lépéssel
3. Az új munkafolyamat neve `{original_name}_fork_{timestamp}`
4. Az aktuális lépés feldolgozásra kerül az elágaztatott munkafolyamatban
5. Egy `workflow_forked` naplóesemény rögzül mind az eredeti, mind az elágaztatott munkafolyamatban
6. Az eredeti munkafolyamat a megszokott módon folytatja a feldolgozást

Az elágaztatott munkafolyamat teljesen független. Saját munkafolyamat-azonosítója, saját állapotmásolata és saját feladatsor-bejegyzései vannak. Az elágaztatástól kezdve a két munkafolyamat szabadon eltérhet egymástól.

## Felhasználási esetek

### Lépéskezelők A/B tesztelése

Ágaztasson el egy munkafolyamatot, hogy egy közelgő lépés két különböző megvalósítását tesztelje:

```php
// Original workflow will use the existing CallLLMHandler (GPT-4).
// Fork it to test with a different handler.
$forked_id = Queuety::fork_workflow( $workflow_id );

// Modify the forked workflow's state to use a different model.
// (Update the state via a custom step or direct DB update.)
```

### Mi lenne, ha? elemzés

Ágaztasson el egy munkafolyamatot egy döntési pontnál, hogy különböző ágakat próbáljon ki:

```php
// Workflow is at step 3, about to process data.
// Fork it so we can try two different processing strategies.
$fork_a = Queuety::fork_workflow( $workflow_id );
$fork_b = Queuety::fork_workflow( $workflow_id );
```

Minden elágazás ugyanabból a bemeneti állapotból indul, de módosítható úgy, hogy más útvonalat válasszon.

### Párhuzamos kísérletezés

Ha a munkafolyamat olyan ponthoz ér, ahol több megközelítést szeretne párhuzamosan kipróbálni, hozzon létre mindegyikhez elágazást, majd hasonlítsa össze az eredményeket az összes elágazás befejeződése után.

## Elágazások követése

Az egyes munkafolyamatok naplóeseménye hivatkozást tartalmaz a másikra:

- Az eredetiben: a `context.forked_workflow_id` az új munkafolyamatra mutat
- Az elágazásban: a `context.forked_from_workflow_id` az eredetire mutat

A naplók lekérdezésével megkeresheti egy munkafolyamat összes elágazását:

```php
$logs = Queuety::logger()->for_workflow( $workflow_id );

foreach ( $logs as $entry ) {
    if ( 'workflow_forked' === $entry['event'] ) {
        $context = json_decode( $entry['context'] ?? '{}', true );
        // $context['forked_workflow_id'] is the new workflow
    }
}
```

## Korlátozások

- Az elágaztatott munkafolyamat nem örökli az eredeti eseménynaplóját. Tiszta eseménynaplóval indul.
- A munkafolyamat-indítási kapcsolatok nem duplikálódnak. Ha az eredeti munkafolyamatban futott egy munkafolyamat-indítás, annak az elágazás nem kap másolatot.
- Az elágazás az aktuális állapot pillanatképe. Az eredeti munkafolyamat folyamatban lévő feladatai nem duplikálódnak.
