Saga Lara Flow, ein Laravel-Package von Andriy Karpishyn (discovery-ukraine), erlaubt es, langlaufende Geschäftsprozesse als eine einzige handle()-Methode zu schreiben – ohne Job-Chaining und ohne State Machine. Karte belasten, Lagerbestand reservieren, Versand buchen: alles als sequenzielle Codezeilen. Das Package protokolliert jeden abgeschlossenen Schritt in der Datenbank. Wenn ein Lauf auf einem Worker fortgesetzt wird, führt die Engine handle() erneut aus, doch Aufrufe über $this->action() liefern für bereits erledigte Schritte die gespeicherten Ergebnisse; sobald das Replay unausgeführten Code erreicht, läuft die normale Ausführung weiter. Wirft ein Schritt eine Exception, werden die Kompensationen früherer Schritte in umgekehrter Reihenfolge ausgelöst.

Zu den Kernfunktionen zählen Kompensationen via compensateWith() (Action-Klasse oder Closure), Signals via $this->signal() mit optionalen timeoutAfter()-Fristen und AwaitSignalTimeoutException, parallele Blöcke mit failFast()-Standardverhalten, Kind-Workflows mit ChildClosePolicy (z. B. Terminate) sowie sideEffect() zum Aufzeichnen nicht-deterministischer Werte wie UUIDs, damit Replays konsistent bleiben. Tag-basierte Abfragen (withTags(), $this->tag()) und Scopes wie running(), waiting() und failed() erlauben es, Läufe ohne gespeicherte IDs zu finden und etwa ein Signal an alle passenden Runs zu senden.

Workflows erweitern die Workflow-Klasse des Packages; Actions sind eigene, aus dem Container aufgelöste Klassen mit eigenen Queue-Einstellungen: $tries, $timeout und expiresAt(). Erschöpfte Retries erscheinen als ActionFailedException, eine überschrittene Frist als FlowExpiredException. Optionale Schritte nutzen continueOnFailure()/optionalAction() mit Fallback-Werten. Der $this->saga()-Builder fasst Schritte zu einer Rollback-Einheit zusammen, mit onCompensationFailure(CompensationFailurePolicy::Continue) und compensateInParallel(). Läufe starten über die SagaFlow-Fassade: run() stellt asynchron in die Queue, runSync() führt im Prozess aus – ideal für Test-Assertions. Versions-Pinning (version('v2')) hält laufende Runs an ihrer ursprünglichen Workflow-Definition fest.

Das Package benötigt PHP 8.5 und Laravel 13, steht unter MIT-Lizenz und wird per composer require discovery-ukraine/saga-lara-flow installiert, gefolgt von Migrationen und Config-Publishing. Die Konfiguration deckt Datenbankverbindung, Queue, Locking und Multi-Tenancy-Hooks ab (Capture-/Restore-Closures für den Tenant-Kontext). Artisan-Befehle: make:workflow, make:action, saga-flow:list, saga-flow:signal, saga-flow:prune sowie saga-flow:monitor, das minütlich eingeplant werden sollte, um Fristen zu überwachen. Dokumentation unter sagalaraflow.dev; Quellcode auf GitHub unter discovery-ukraine/saga-lara-flow.