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
8 changes: 8 additions & 0 deletions docs/features/versioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,14 @@ Embedded Workflow 2.11.2 also accepts a changed activity signature that replaces

Review [recorded workflow start arguments](#evolving-recorded-entry-arguments) and the [signal payload evolution recipe](signals.md#evolve-a-signal-payload) alongside these activity contracts.

### Released embedded activity guard {#embedded-activity-argument-safeguard}

Workflow **2.11.3 is the fixed minimum** for the embedded PHP guard against activity binding that displaces recorded arguments. In queued and local activity paths, replacing recorded scalar `7` with an injected DTO whose default is `0` is refused before the activity body runs, with `ActivityEntryArgumentsMismatchException`. The [published, installed cold-process receipt](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363) verifies refusal and recovery with the original input. The older 2.11.2 behavior above remains affected. This guard does not add fields to older activity results; compatible readers still need their fallback.

The refusal follows the activity's **recorded attempt, backoff and timeout policy**. With one allowed attempt, it exhausts the activity and an unhandled failure fails the workflow. If authored attempts remain and compatible code returns before the permitted retry and deadlines, the same original run/activity can complete with its recorded input. The receipt verifies two authored attempts with zero backoff and output `7`; it does not promise an indefinite hold for a future deployment or grant extra attempts.

Restoring code or installing the package does not reopen terminal originals, reset deadlines or restore consumed attempts. Inspect the actual failure and preserve recorded input/history. Check the Workflow package installed in the embedded application: this library release does not update existing Server images or establish service-worker/native acceptance.

## Using `getVersion`

`getVersion()` is a replay-safe straight-line helper. Each change point records a durable version marker for the run on first execution, and every later replay reuses that committed value instead of recalculating the branch from today's code. Old runs that predate a newly introduced branch point conservatively receive `DEFAULT_VERSION`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,14 @@ Die Service-Prüfungen zeichneten `max_attempts = 1` auf. Der unbehandelte Aktiv

Eingebetteter Workflow 2.11.2 akzeptiert außerdem eine Signaturänderung, die den aufgezeichneten Skalar `7` durch ein injiziertes DTO mit Standardbetrag `0` ersetzt, und kann fälschlich mit `0` abschließen. [Workflow #910](https://github.com/durable-workflow/workflow/issues/910) verfolgt diesen Produktfehler. Verwenden Sie Dependency Injection nicht zur Migration von Aktivitätseingaben und nehmen Sie nicht an, dass die Workflow-Einstiegsprüfung diesen Fall abdeckt. Kompatiblen Code wiederherzustellen öffnet keinen bereits terminalen Run. Prüfen Sie den tatsächlichen Zustand und folgen Sie der [Wiederherstellungsanleitung](../failures-and-recovery.md), ohne aufgezeichnete Eingaben, History oder Fristen zu ändern.

### Veröffentlichter Schutz für eingebettete Activities {#embedded-activity-argument-safeguard}

Workflow **2.11.3 ist die korrigierte Mindestversion** für den eingebetteten PHP-Schutz gegen eine Activity-Bindung, die aufgezeichnete Argumente verdrängt. Sowohl bei über Queues ausgeführten als auch bei lokalen Activities wird das Ersetzen des aufgezeichneten Skalars `7` durch ein injiziertes DTO mit dem Standardwert `0` vor dem Aufruf des Activity-Rumpfs mit `ActivityEntryArgumentsMismatchException` abgewiesen. Die [Prüfung des veröffentlichten, installierten Pakets in neuen Prozessen](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363) bestätigt Ablehnung und Wiederherstellung mit der ursprünglichen Eingabe. Die oben beschriebene ältere Version 2.11.2 bleibt betroffen. Der Schutz ergänzt keine Felder in älteren Activity-Ergebnissen; kompatible Leser benötigen weiterhin ihren Ersatzwert.

Die Ablehnung folgt der **aufgezeichneten Richtlinie für Versuche, Backoff und Timeouts** der Activity. Bei nur einem erlaubten Versuch ist dieser damit verbraucht; ein unbehandelter Fehler lässt den Workflow scheitern. Sind noch vom Autor festgelegte Versuche übrig und kehrt kompatibler Code vor dem erlaubten Wiederholungsversuch und den Fristen zurück, kann derselbe ursprüngliche Lauf/dieselbe Activity mit der aufgezeichneten Eingabe abschließen. Die Prüfung bestätigt zwei festgelegte Versuche ohne Backoff und das Ergebnis `7`; sie verspricht weder unbegrenztes Warten auf ein künftiges Deployment noch zusätzliche Versuche.

Das Wiederherstellen des Codes oder Installieren des Pakets öffnet keine endgültig beendeten Originale, setzt keine Fristen zurück und stellt keine verbrauchten Versuche wieder her. Prüfen Sie den tatsächlichen Fehler und bewahren Sie aufgezeichnete Eingabe und Historie. Prüfen Sie das in der eingebetteten Anwendung installierte Workflow-Paket: Diese Bibliotheksversion aktualisiert keine bestehenden Server-Images und belegt keine Abnahme für Service-Worker oder native Implementierungen.

## `getVersion` verwenden {#using-getversion}

`getVersion()` ist ein Replay-sicherer geradliniger Helfer. Jeder Änderungspunkt
Expand Down
2 changes: 1 addition & 1 deletion i18n/de/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"features/timeouts.md": "e9c1b46c679dae3acfcdc199b8f3e07defd7b114dfd2d8fe6c9ac20285b776aa",
"features/timers.md": "94a017d85c9dc7e8e598ce895bb722523422e3729b1935ede777ed7dd2734db7",
"features/updates.md": "ecc24a4ae764edf0281430583216d47d4b75fd9f58d183f7dd5bc9794cbd1c06",
"features/versioning.md": "3686d25c27aa8a4f576b1fb01c554c6d58f8fa91363d64314830a325872a1ed3",
"features/versioning.md": "b140788b451272eff549c0064dc52433a95897ef051a145add0661632a5648bd",
"features/webhooks.md": "edcdfc05ccb0d34a77c51594f85bc3cab343e787f8e0e08d2cd4ddebd048e8c8",
"features/worker-sessions.md": "5065368fb5b93599dbd08d97cb9ac312576eb42fee14f081db663aa9f78fb68c",
"how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,14 @@ Las pruebas de servicio registraron `max_attempts = 1`; después, el fallo de ac

Workflow integrado 2.11.2 también acepta una nueva firma que sustituye el escalar registrado `7` por un DTO inyectado con cantidad predeterminada `0`, y puede completar incorrectamente con `0`. [Workflow #910](https://github.com/durable-workflow/workflow/issues/910) sigue este defecto del producto. No use la inyección de dependencias para migrar entradas de actividad ni suponga que la protección de entrada del workflow cubre este caso. Restaurar código compatible no reabre un run terminal. Inspeccione el estado real y siga la [guía de recuperación](../failures-and-recovery.md) sin cambiar entradas registradas, historial ni plazos.

### Protección publicada para actividades embebidas {#embedded-activity-argument-safeguard}

Workflow **2.11.3 es la versión mínima corregida** de la protección PHP embebida contra una vinculación de actividad que desplaza argumentos registrados. En las rutas de actividad en cola y local, sustituir el escalar registrado `7` por un DTO inyectado cuyo valor predeterminado es `0` se rechaza antes de ejecutar el cuerpo, con `ActivityEntryArgumentsMismatchException`. La [validación del paquete publicado e instalado en procesos nuevos](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363) verifica el rechazo y la recuperación con la entrada original. La versión 2.11.2 descrita arriba sigue afectada. Esta protección no añade campos a resultados antiguos; los lectores compatibles aún necesitan su valor de respaldo.

El rechazo sigue la **política registrada de intentos, espera entre reintentos y timeouts** de la actividad. Con un solo intento permitido, la actividad agota sus intentos y un fallo no manejado hace fallar el workflow. Si quedan intentos definidos por el autor y vuelve el código compatible antes del reintento permitido y los plazos, la misma ejecución/actividad original puede completarse con su entrada registrada. La validación verifica dos intentos definidos por el autor, sin espera, y el resultado `7`; no promete esperar indefinidamente a un despliegue futuro ni concede intentos adicionales.

Restaurar el código o instalar el paquete no reabre originales terminales, reinicia plazos ni recupera intentos consumidos. Inspeccione el fallo real y conserve la entrada y el historial registrados. Compruebe el paquete Workflow instalado en la aplicación embebida: esta versión de biblioteca no actualiza imágenes existentes del Server ni establece aceptación para workers de servicio o nativos.

## Usar `getVersion` {#using-getversion}

`getVersion()` es un helper secuencial seguro para la reproducción. En la primera ejecución registra un marcador duradero por punto de cambio; las reproducciones posteriores reutilizan el valor confirmado sin recalcular la rama con el código actual. Las ejecuciones anteriores a la nueva bifurcación reciben conservadoramente `DEFAULT_VERSION`.
Expand Down
2 changes: 1 addition & 1 deletion i18n/es/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"features/timeouts.md": "e9c1b46c679dae3acfcdc199b8f3e07defd7b114dfd2d8fe6c9ac20285b776aa",
"features/timers.md": "94a017d85c9dc7e8e598ce895bb722523422e3729b1935ede777ed7dd2734db7",
"features/updates.md": "ecc24a4ae764edf0281430583216d47d4b75fd9f58d183f7dd5bc9794cbd1c06",
"features/versioning.md": "3686d25c27aa8a4f576b1fb01c554c6d58f8fa91363d64314830a325872a1ed3",
"features/versioning.md": "b140788b451272eff549c0064dc52433a95897ef051a145add0661632a5648bd",
"features/webhooks.md": "edcdfc05ccb0d34a77c51594f85bc3cab343e787f8e0e08d2cd4ddebd048e8c8",
"features/worker-sessions.md": "5065368fb5b93599dbd08d97cb9ac312576eb42fee14f081db663aa9f78fb68c",
"how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,14 @@ Les vérifications en mode service ont enregistré `max_attempts = 1` ; l’éch

Workflow embarqué 2.11.2 accepte aussi une modification de signature qui remplace le scalaire enregistré `7` par un DTO injecté dont le montant par défaut est `0`, et peut terminer à tort avec `0`. [Workflow #910](https://github.com/durable-workflow/workflow/issues/910) suit ce défaut du produit. N’utilisez pas l’injection de dépendances comme migration d’entrée d’activité et ne supposez pas que la protection d’entrée du workflow couvre ce cas. Restaurer un code compatible ne rouvre pas un run déjà terminal. Inspectez son état réel et suivez le [guide de récupération](../failures-and-recovery.md) sans modifier les entrées enregistrées, l’historique ou les échéances.

### Protection publiée pour les activités embarquées {#embedded-activity-argument-safeguard}

Workflow **2.11.3 est la version minimale corrigée** de la protection PHP embarquée contre une liaison d’activité qui remplace des arguments enregistrés. Dans les chemins d’activité en file et locale, remplacer le scalaire enregistré `7` par un DTO injecté dont la valeur par défaut est `0` est refusé avant l’exécution du corps, avec `ActivityEntryArgumentsMismatchException`. La [vérification du paquet publié et installé dans de nouveaux processus](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363) confirme le refus et la récupération avec l’entrée initiale. L’ancienne version 2.11.2 décrite ci-dessus reste affectée. Cette protection n’ajoute pas de champs aux anciens résultats ; les lecteurs compatibles ont toujours besoin d’une valeur de repli.

Le refus suit la **politique enregistrée de tentatives, de temporisation et de timeouts** de l’activité. Si une seule tentative est autorisée, elle est épuisée et un échec non traité fait échouer le workflow. S’il reste des tentatives définies par l’auteur et que le code compatible revient avant la tentative permise et les échéances, la même exécution/activité initiale peut se terminer avec son entrée enregistrée. La vérification couvre deux tentatives définies par l’auteur, sans temporisation, et le résultat `7` ; elle ne promet ni attente indéfinie d’un futur déploiement ni tentatives supplémentaires.

Restaurer le code ou installer le paquet ne rouvre pas les exécutions initiales terminales, ne réinitialise pas les échéances et ne restitue pas les tentatives consommées. Examinez l’échec réel et conservez l’entrée et l’historique enregistrés. Vérifiez le paquet Workflow installé dans l’application embarquée : cette version de bibliothèque ne met pas à jour les images Server existantes et n’établit pas l’acceptation des workers de service ou natifs.

## Utiliser `getVersion` {#using-getversion}

`getVersion()` est une fonction séquentielle sûre à relire. Chaque point de changement enregistre un marqueur durable de version lors de la première exécution. Les relectures réutilisent cette valeur validée au lieu de recalculer la branche d’après le code actuel. Par prudence, les exécutions antérieures à un nouveau point de branchement reçoivent `DEFAULT_VERSION`.
Expand Down
2 changes: 1 addition & 1 deletion i18n/fr/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"features/timeouts.md": "e9c1b46c679dae3acfcdc199b8f3e07defd7b114dfd2d8fe6c9ac20285b776aa",
"features/timers.md": "94a017d85c9dc7e8e598ce895bb722523422e3729b1935ede777ed7dd2734db7",
"features/updates.md": "ecc24a4ae764edf0281430583216d47d4b75fd9f58d183f7dd5bc9794cbd1c06",
"features/versioning.md": "3686d25c27aa8a4f576b1fb01c554c6d58f8fa91363d64314830a325872a1ed3",
"features/versioning.md": "b140788b451272eff549c0064dc52433a95897ef051a145add0661632a5648bd",
"features/webhooks.md": "edcdfc05ccb0d34a77c51594f85bc3cab343e787f8e0e08d2cd4ddebd048e8c8",
"features/worker-sessions.md": "5065368fb5b93599dbd08d97cb9ac312576eb42fee14f081db663aa9f78fb68c",
"how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,14 @@ $currency = $result['currency'] ?? 'USD';

組み込み Workflow 2.11.2 では、記録済みのスカラー `7` を、金額のデフォルト値が `0` の注入された DTO に置き換えるシグネチャ変更が受け入れられ、誤って `0` で完了する場合もあります。この製品不具合は [Workflow #910](https://github.com/durable-workflow/workflow/issues/910) で追跡しています。依存性注入を入力の移行として使わず、ワークフロー入口の保護がこのケースも対象にすると思わないでください。互換コードを戻しても、終了済みの実行は再開されません。実際の状態を確認し、記録済みの入力、履歴、期限を変更せずに[復旧ガイド](../failures-and-recovery.md)に従ってください。

### 公開済みの組み込みアクティビティ保護 {#embedded-activity-argument-safeguard}

Workflow **2.11.3 がこの修正を含む最小バージョン**です。組み込み PHP のアクティビティの引数束縛で、記録済みの引数が別の値に置き換わることを防ぎます。キュー実行とローカル実行の両方で、記録済みのスカラー `7` を既定値が `0` の注入 DTO に置き換えようとすると、アクティビティ本体の実行前に `ActivityEntryArgumentsMismatchException` で拒否されます。[公開パッケージをインストールした新規プロセスでの検証](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363)では、拒否と元の入力による復旧を確認しています。上記の旧版 2.11.2 は引き続き影響を受けます。この保護は古いアクティビティ結果にフィールドを追加しないため、互換な読み取り側には引き続きフォールバックが必要です。

拒否はアクティビティに**記録された試行回数、バックオフ、タイムアウトのポリシー**に従います。許可された試行が 1 回だけなら試行を使い切り、未処理の失敗はワークフローを失敗させます。作成者が設定した試行が残り、許可されたリトライと期限より前に互換コードへ戻れば、同じ元の実行/アクティビティが記録済みの入力で完了できます。検証は、作成者が設定した 2 回の試行、バックオフなし、結果 `7` を確認しています。将来のデプロイを無期限に待つことや、追加の試行は保証しません。

コードの復元やパッケージのインストールは、終端状態の元の実行を再開せず、期限をリセットせず、消費済みの試行も戻しません。実際の失敗を確認し、記録済みの入力と履歴を保持してください。組み込みアプリケーションにインストールされた Workflow パッケージを確認してください。このライブラリのリリースは、既存の Server イメージを更新せず、サービス Worker やネイティブ実装の受け入れ検証も示しません。

## `getVersion` の使用 {#using-getversion}

`getVersion()` は安全にリプレイできる逐次ヘルパーです。各変更点は初回に実行の永続バージョンマーカーを記録し、後のリプレイは現在のコードから分岐を計算せず、その値を再利用します。新しい分岐点より前に始まった実行は保守的に `DEFAULT_VERSION` になります。
Expand Down
2 changes: 1 addition & 1 deletion i18n/ja/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"features/timeouts.md": "e9c1b46c679dae3acfcdc199b8f3e07defd7b114dfd2d8fe6c9ac20285b776aa",
"features/timers.md": "94a017d85c9dc7e8e598ce895bb722523422e3729b1935ede777ed7dd2734db7",
"features/updates.md": "ecc24a4ae764edf0281430583216d47d4b75fd9f58d183f7dd5bc9794cbd1c06",
"features/versioning.md": "3686d25c27aa8a4f576b1fb01c554c6d58f8fa91363d64314830a325872a1ed3",
"features/versioning.md": "b140788b451272eff549c0064dc52433a95897ef051a145add0661632a5648bd",
"features/webhooks.md": "edcdfc05ccb0d34a77c51594f85bc3cab343e787f8e0e08d2cd4ddebd048e8c8",
"features/worker-sessions.md": "5065368fb5b93599dbd08d97cb9ac312576eb42fee14f081db663aa9f78fb68c",
"how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb",
Expand Down
Loading
Loading