Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions docs/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,12 @@ The embedded package and the service-mode SDK have separate support contracts.

| Package line | PHP | Laravel |
| --- | --- | --- |
| Current embedded Workflow 2.21 | PHP 8.2+ in 8.x; PHP 8.3+ for Laravel 13 | `^12.69.0` or `^13.30.0` |
| Current embedded Workflow 2.22 | PHP 8.2+ in 8.x; PHP 8.3+ for Laravel 13 | `^12.69.0` or `^13.30.0` |
| Embedded Workflow 2.20.5 | PHP `^8.1`, subject to Laravel's own minimum | `^10.50.4`, `^11.56.1`, `^12.69.0` or `^13.30.0` |
| Published PHP SDK 3.9.5 | Bare SDK PHP `^8.1`; the Laravel bridge also follows Laravel's PHP minimum | `^10.50.4`, `^11.56.1`, `^12.69.0` or `^13.30.0` |
| Published PHP SDK 3.11 | Bare SDK PHP `^8.1`; the Laravel bridge needs PHP `^8.2`, and PHP 8.3+ for Laravel 13 | `^12.69.0` or `^13.30.0` |
| PHP SDK 3.9.5 | Bare SDK PHP `^8.1`; the Laravel bridge also follows Laravel's PHP minimum | `^10.50.4`, `^11.56.1`, `^12.69.0` or `^13.30.0` |

The [published embedded upgrade contract](https://github.com/durable-workflow/workflow/blob/2.21.0/resources/laravel-embedded-upgrade-contract.json)
The [published embedded upgrade contract](https://github.com/durable-workflow/workflow/blob/2.22.0/resources/laravel-embedded-upgrade-contract.json)
and each release's `composer.json` are the package authorities. The current
embedded release was verified on Laravel 12 with PHP 8.2–8.4 and Laravel 13 with
PHP 8.3–8.4. Its PHP 8.1 and Laravel 10/11 support has been removed. This does
Expand All @@ -118,6 +119,23 @@ Preserve the original runtime for open v1 runs, and follow the
[Laravel adoption guide](/docs/laravel-adoption) for drain or coexistence.
Changing a Composer requirement does not migrate durable history.

PHP SDK 3.10 moved the Laravel service-mode bridge to the same PHP and Laravel
floors as Workflow 2.21 and removed Laravel 10/11 support; 3.11 keeps them.
Its provider refuses unsupported or unknown framework and PHP versions before
registering configuration, clients or workers. Existing SDK 3.9.x applications
keep their own contract while the platform is upgraded. See the
[PHP SDK upgrade notes](./polyglot/php.md#upgrade-to-3-10-and-3-11).

Workflow 2.22 adds no database migration and keeps the 2.21 support floors.
Its embedded worker protocol advertises `1.22` and still accepts `1.20`
requests. `1.22` adds an opt-in occurrence deadline that external callers can
request for condition waits; the embedded runner keeps its existing waiting
behavior. After any workflow has used that policy, roll back to an earlier
Workflow release only by restoring a backup taken before the upgrade. Older
releases can discard the policy and mix the wait chain, and upgrading again
does not repair that history. See the
[2.22.0 changelog](https://github.com/durable-workflow/workflow/blob/2.22.0/CHANGELOG.md).

## Stability Levels

Every public surface in Durable Workflow carries exactly one of these
Expand Down
17 changes: 10 additions & 7 deletions docs/laravel-adoption.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,12 @@ choosing the transition policy here.
| 2.0 embedded Laravel | PHP SDK service mode | The application should stop owning the orchestration runtime or needs a shared/polyglot runtime boundary. | Route new starts to the service runtime after its workers are ready. Drain embedded runs where they started, or use the explicit eligible embedded-v2 import procedure for self-hosted Server. |

Check the [published Laravel support lines](./compatibility.md#laravel-support)
before choosing a destination. The current embedded package requires Laravel
12.69 or 13.30 and compatible PHP. The published PHP SDK 3.9.5 still supports
patched Laravel 10–13; its bare service-mode client keeps PHP 8.1 support.
An older v1 application may need a framework upgrade before moving to the
current embedded line. Preserve its v1 runtime and open runs during that upgrade.
before choosing a destination. The current embedded package and, from PHP SDK
3.10, the service-mode Laravel bridge both require Laravel 12.69 or 13.30 and
compatible PHP. The bare service-mode client keeps PHP 8.1 support. PHP SDK
3.9.x keeps its earlier patched Laravel 10–13 bridge contract. An older v1
application may need a framework upgrade before moving to either current line.
Preserve its v1 runtime and open runs during that upgrade.

## Compare the ownership boundary

Expand Down Expand Up @@ -331,8 +332,10 @@ the published PHP SDK artifact authority, not copied from a point release:
composer require %%artifact.publishedPhpSdkComposerPackage%%
```

Supported Laravel versions auto-discover the provider. Publish the package
configuration and list the attributed handler classes:
Supported Laravel versions auto-discover the provider. On an unsupported or
unknown Laravel or PHP version, the provider refuses before registering any
configuration, clients or workers. Publish the package configuration and list
the attributed handler classes:

<!-- docs-example id="laravel.adoption.service.config" -->
```php
Expand Down
51 changes: 49 additions & 2 deletions docs/polyglot/php.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,10 @@ for the complete ownership comparison.

## Requirements

- PHP 8.1 or later
- PHP 8.1 or later for the framework-neutral SDK
- For the Laravel service-mode bridge in PHP SDK 3.10 and later: PHP 8.2 or
later and Laravel 12.69 or later in 12.x, or Laravel 13.30 or later in 13.x
with PHP 8.3 or later
- A reachable [self-hosted Server](/docs/polyglot/server/) or provisioned
[Cloud namespace runtime](/docs/polyglot/cloud-control-plane)

Expand Down Expand Up @@ -282,6 +285,48 @@ service-mode bridge, including drain and rollback. Use
[Deployment Modes](/docs/polyglot/deployment-modes/) for the wider runtime
boundary comparison.

## Upgrade to PHP SDK 3.10 and 3.11 {#upgrade-to-3-10-and-3-11}

Read the [PHP SDK upgrade guide](https://github.com/durable-workflow/sdk-php/blob/3.11.0/docs/portal/operate/upgrading.md)
before deploying. Upgrade every worker that can receive work from a task queue
together, including standby and autoscaling pools.

- **Laravel bridge.** From 3.10, the Laravel service-mode bridge follows
Workflow 2.21: PHP `^8.2` and patched Laravel `^12.69.0|^13.30.0`. Laravel
10 and 11 are no longer supported. The provider refuses unsupported or
unknown framework and PHP versions before registering anything. The bare SDK
keeps PHP `^8.1` and Symfony 6.4/7/8 support.
- **Condition fingerprints.** From 3.10, new condition waits record v2
(`dwphp2:sha256:`) predicate fingerprints. Older workers reject them, so
rolling workers back below 3.10 after v2 waits exist can fail replay. Stop or
drain older workers before replacements start, deploy PHP sources atomically
and restart every long-running worker, including workers using OPcache.
Workers that replay v2 waits need PHP's tokenizer. Existing v1 waits still
require an exact source-line match.
- **Static credentials.** From 3.10, static credentials are validated as
given. Malformed UTF-8, Unicode whitespace at either edge and embedded
control characters now fail instead of being trimmed or ignored. Check shared,
client, worker and framework process-handoff values before upgrading.
- **Occurrence deadlines.** In 3.11, a new top-level condition wait keeps its
first deadline across false wakes when the Server advertises
`condition_wait_occurrence_deadline` (native Server 3.3.0 or later). Without
that capability, workers send the same commands as before. Grouped condition
waits do not opt in yet. On an older Server, upgrade every worker on the queue
to 3.11 before upgrading the Server. On a Server that already advertises the
capability, drain or stop every older worker before any 3.11 worker consumes
the queue. Once an anchored wait exists, do not roll that queue's workers back
below 3.11.

PHP SDK 3.10 also adds `WorkflowContext::startChildWorkflow()`, which returns a
`ChildWorkflowHandle` once the child start commits and needs a runtime that
advertises `child_workflow_start_turn`. Other additions are
`ActivityContext::activityExecutionId`, optional typed declarations for
`upsertSearchAttributes()`, lazy workflow list and history iterators, and the
`enableCompletionPipelining` Worker option, which defaults to `false`.
Completion-carried polls are used only when the runtime advertises them. See
the [3.11.0 changelog](https://github.com/durable-workflow/sdk-php/blob/3.11.0/CHANGELOG.md)
for the complete list.

## Protocol and release boundary

The SDK declares its supported server range, worker protocol version,
Expand All @@ -308,7 +353,9 @@ not matching package version numbers.

## Workflow list and history pages {#workflow-list-and-history-pages}

These published calls return **one page**, not an automatic complete read: `Client::listWorkflows(...)` / `Client::workflowHistory(...)`. Continue with the returned opaque token while keeping namespace, filters and selected workflow/run fixed; stop at the final null/empty token and handle page errors explicitly. A partial page is not a replay bundle. Use the SDK history-export API for offline replay. The [published PHP 3.2.0 client source](https://github.com/durable-workflow/sdk-php/blob/3.2.0/src/Client.php) defines the current parameters; no new iterator capability is implied.
These published calls return **one page**, not an automatic complete read: `Client::listWorkflows(...)` / `Client::workflowHistory(...)`. Continue with the returned opaque token while keeping namespace, filters and selected workflow/run fixed; stop at the final null/empty token and handle page errors explicitly. A partial page is not a replay bundle. Use the SDK history-export API for offline replay. The [published PHP 3.2.0 client source](https://github.com/durable-workflow/sdk-php/blob/3.2.0/src/Client.php) defines the page parameters.

PHP SDK 3.10.0 and later also provide `Client::iterateWorkflows()` and `Client::iterateWorkflowHistory()`. They read a complete workflow listing or exact-run history lazily, one page at a time, keeping the opaque cursor, namespace and filters. Errors on later pages propagate, and malformed continuations or token cycles are refused instead of truncating or looping. See the [published PHP 3.11.0 client source](https://github.com/durable-workflow/sdk-php/blob/3.11.0/src/Client.php).

## Bounded failure reports {#bounded-failure-reports}

Expand Down
27 changes: 24 additions & 3 deletions i18n/de/docusaurus-plugin-content-docs/current/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,12 @@ Das eingebettete Paket und das Service-Modus-SDK haben eigene Supportverträge.

| Paketlinie | PHP | Laravel |
| --- | --- | --- |
| Aktuelles eingebettetes Workflow 2.21 | PHP 8.2+ in 8.x; PHP 8.3+ für Laravel 13 | `^12.69.0` oder `^13.30.0` |
| Aktuelles eingebettetes Workflow 2.22 | PHP 8.2+ in 8.x; PHP 8.3+ für Laravel 13 | `^12.69.0` oder `^13.30.0` |
| Eingebettetes Workflow 2.20.5 | PHP `^8.1`, zusätzlich gilt das Framework-Minimum | `^10.50.4`, `^11.56.1`, `^12.69.0` oder `^13.30.0` |
| Veröffentlichtes PHP-SDK 3.9.5 | Reines SDK PHP `^8.1`; die Laravel-Bridge beachtet ebenfalls das Framework-Minimum | `^10.50.4`, `^11.56.1`, `^12.69.0` oder `^13.30.0` |
| Veröffentlichtes PHP-SDK 3.11 | Reines SDK PHP `^8.1`; die Laravel-Bridge benötigt PHP `^8.2` und für Laravel 13 PHP 8.3+ | `^12.69.0` oder `^13.30.0` |
| PHP-SDK 3.9.5 | Reines SDK PHP `^8.1`; die Laravel-Bridge beachtet ebenfalls das Framework-Minimum | `^10.50.4`, `^11.56.1`, `^12.69.0` oder `^13.30.0` |

Maßgeblich sind der [veröffentlichte eingebettete Upgrade-Vertrag](https://github.com/durable-workflow/workflow/blob/2.21.0/resources/laravel-embedded-upgrade-contract.json)
Maßgeblich sind der [veröffentlichte eingebettete Upgrade-Vertrag](https://github.com/durable-workflow/workflow/blob/2.22.0/resources/laravel-embedded-upgrade-contract.json)
und die jeweilige `composer.json`. Das aktuelle eingebettete Release wurde mit
Laravel 12/PHP 8.2–8.4 und Laravel 13/PHP 8.3–8.4 geprüft. Es entfernt PHP 8.1
und Laravel 10/11. Die [historische stabile v1-Anleitung](/docs/1.x/installation/)
Expand All @@ -84,6 +85,26 @@ Laufzeit offener v1-Läufe und folgen Sie der [Adoptionsanleitung](/docs/laravel
für Drain oder Koexistenz. Eine geänderte Composer-Anforderung migriert keinen
dauerhaften Verlauf.

PHP-SDK 3.10 hat die Laravel-Bridge für den Service-Modus auf dieselben PHP- und
Laravel-Mindestversionen wie Workflow 2.21 angehoben und den Support für
Laravel 10/11 entfernt; 3.11 behält sie bei. Ihr Provider verweigert nicht
unterstützte oder unbekannte Framework- und PHP-Versionen, bevor er
Konfiguration, Clients oder Worker registriert. Bestehende Anwendungen mit
SDK 3.9.x behalten ihren eigenen Vertrag, während die Plattform aktualisiert
wird. Siehe die [Upgrade-Hinweise zum PHP-SDK](./polyglot/php.md#upgrade-to-3-10-and-3-11).

Workflow 2.22 fügt keine Datenbankmigration hinzu und behält die
Mindestversionen von 2.21 bei. Sein eingebettetes Worker-Protokoll kündigt `1.22`
an und akzeptiert weiterhin Anfragen mit `1.20`. `1.22` ergänzt eine optionale
Frist pro Vorkommen, die externe Aufrufer für Bedingungswartevorgänge anfordern
können; der eingebettete Runner behält sein bisheriges Warteverhalten bei.
Sobald ein Workflow diese Richtlinie verwendet hat, ist ein Rollback auf ein
früheres Workflow-Release nur durch Wiederherstellen einer vor dem Upgrade
erstellten Sicherung möglich. Ältere Releases können die Richtlinie verwerfen
und die Wartekette durcheinanderbringen; ein erneutes Upgrade repariert diesen
Verlauf nicht. Siehe das
[Changelog zu 2.22.0](https://github.com/durable-workflow/workflow/blob/2.22.0/CHANGELOG.md).

## Stabilitätsstufen {#stability-levels}

Jede öffentliche Durable-Workflow-Schnittstelle trägt genau eine dieser Stabilitätsstufen. Die Stufen sind explizit: Eine nicht klassifizierte Schnittstelle ist nicht öffentlich.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@ Für ein unmittelbares v1-Upgrade auf Paketebene halten Sie den ausführlichen [
| Eingebettetes 2.0-Laravel | PHP-SDK-Dienstmodus | Die Anwendung soll die Orchestrierungslaufzeit nicht mehr verwalten oder benötigt eine gemeinsame/mehrsprachige Laufzeitgrenze. | Neue Starts nach Bereitschaft der Worker an die Dienstlaufzeit leiten. Eingebettete Läufe an ihrem Ursprungsort abschließen lassen oder für selbst gehosteten Server das explizite Importverfahren für geeignete eingebettete v2-Läufe verwenden. |

Prüfen Sie vor der Zielwahl die [veröffentlichten Laravel-Supportlinien](./compatibility.md#laravel-support).
Das aktuelle eingebettete Paket benötigt Laravel 12.69 oder 13.30 und passendes
PHP. Das veröffentlichte PHP-SDK 3.9.5 unterstützt weiterhin gepatchtes Laravel
10–13; der reine Client behält PHP 8.1 bei. Eine ältere v1-Anwendung benötigt
möglicherweise zuerst ein Framework-Upgrade. Bewahren Sie dabei ihre
v1-Laufzeit und offenen Läufe.
Das aktuelle eingebettete Paket und ab PHP-SDK 3.10 auch die Laravel-Bridge des
Dienstmodus benötigen beide Laravel 12.69 oder 13.30 und passendes PHP. Der
reine Dienstmodus-Client behält PHP 8.1 bei. PHP-SDK 3.9.x behält seinen
früheren Bridge-Vertrag für gepatchtes Laravel 10–13. Eine ältere v1-Anwendung
benötigt möglicherweise ein Framework-Upgrade, bevor sie auf eine der beiden
aktuellen Linien wechselt. Bewahren Sie dabei ihre v1-Laufzeit und offenen Läufe.

## Verantwortungsgrenzen vergleichen {#compare-the-ownership-boundary}

Expand Down Expand Up @@ -299,7 +300,7 @@ Installieren Sie das unabhängig veröffentlichte SDK-Paket. Dieser Befehl wird
composer require %%artifact.publishedPhpSdkComposerPackage%%
```

Unterstützte Laravel-Versionen erkennen den Provider automatisch. Veröffentlichen Sie die Paketkonfiguration und listen Sie die mit Attributen versehenen Handlerklassen auf:
Unterstützte Laravel-Versionen erkennen den Provider automatisch. Bei einer nicht unterstützten oder unbekannten Laravel- oder PHP-Version bricht der Provider ab, bevor er Konfiguration, Clients oder Worker registriert. Veröffentlichen Sie die Paketkonfiguration und listen Sie die mit Attributen versehenen Handlerklassen auf:

<!-- docs-example id="laravel.adoption.service.config" -->
```php
Expand Down
Loading
Loading