From 73ddbd252eed1d1df2089e7fdf42885edb12e70c Mon Sep 17 00:00:00 2001 From: Durable Workflow Date: Fri, 23 Oct 2026 12:44:16 +0000 Subject: [PATCH] docs: qualify the fixed CLI writer and preserve export refusal boundaries --- docs/testing.md | 6 ++++++ i18n/de/docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/de/source-hashes.json | 2 +- i18n/es/docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/es/source-hashes.json | 2 +- i18n/fr/docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/fr/source-hashes.json | 2 +- i18n/ja/docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/ja/source-hashes.json | 2 +- .../pt-BR/docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/pt-BR/source-hashes.json | 2 +- i18n/uk/docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/uk/source-hashes.json | 2 +- .../docusaurus-plugin-content-docs/current/testing.md | 6 ++++++ i18n/zh-Hans/source-hashes.json | 2 +- 15 files changed, 55 insertions(+), 7 deletions(-) diff --git a/docs/testing.md b/docs/testing.md index 6c5b526b02b..8160e2130e2 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -10,6 +10,10 @@ Keep selected-run exports from representative open and recently closed runs. Inc ### Embedded PHP {#embedded-php-replay} +Use Workflow **2.11.4 or newer** for `workflow:v2:history-export` to preserve whole/nested floating-point kinds and signed zero, such as `1.0` and `-0.0`, in new JSON bundles. Check `composer.lock` in the artifact that actually runs `artisan`; a separately selected installation pin may be older. The [normal installed writer qualification](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505) covers compact/pretty output for waiting/completed runs with the original checksum untouched. This qualifies the writer and integrity check, not your candidate workflow code. + +Older lossy JSON remains invalid: 2.11.4 does not reinterpret or repair it. If the authoritative store and original payload bytes are available, re-export using the fixed producer. Keep the generated bundle unchanged; never coerce numbers or edit a checksum/version to force acceptance. Still run candidate replay and enforce the promotion gate below. + Export from the application's owning store. Set `WORKFLOW_ID` and `RUN_ID` to the exact selected instance and run: ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### Service SDKs {#service-sdk-replay} +Server images, their bundled CLI and `dw`/SDK HTTP exports depend on the actual Server producer. The Core 2.11.4 release alone does not upgrade or qualify those artifacts. Follow the separate [Server #692 package-pin, image and installed-transport qualification](https://github.com/durable-workflow/server/issues/692); do not infer an HTTP fix from the Core tag. Keep refusing invalid bundles. + **PHP:** use `DurableWorkflow\Worker\Replayer::replay()` with the application's codec, callable, event list, original input, queue and recorded task identity. Let `NonDeterministicWorkflow` fail the test and assert the expected commands/result. See [PHP replay testing](https://php.durable-workflow.com/build/testing/). **Python:** use `Replayer.replay()` or `verify_replay()` against registered candidate workflows and assert the expected outcome. A returned object alone is not a passing assertion. Supply the original decoded `start_input` when events omit it: Core exports store it under `payloads.arguments`. Preserve recorded type, IDs and codec. See [Python replay APIs](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories). `--simulate-bundles` checks integrity, not candidate code; current schema-2 compatibility is tracked in [Python #173](https://github.com/durable-workflow/sdk-python/issues/173). Do not rewrite a version or checksum to bypass refusal. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/testing.md b/i18n/de/docusaurus-plugin-content-docs/current/testing.md index 7e1d0b86fd5..39aae015dde 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ Bewahren Sie Exporte ausgewählter Runs aus repräsentativen offenen und kürzli ### Eingebettetes PHP {#embedded-php-replay} +Verwenden Sie Workflow **2.11.4 oder neuer** für `workflow:v2:history-export`, um ganzzahlige und verschachtelte Gleitkommawerte sowie das Vorzeichen von Null, etwa `1.0` und `-0.0`, in neuen JSON-Bundles zu erhalten. Prüfen Sie `composer.lock` im Artefakt, das `artisan` tatsächlich ausführt; die separat gewählte Installation kann eine ältere Version festlegen. Die [Abnahme des normal installierten Writers](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505) umfasst kompakte/formatierte Ausgaben wartender/abgeschlossener Läufe mit unveränderter ursprünglicher Prüfsumme. Das qualifiziert Writer und Integritätsprüfung, nicht Ihren Workflow-Kandidaten. + +Älteres verlustbehaftetes JSON bleibt ungültig: 2.11.4 interpretiert oder repariert es nicht neu. Wenn maßgeblicher Speicher und ursprüngliche Payload-Bytes verfügbar sind, exportieren Sie mit dem korrigierten Producer erneut. Lassen Sie das erzeugte Bundle unverändert; erzwingen Sie keine Annahme durch Zahlenkonvertierung oder Änderungen an Prüfsumme/Version. Führen Sie weiterhin Kandidaten-Replay und die nachstehende Freigabeprüfung aus. + Exportieren Sie aus dem Datenspeicher der Anwendung. Setzen Sie `WORKFLOW_ID` und `RUN_ID` auf die genau ausgewählte Instanz und den Run: ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### Service-SDKs {#service-sdk-replay} +Server-Images, deren enthaltene CLI und HTTP-Exporte von `dw`/SDK hängen vom tatsächlichen Server-Producer ab. Der Core-Release 2.11.4 allein aktualisiert oder qualifiziert diese Artefakte nicht. Beachten Sie die separate [Paket-Pin-, Image- und installierte Transportqualifikation in Server #692](https://github.com/durable-workflow/server/issues/692); leiten Sie keine HTTP-Korrektur aus dem Core-Tag ab. Ungültige Bundles bleiben abzulehnen. + **PHP:** verwenden Sie `DurableWorkflow\Worker\Replayer::replay()` mit dem Codec der Anwendung, der aufrufbaren Funktion, Ereignisliste, ursprünglichen Eingabe, Queue und aufgezeichneten Task-Identität. Lassen Sie `NonDeterministicWorkflow` den Test fehlschlagen und prüfen Sie erwartete Befehle und Ergebnisse. Siehe [PHP-Replay-Tests](https://php.durable-workflow.com/build/testing/). **Python:** verwenden Sie `Replayer.replay()` oder `verify_replay()` mit registrierten Kandidaten-Workflows und prüfen Sie das erwartete Ergebnis. Ein zurückgegebenes Objekt allein ist kein erfolgreicher Test. Übergeben Sie die ursprüngliche dekodierte `start_input`, wenn Ereignisse sie nicht enthalten: Core-Exporte speichern sie unter `payloads.arguments`. Behalten Sie aufgezeichneten Typ, IDs und Codec bei. Siehe [Python-Replay-APIs](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories). `--simulate-bundles` prüft Integrität und keinen Kandidatencode. Die aktuelle Kompatibilität mit Schema 2 wird in [Python #173](https://github.com/durable-workflow/sdk-python/issues/173) verfolgt. Schreiben Sie weder Version noch Prüfsumme um, um eine Ablehnung zu umgehen. diff --git a/i18n/de/source-hashes.json b/i18n/de/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/de/source-hashes.json +++ b/i18n/de/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" } diff --git a/i18n/es/docusaurus-plugin-content-docs/current/testing.md b/i18n/es/docusaurus-plugin-content-docs/current/testing.md index 93bbe936312..d80e6012eab 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ Conserve exportaciones de ejecuciones seleccionadas de workflows representativos ### PHP integrado {#embedded-php-replay} +Use Workflow **2.11.4 o posterior** para `workflow:v2:history-export` a fin de conservar tipos flotantes de valor entero, flotantes anidados y el signo del cero, como `1.0` y `-0.0`, en nuevos bundles JSON. Revise `composer.lock` en el artefacto que realmente ejecuta `artisan`; la combinación de instalación separada puede fijar una versión anterior. La [aceptación del escritor instalado normalmente](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505) cubre salida compact/pretty de ejecuciones en espera/completadas sin reemplazar la checksum original. Verifica el escritor y la integridad, no el código candidato de su workflow. + +El JSON antiguo con pérdida sigue siendo inválido: 2.11.4 no lo reinterpreta ni repara. Si dispone del almacén autoritativo y los bytes originales del payload, vuelva a exportar con el productor corregido. Mantenga el bundle generado intacto; no convierta números ni edite checksum/versión para forzar aceptación. Siga ejecutando replay del candidato y el control de promoción siguiente. + Exporte desde el almacén que pertenece a la aplicación. Establezca `WORKFLOW_ID` y `RUN_ID` para la instancia y ejecución seleccionadas exactamente: ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### SDK de servicio {#service-sdk-replay} +Las imágenes Server, su CLI incluido y las exportaciones HTTP de `dw`/SDK dependen del productor Server real. La versión Core 2.11.4 por sí sola no actualiza ni cualifica esos artefactos. Siga la [cualificación separada de pin de paquete, imagen y transportes instalados de Server #692](https://github.com/durable-workflow/server/issues/692); no deduzca una corrección HTTP del tag Core. Mantenga el rechazo de bundles inválidos. + **PHP:** use `DurableWorkflow\Worker\Replayer::replay()` con el codec de la aplicación, el callable, la lista de eventos, la entrada original, la cola y la identidad registrada de la tarea. Deje que `NonDeterministicWorkflow` haga fallar la prueba y compruebe comandos y resultados esperados. Consulte las [pruebas de replay de PHP](https://php.durable-workflow.com/build/testing/). **Python:** use `Replayer.replay()` o `verify_replay()` con los workflows candidatos registrados y compruebe el resultado esperado. Recibir un objeto no es, por sí solo, una aserción satisfactoria. Proporcione el `start_input` original decodificado cuando los eventos no lo incluyan: Core lo almacena en `payloads.arguments`. Conserve el tipo, los ID y el codec registrados. Consulte las [API de replay de Python](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories). `--simulate-bundles` comprueba integridad, no código candidato; la compatibilidad actual con el esquema 2 se sigue en [Python #173](https://github.com/durable-workflow/sdk-python/issues/173). No reescriba la versión ni la suma de comprobación para evitar un rechazo. diff --git a/i18n/es/source-hashes.json b/i18n/es/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/es/source-hashes.json +++ b/i18n/es/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" } diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/testing.md b/i18n/fr/docusaurus-plugin-content-docs/current/testing.md index a493b1f2394..c10b822d6c1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ Conservez les exports d’exécutions sélectionnées parmi des workflows ouvert ### PHP embarqué {#embedded-php-replay} +Utilisez Workflow **2.11.4 ou ultérieur** pour `workflow:v2:history-export` afin de préserver les types flottants de valeur entière, les flottants imbriqués et le signe du zéro, comme `1.0` et `-0.0`, dans les nouveaux bundles JSON. Vérifiez `composer.lock` dans l’artefact exécutant réellement `artisan` ; la combinaison sélectionnée séparément peut fixer une ancienne version. L’[acceptation du writer installé normalement](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505) couvre les sorties compact/pretty d’exécutions en attente/terminées sans remplacer la checksum originale. Cela qualifie le writer et l’intégrité, pas votre code de workflow candidat. + +Un ancien JSON ayant perdu de l’information reste invalide : 2.11.4 ne le réinterprète ni ne le répare. Si le stockage faisant autorité et les octets de payload originaux sont disponibles, réexportez avec le producteur corrigé. Conservez le bundle généré intact ; ne convertissez pas les nombres et ne modifiez pas checksum/version pour forcer l’acceptation. Exécutez toujours le replay candidat et le contrôle de promotion ci-dessous. + Exportez depuis le stockage dont l’application est propriétaire. Définissez `WORKFLOW_ID` et `RUN_ID` pour l’instance et l’exécution précisément sélectionnées : ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### SDK en mode service {#service-sdk-replay} +Les images Server, leur CLI intégré et les exports HTTP de `dw`/SDK dépendent du producteur Server réel. La publication Core 2.11.4 seule ne met pas à jour ni ne qualifie ces artefacts. Suivez la [qualification distincte du pin de paquet, de l’image et des transports installés de Server #692](https://github.com/durable-workflow/server/issues/692) ; ne déduisez pas une correction HTTP du tag Core. Continuez à refuser les bundles invalides. + **PHP :** utilisez `DurableWorkflow\Worker\Replayer::replay()` avec le codec de l’application, le callable, la liste d’événements, l’entrée d’origine, la file et l’identité enregistrée de la tâche. Laissez `NonDeterministicWorkflow` faire échouer le test et vérifiez les commandes et résultats attendus. Voir les [tests de relecture PHP](https://php.durable-workflow.com/build/testing/). **Python :** utilisez `Replayer.replay()` ou `verify_replay()` avec les workflows candidats enregistrés et vérifiez le résultat attendu. Le simple retour d’un objet ne constitue pas une assertion réussie. Fournissez le `start_input` d’origine décodé si les événements l’omettent : Core le stocke dans `payloads.arguments`. Préservez le type, les identifiants et le codec enregistrés. Voir les [API de relecture Python](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories). `--simulate-bundles` vérifie l’intégrité, pas le code candidat. La compatibilité actuelle avec le schéma 2 est suivie dans [Python #173](https://github.com/durable-workflow/sdk-python/issues/173). Ne réécrivez ni version ni somme de contrôle pour contourner un refus. diff --git a/i18n/fr/source-hashes.json b/i18n/fr/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/fr/source-hashes.json +++ b/i18n/fr/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" } diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/testing.md b/i18n/ja/docusaurus-plugin-content-docs/current/testing.md index c6e07c0b444..7fee383ed4a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ sidebar_position: 9 ### 組み込み PHP {#embedded-php-replay} +新しい JSON bundle で整数値の浮動小数点数、入れ子の浮動小数点数、ゼロの符号(`1.0` や `-0.0`)を保つには、`workflow:v2:history-export` に Workflow **2.11.4 以降**を使ってください。実際に `artisan` を実行する成果物の `composer.lock` を確認します。別途選択された構成は旧版を固定している場合があります。[通常インストールの writer 検証](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505)は、待機中/完了済み実行の compact/pretty 出力を、元の checksum を置き換えずに確認しています。これは writer と整合性の検証であり、候補 workflow コードの検証ではありません。 + +情報を失った旧 JSON は無効なままです。2.11.4 は再解釈や修復をしません。正本のストアと元の payload バイトが利用できる場合、修正済み producer で再エクスポートしてください。生成 bundle は変更せず、数値の変換や checksum/バージョンの書き換えで強制的に通さないでください。引き続き候補の replay と以下の昇格判定を実行します。 + アプリケーションが所有するストアからエクスポートします。`WORKFLOW_ID` と `RUN_ID` に、選択したインスタンスとランの正確な ID を設定します。 ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### サービス SDK {#service-sdk-replay} +Server イメージ、内蔵 CLI、`dw`/SDK の HTTP エクスポートは、実際の Server producer に依存します。Core 2.11.4 の公開だけでは成果物の更新や検証にはなりません。[Server #692 の独立したパッケージ固定・イメージ・インストール済み transport 検証](https://github.com/durable-workflow/server/issues/692)に従い、Core tag から HTTP 修正を推定しないでください。無効な bundle は引き続き拒否します。 + **PHP:** アプリケーションのコーデック、呼び出し可能オブジェクト、イベント一覧、元の入力、キュー、記録されたタスク ID を指定して `DurableWorkflow\Worker\Replayer::replay()` を使います。`NonDeterministicWorkflow` でテストを失敗させ、期待するコマンドと結果を検証してください。[PHP のリプレイテスト](https://php.durable-workflow.com/build/testing/)を参照してください。 **Python:** 登録した候補ワークフローに対して `Replayer.replay()` または `verify_replay()` を使い、期待する結果を検証します。オブジェクトが返るだけではテストの成功になりません。イベントに入力が含まれない場合は、デコードした元の `start_input` を渡してください。Core のエクスポートでは `payloads.arguments` に保存されます。記録された型、ID、コーデックを維持します。[Python のリプレイ API](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories)を参照してください。`--simulate-bundles` が確認するのは整合性であり、候補コードではありません。現行スキーマ 2 との互換性は [Python #173](https://github.com/durable-workflow/sdk-python/issues/173) で管理しています。拒否を回避するためにバージョンやチェックサムを書き換えないでください。 diff --git a/i18n/ja/source-hashes.json b/i18n/ja/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/ja/source-hashes.json +++ b/i18n/ja/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" } diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/testing.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/testing.md index e2483f0abd2..e31e6e87970 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ Guarde exportações de execuções selecionadas de workflows representativos ab ### PHP embarcado {#embedded-php-replay} +Use Workflow **2.11.4 ou posterior** em `workflow:v2:history-export` para preservar tipos de ponto flutuante com valor inteiro, valores aninhados e o sinal de zero, como `1.0` e `-0.0`, em novos bundles JSON. Confira `composer.lock` no artefato que realmente executa `artisan`; a combinação de instalação separada pode fixar uma versão anterior. A [aceitação do writer instalado normalmente](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505) cobre saída compact/pretty de execuções aguardando/concluídas sem substituir a checksum original. Isso qualifica o writer e a integridade, não o código candidato do workflow. + +O JSON antigo com perda continua inválido: 2.11.4 não o reinterpreta nem repara. Se o armazenamento autoritativo e os bytes originais do payload estiverem disponíveis, exporte novamente com o produtor corrigido. Mantenha o bundle gerado intacto; não converta números nem edite checksum/versão para forçar aceitação. Continue executando replay do candidato e o controle de promoção abaixo. + Exporte do armazenamento pertencente à aplicação. Defina `WORKFLOW_ID` e `RUN_ID` para a instância e a execução exatas selecionadas: ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### SDKs em modo serviço {#service-sdk-replay} +Imagens Server, seu CLI incluído e exportações HTTP de `dw`/SDK dependem do produtor Server real. A versão Core 2.11.4 sozinha não atualiza nem qualifica esses artefatos. Siga a [qualificação separada de pin do pacote, imagem e transportes instalados de Server #692](https://github.com/durable-workflow/server/issues/692); não deduza uma correção HTTP pelo tag Core. Bundles inválidos devem continuar recusados. + **PHP:** use `DurableWorkflow\Worker\Replayer::replay()` com o codec da aplicação, o callable, a lista de eventos, a entrada original, a fila e a identidade registrada da tarefa. Deixe `NonDeterministicWorkflow` reprovar o teste e confira os comandos e resultados esperados. Consulte os [testes de replay em PHP](https://php.durable-workflow.com/build/testing/). **Python:** use `Replayer.replay()` ou `verify_replay()` com os workflows candidatos registrados e confira o resultado esperado. Receber um objeto, por si só, não é uma asserção aprovada. Forneça o `start_input` original decodificado quando os eventos o omitirem: o Core o armazena em `payloads.arguments`. Preserve o tipo, os IDs e o codec registrados. Consulte as [APIs de replay em Python](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories). `--simulate-bundles` verifica integridade, não código candidato; a compatibilidade atual com o esquema 2 está em [Python #173](https://github.com/durable-workflow/sdk-python/issues/173). Não reescreva a versão nem o checksum para contornar uma recusa. diff --git a/i18n/pt-BR/source-hashes.json b/i18n/pt-BR/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/pt-BR/source-hashes.json +++ b/i18n/pt-BR/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" } diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/testing.md b/i18n/uk/docusaurus-plugin-content-docs/current/testing.md index 561ec27e1c6..c1c8ff20613 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ sidebar_position: 9 ### Вбудований PHP {#embedded-php-replay} +Для `workflow:v2:history-export` використовуйте Workflow **2.11.4 або новіший**, щоб у нових JSON-bundle зберігати типи float із цілим значенням, вкладені float та знак нуля, наприклад `1.0` і `-0.0`. Перевіряйте `composer.lock` в артефакті, який справді запускає `artisan`; окрема комбінація встановлення може фіксувати старішу версію. [Перевірка звичайно встановленого writer](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505) охоплює compact/pretty для запусків у стані очікування та завершених із незмінною початковою checksum. Це перевірка writer та цілісності, а не кандидатного коду workflow. + +Старий JSON із втраченими даними залишається невалідним: 2.11.4 не переінтерпретовує й не ремонтує його. Якщо доступні авторитетне сховище й початкові байти payload, повторно експортуйте виправленим producer. Не змінюйте створений bundle; не перетворюйте числа й не редагуйте checksum/версію для примусового прийняття. Як і раніше, запускайте replay кандидата та перевіряйте умови promotion нижче. + Експортуйте зі сховища, яким володіє застосунок. Установіть `WORKFLOW_ID` і `RUN_ID` для точно вибраних instance та run: ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### Service SDK {#service-sdk-replay} +Образи Server, їхній вбудований CLI та HTTP-експорти `dw`/SDK залежать від фактичного producer Server. Сам реліз Core 2.11.4 не оновлює й не кваліфікує ці артефакти. Дотримуйтеся окремої [перевірки package pin, образу та встановлених transport у Server #692](https://github.com/durable-workflow/server/issues/692); не робіть висновок про виправлений HTTP з тегу Core. Невалідні bundle й далі слід відхиляти. + **PHP:** використовуйте `DurableWorkflow\Worker\Replayer::replay()` із codec застосунку, callable, списком подій, оригінальними аргументами, чергою та записаною ідентичністю task. Нехай `NonDeterministicWorkflow` провалює тест; перевіряйте очікувані команди й результат. Див. [тестування replay у PHP](https://php.durable-workflow.com/build/testing/). **Python:** використовуйте `Replayer.replay()` або `verify_replay()` із зареєстрованими workflow-кандидатами та перевіряйте очікуваний результат. Сам факт повернення об’єкта не означає успішного тесту. Передавайте оригінальний декодований `start_input`, коли його немає в подіях: Core зберігає його в `payloads.arguments`. Збережіть записані тип, ID та codec. Див. [API replay у Python](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories). `--simulate-bundles` перевіряє цілісність, а не код кандидата; сумісність поточної схеми 2 відстежується в [Python #173](https://github.com/durable-workflow/sdk-python/issues/173). Не переписуйте версію чи checksum для обходу відмови. diff --git a/i18n/uk/source-hashes.json b/i18n/uk/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/uk/source-hashes.json +++ b/i18n/uk/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" } diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/testing.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/testing.md index c3743f19ecc..a54548c6818 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/testing.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/testing.md @@ -10,6 +10,10 @@ sidebar_position: 9 ### 嵌入式 PHP {#embedded-php-replay} +使用 Workflow **2.11.4 或更新版本**运行 `workflow:v2:history-export`,使新的 JSON bundle 保留整数值浮点数、嵌套浮点数及零的符号,例如 `1.0` 和 `-0.0`。请检查实际运行 `artisan` 的产物中的 `composer.lock`;独立选择的安装组合可能固定旧版本。[普通安装的 writer 验收](https://github.com/durable-workflow/workflow/issues/912#issuecomment-6364964505)覆盖等待中/已完成运行的 compact/pretty 输出,未替换原始 checksum。这验证 writer 和完整性检查,不验证你的候选工作流代码。 + +旧的有损 JSON 仍然无效:2.11.4 不会重新解释或修复它。如果权威存储及原始 payload 字节仍可用,请使用修复后的 producer 重新导出。保持生成的 bundle 原样;不要强制转换数字或修改 checksum/版本来强行通过。仍需执行候选代码 replay,并落实下面的发布门槛。 + 从应用拥有的存储导出。将 `WORKFLOW_ID` 和 `RUN_ID` 设为所选实例和运行的准确标识: ```bash @@ -44,6 +48,8 @@ exit($allowed ? 0 : 1); ### 服务模式 SDK {#service-sdk-replay} +Server 镜像、镜像内的 CLI 及 `dw`/SDK HTTP 导出依赖实际的 Server producer。单独发布 Core 2.11.4 不会升级或验证这些产物。请遵循 [Server #692 独立的包版本固定、镜像及安装后传输验收](https://github.com/durable-workflow/server/issues/692),不要从 Core tag 推断 HTTP 已修复。无效 bundle 仍须拒绝。 + **PHP:** 使用 `DurableWorkflow\Worker\Replayer::replay()`,提供应用的编解码器、可调用对象、事件列表、原始输入、队列和记录的任务标识。让 `NonDeterministicWorkflow` 使测试失败,并断言预期命令和结果。请参阅 [PHP 重放测试](https://php.durable-workflow.com/build/testing/)。 **Python:** 对已注册的候选工作流使用 `Replayer.replay()` 或 `verify_replay()`,并断言预期结果。仅返回一个对象不代表断言通过。若事件中省略了输入,应提供原始解码后的 `start_input`:Core 导出将其存储在 `payloads.arguments` 中。保留记录的类型、ID 和编解码器。请参阅 [Python 重放 API](https://python.durable-workflow.com/sdk-reference/#replay-captured-histories)。`--simulate-bundles` 检查完整性,而不执行候选代码;当前与 schema 2 的兼容性由 [Python #173](https://github.com/durable-workflow/sdk-python/issues/173) 跟踪。不要通过改写版本或校验和来绕过拒绝。 diff --git a/i18n/zh-Hans/source-hashes.json b/i18n/zh-Hans/source-hashes.json index bfa6df3954b..19f0a3f0330 100644 --- a/i18n/zh-Hans/source-hashes.json +++ b/i18n/zh-Hans/source-hashes.json @@ -102,6 +102,6 @@ "sdk-neutrality.md": "7b0714c123ade4904591870fc20e9a797da1e5485b2a6c87ca3eaa00c5de6ed6", "sponsors.md": "e85e14375743ca8fa50e3a48f894b160e28272573aa88480064f74010ebee98a", "support.md": "706807b3902599dda6080f632ec1f893017ea18bbe9585f533dcdbd6d85f4621", - "testing.md": "c26048b42e1589d9e8db4a7b48ac8862808d25ca74fb389c41bac73456a87ecc", + "testing.md": "b80db83e74647e9559c1f0db442dcfe7c0e636d8c9842583c69f9ae46d68633d", "waterline-operator-api.md": "2aca03b2c14100060b40be0bb033a82525ba924908834e9060ec746ead26f36d" }