From cf42b4c5529f316fcc56056f3367d4e368847e67 Mon Sep 17 00:00:00 2001 From: Durable Workflow Date: Fri, 23 Oct 2026 09:49:42 +0000 Subject: [PATCH] docs: explain released embedded activity guard in Workflow 2.11.3 --- docs/features/versioning.md | 8 ++++++++ .../current/features/versioning.md | 8 ++++++++ i18n/de/source-hashes.json | 2 +- .../current/features/versioning.md | 8 ++++++++ i18n/es/source-hashes.json | 2 +- .../current/features/versioning.md | 8 ++++++++ i18n/fr/source-hashes.json | 2 +- .../current/features/versioning.md | 8 ++++++++ i18n/ja/source-hashes.json | 2 +- .../current/features/versioning.md | 8 ++++++++ i18n/pt-BR/source-hashes.json | 2 +- .../current/features/versioning.md | 8 ++++++++ i18n/uk/source-hashes.json | 2 +- .../current/features/versioning.md | 8 ++++++++ i18n/zh-Hans/source-hashes.json | 2 +- 15 files changed, 71 insertions(+), 7 deletions(-) diff --git a/docs/features/versioning.md b/docs/features/versioning.md index ace6ff202ca..299b1114811 100644 --- a/docs/features/versioning.md +++ b/docs/features/versioning.md @@ -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`. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/de/docusaurus-plugin-content-docs/current/features/versioning.md index 7df410ff4f4..cd493925638 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/features/versioning.md @@ -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 diff --git a/i18n/de/source-hashes.json b/i18n/de/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/de/source-hashes.json +++ b/i18n/de/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", diff --git a/i18n/es/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/es/docusaurus-plugin-content-docs/current/features/versioning.md index 41543024d9e..88296e6cbff 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/features/versioning.md @@ -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`. diff --git a/i18n/es/source-hashes.json b/i18n/es/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/es/source-hashes.json +++ b/i18n/es/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/fr/docusaurus-plugin-content-docs/current/features/versioning.md index 3fb663cf53d..6783a09ef5d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/features/versioning.md @@ -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`. diff --git a/i18n/fr/source-hashes.json b/i18n/fr/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/fr/source-hashes.json +++ b/i18n/fr/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/ja/docusaurus-plugin-content-docs/current/features/versioning.md index f52eac9cd1b..3893b5b767b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/features/versioning.md @@ -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` になります。 diff --git a/i18n/ja/source-hashes.json b/i18n/ja/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/ja/source-hashes.json +++ b/i18n/ja/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/versioning.md index 2a365158278..e1f4a218379 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/versioning.md @@ -133,6 +133,14 @@ As verificações de serviço registraram `max_attempts = 1`; depois, a falha de Workflow incorporado 2.11.2 também aceita uma mudança de assinatura que substitui o escalar registrado `7` por um DTO injetado com valor padrão `0`, e pode concluir incorretamente com `0`. [Workflow #910](https://github.com/durable-workflow/workflow/issues/910) acompanha esse defeito do produto. Não use injeção de dependências como migração de entrada da atividade nem suponha que a proteção de entrada do workflow cubra esse caso. Restaurar código compatível não reabre um run terminal. Inspecione o estado real e siga o [guia de recuperação](../failures-and-recovery.md) sem alterar entradas registradas, histórico ou prazos. +### Proteção publicada para atividades embutidas {#embedded-activity-argument-safeguard} + +Workflow **2.11.3 é a versão mínima corrigida** da proteção PHP embutida contra vinculação de atividade que desloca argumentos registrados. Nos caminhos de atividade em fila e local, substituir o escalar registrado `7` por um DTO injetado cujo padrão é `0` é recusado antes de executar o corpo, com `ActivityEntryArgumentsMismatchException`. A [verificação do pacote publicado e instalado em processos novos](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363) comprova recusa e recuperação com a entrada original. A versão 2.11.2 descrita acima continua afetada. A proteção não adiciona campos a resultados antigos; leitores compatíveis ainda precisam do valor alternativo. + +A recusa segue a **política registrada de tentativas, backoff e timeouts** da atividade. Com uma única tentativa permitida, a atividade esgota as tentativas e uma falha não tratada faz o workflow falhar. Se restarem tentativas definidas pelo autor e o código compatível voltar antes da nova tentativa permitida e dos prazos, a mesma execução/atividade original pode concluir com sua entrada registrada. A verificação comprova duas tentativas definidas pelo autor, backoff zero e resultado `7`; ela não promete espera indefinida por uma implantação futura nem concede tentativas extras. + +Restaurar o código ou instalar o pacote não reabre originais terminais, reinicia prazos nem restaura tentativas consumidas. Inspecione a falha real e preserve entrada/histórico registrados. Verifique o pacote Workflow instalado na aplicação embutida: esta versão da biblioteca não atualiza imagens existentes do Server nem estabelece aceitação de workers de serviço ou nativos. + ## Uso de `getVersion` {#using-getversion} `getVersion()` é um helper de fluxo sequencial seguro para replay. Cada ponto de mudança registra um marcador durável de versão para a execução na primeira passagem, e todo replay posterior reutiliza esse valor confirmado, em vez de recalcular a ramificação a partir do código atual. Execuções antigas que precedem um ponto de ramificação recém-introduzido recebem `DEFAULT_VERSION` de forma conservadora. diff --git a/i18n/pt-BR/source-hashes.json b/i18n/pt-BR/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/pt-BR/source-hashes.json +++ b/i18n/pt-BR/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/uk/docusaurus-plugin-content-docs/current/features/versioning.md index fb06d216883..2b08907144c 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/features/versioning.md @@ -133,6 +133,14 @@ $currency = $result['currency'] ?? 'USD'; Вбудований Workflow 2.11.2 також приймає зміну сигнатури activity, що замінює записаний скаляр `7` ін’єктованим DTO з типовою сумою `0`, і може помилково завершитися зі значенням `0`. Цей дефект продукту відстежує [Workflow #910](https://github.com/durable-workflow/workflow/issues/910). Не використовуйте ін’єкцію залежностей для перенесення аргументів activity і не вважайте, що захист входу workflow охоплює цей випадок. Повернення сумісного коду не відкриває термінальний запуск знову. Перевірте фактичний стан і дотримуйтеся [посібника з відновлення](../failures-and-recovery.md), не змінюючи записаних аргументів, історії чи кінцевих строків. +### Опублікований захист входу в embedded activity {#embedded-activity-argument-safeguard} + +Workflow **2.11.3 — мінімальна виправлена версія** embedded PHP-захисту від прив’язування activity, що витісняє записані аргументи. Для чергових і локальних activity заміна записаного скаляра `7` інжектованим DTO зі значенням `0` за замовчуванням відхиляється до виконання тіла через `ActivityEntryArgumentsMismatchException`. [Перевірка встановленого опублікованого пакета в нових процесах](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363) підтверджує відмову й відновлення з початковим входом. Описана вище версія 2.11.2 залишається вразливою до цього дефекту. Захист не додає поля до старих результатів activity; сумісним читачам усе ще потрібне резервне значення. + +Відмова дотримується **записаної політики спроб, backoff і таймаутів** activity. За однієї дозволеної спроби activity вичерпується, а необроблена помилка завершує workflow невдало. Якщо визначені автором спроби ще залишилися, а сумісний код повернувся до дозволеної повторної спроби й дедлайнів, той самий початковий запуск/activity може завершитися із записаним входом. Перевірка підтверджує дві визначені автором спроби з нульовим backoff і результатом `7`; вона не обіцяє необмеженого очікування майбутнього розгортання й не надає додаткових спроб. + +Повернення коду або встановлення пакета не відкриває завершені оригінали, не скидає дедлайни й не відновлює витрачені спроби. Перевіряйте фактичну помилку та зберігайте записаний вхід/історію. Перевіряйте пакет Workflow, установлений в embedded-застосунку: цей випуск бібліотеки не оновлює наявні образи Server і не підтверджує приймання для service-worker/native. + ## Використання `getVersion` {#using-getversion} `getVersion()` — це безпечна щодо replay функція для послідовного коду. Під час першого виконання кожна точка зміни записує стійкий маркер версії запуску. Кожен подальший replay використовує це зафіксоване значення замість повторного визначення гілки за поточним кодом. Старі запуски, що передують новій точці розгалуження, консервативно отримують `DEFAULT_VERSION`. diff --git a/i18n/uk/source-hashes.json b/i18n/uk/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/uk/source-hashes.json +++ b/i18n/uk/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/versioning.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/versioning.md index b8b749cab11..28361675564 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/versioning.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/versioning.md @@ -133,6 +133,14 @@ $currency = $result['currency'] ?? 'USD'; 嵌入式 Workflow 2.11.2 还会接受一种签名变化:以默认金额为 `0` 的注入式 DTO 替换已记录的标量 `7`,并可能错误地以 `0` 完成。[Workflow #910](https://github.com/durable-workflow/workflow/issues/910) 跟踪此产品缺陷。不要将依赖注入当作活动输入迁移,也不要假定工作流入口保护覆盖此情况。恢复兼容代码不会重新打开已终结的运行;请检查实际状态,并按照[恢复指南](../failures-and-recovery.md)操作,不要修改已记录的输入、历史或截止时间。 +### 已发布的嵌入式活动保护 {#embedded-activity-argument-safeguard} + +Workflow **2.11.3 是包含此修复的最低版本**,可防止嵌入式 PHP 活动绑定过程替换已记录的参数。在队列活动和本地活动路径中,若用默认值为 `0` 的注入 DTO 替换已记录的标量 `7`,会在活动主体执行前通过 `ActivityEntryArgumentsMismatchException` 拒绝。[已发布包安装后的冷进程验证](https://github.com/durable-workflow/workflow/issues/910#issuecomment-6362080363)确认了拒绝,以及使用原始输入恢复的行为。上文中的旧版 2.11.2 仍受影响。此保护不会给旧活动结果添加字段;兼容的读取代码仍需回退值。 + +拒绝遵循活动**已记录的尝试次数、退避和超时策略**。若只允许一次尝试,活动会耗尽尝试次数;未处理的失败会使工作流失败。若作者配置的尝试次数尚未耗尽,且兼容代码在允许的重试和截止时间之前恢复,同一个原始运行/活动便可以使用已记录的输入完成。验证覆盖了作者配置的两次尝试、零退避和结果 `7`;它不承诺无限等待未来部署,也不会增加尝试次数。 + +恢复代码或安装软件包不会重新打开终态的原始运行、重置截止时间或恢复已消耗的尝试次数。应检查实际失败,并保留已记录的输入和历史。请检查嵌入式应用中安装的 Workflow 软件包:本次库发布不会更新已有 Server 镜像,也不代表已验证服务 Worker 或原生运行时。 + ## 使用 `getVersion` {#using-getversion} `getVersion()` 是可安全重放、按顺序编写的辅助函数。每个变更点在首次执行时为运行记录持久版本标记,后续每次重放都复用该已提交值,不会根据当前代码重新计算分支。早于新引入分支点的旧运行会保守地获得 `DEFAULT_VERSION`。 diff --git a/i18n/zh-Hans/source-hashes.json b/i18n/zh-Hans/source-hashes.json index d08bd4bdab9..ffc2cb01523 100644 --- a/i18n/zh-Hans/source-hashes.json +++ b/i18n/zh-Hans/source-hashes.json @@ -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": "2b08a0cdaee486970e099ea8bcb91d7f6daf135b0bc98629ed47f3885e64c77d", "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb",