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
16 changes: 15 additions & 1 deletion docs/polyglot/php.md
Original file line number Diff line number Diff line change
Expand Up @@ -285,9 +285,23 @@ service-mode bridge, including drain and rollback. Use
[Deployment Modes](/docs/polyglot/deployment-modes/) for the wider runtime
boundary comparison.

## Query results with binary values {#query-binary-results}

PHP SDK 3.18.2 fixes query completion for valid Avro results containing nested
`AvroBinaryValue` bytes. The `result_envelope` remains authoritative. The SDK
omits only the optional plain `result` projection when it cannot be JSON
encoded; ordinary JSON-compatible results keep that projection.

[Published PHP 3.18.2 / native Server 3.9.1 installed controls](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312)
(PHP 8.3.36, linux/amd64, SQLite) verify an actual Worker round-trip for nested
binary bytes, ordinary JSON, signed zero and `null`, plus workflow completion
and graceful Worker deregistration. This is a compatible query fix; it does
not add a capability or establish full request-key or timeout-cleanup support.
See the [PHP query guide](https://php.durable-workflow.com/build/messages/#register-a-read-only-query).

## Read an accepted update later {#read-an-update-outcome}

The selected PHP SDK 3.18.1 supports reading a retained update by its stable ID
The selected PHP SDK %%artifact.publishedPhpSdkVersion%% supports reading a retained update by its stable ID
without admitting it again. `Client::updateOutcome($workflowId, $updateId)`
defaults to `waitFor: 'completed'`: pending work throws `UpdateStillPending`;
a completed result may legitimately be `null`. `updateOutcomeReceipt()` defaults
Expand Down
12 changes: 11 additions & 1 deletion docs/polyglot/python.md
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,17 @@ end-to-end rollout walkthrough; the CLI mirrors of these methods are
`signal_workflow` returns the admission receipt, including its `request_id`.
`query_workflow` and `WorkflowHandle.query` return a query receipt; read
`receipt["result"]` for the decoded handler value, including when the handler successfully
returns `None`. See the [Python client guide](https://python.durable-workflow.com/reference/client/).
returns `None`. See the [Python query receipt guide](https://python.durable-workflow.com/reference/client/#read-a-query-result).

Python SDK 2.17.2 fixes valid Avro query results containing bytes. The
`result_envelope` stays authoritative; only an optional plain JSON projection
that cannot be encoded is omitted. [Published 2.17.2 / native Server 3.9.1
installed controls](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320)
(linux/amd64, SQLite) verify nested-byte and `None` query receipts, cold Worker
replacement and pending-to-completed-null update reads. Query return shapes
remain as described above. This patch does not advertise timeout-cleanup or
parallel-policy capabilities. The earlier 2.17.1 completion-size evidence keeps
its exact version and experiment scope.

`update_workflow` defaults to `wait_for="accepted"`. Its receipt can have
`update_status="accepted"` and `result=None`. With `wait_for="completed"`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,9 +292,15 @@ ausgelieferten Service-Modus-Brücke, einschließlich Auslaufen und Rollback.
[Bereitstellungsmodi](/docs/polyglot/deployment-modes/) vergleicht die
Laufzeitgrenzen umfassender.

## Query-Ergebnisse mit Binärwerten {#query-binary-results}

PHP SDK 3.18.2 korrigiert Query-Completions für gültige Avro-Ergebnisse mit verschachtelten `AvroBinaryValue`-Bytes. `result_envelope` bleibt maßgeblich. Das SDK lässt nur die optionale einfache `result`-Projektion weg, wenn sie nicht JSON-kodiert werden kann; gewöhnliche JSON-kompatible Ergebnisse behalten diese Projektion.

[Kontrollen mit veröffentlichtem, installiertem PHP 3.18.2 / nativem Server 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) prüfen einen tatsächlichen Worker-Roundtrip für verschachtelte Binärbytes, gewöhnliches JSON, vorzeichenbehaftete Null und `null` sowie Workflow-Abschluss und geordnete Worker-Abmeldung. Dies ist eine kompatible Query-Korrektur; sie fügt keine Capability hinzu und belegt weder vollständige Request-Key- noch Timeout-Cleanup-Unterstützung. Siehe den [PHP-Query-Leitfaden](https://php.durable-workflow.com/build/messages/#register-a-read-only-query).

## Ein akzeptiertes Update später lesen {#read-an-update-outcome}

Das ausgewählte PHP SDK 3.18.1 liest ein aufbewahrtes Update anhand seiner stabilen ID, ohne es erneut anzunehmen. `Client::updateOutcome($workflowId, $updateId)` verwendet standardmäßig `waitFor: 'completed'`: Ausstehende Arbeit löst `UpdateStillPending` aus; ein abgeschlossenes Ergebnis darf `null` sein. `updateOutcomeReceipt()` verwendet standardmäßig `waitFor: 'accepted'` und liefert den Server-Beleg, sodass `update_status` und `wait_timed_out` getrennt vom abgeschlossenen Ergebnis geprüft werden können.
Das ausgewählte PHP SDK %%artifact.publishedPhpSdkVersion%% liest ein aufbewahrtes Update anhand seiner stabilen ID, ohne es erneut anzunehmen. `Client::updateOutcome($workflowId, $updateId)` verwendet standardmäßig `waitFor: 'completed'`: Ausstehende Arbeit löst `UpdateStillPending` aus; ein abgeschlossenes Ergebnis darf `null` sein. `updateOutcomeReceipt()` verwendet standardmäßig `waitFor: 'accepted'` und liefert den Server-Beleg, sodass `update_status` und `wait_timed_out` getrennt vom abgeschlossenen Ergebnis geprüft werden können.

Diese GET-Lesezugriffe benötigen die Capability `update_outcome_reads` (nativer Server ab 3.6.0). Ohne sie wirft das SDK `LogicException` und sendet das Update nicht erneut. Eine ausstehende erste `updateWorkflow()`-Annahme behält die Request-ID des Aufrufers. Ein ausstehender GET-Lesezugriff behält `updateId`, aber der ursprüngliche Request-Key kann fehlen: `$pending->requestId` ist dann `''`, also unbekannt. Lesen Sie mit dieser Update-ID weiter; senden Sie niemals einen leeren, abgeleiteten oder internen gehashten Schlüssel als ursprüngliche Request-ID.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,9 @@ Die entsprechenden CLI-Befehle sind `dw task-queue:build-ids`,
| `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, Authentifizierungs-/Serverfehler |
| `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | decodierte Workflow-Ausgabe | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` |

`signal_workflow` liefert die Annahmequittung einschließlich `request_id`. `query_workflow` und `WorkflowHandle.query` liefern eine Query-Quittung; lesen Sie `receipt["result"]` für den dekodierten Handlerwert, auch wenn der Handler erfolgreich `None` zurückgibt. Siehe den [Python-Client-Leitfaden](https://python.durable-workflow.com/reference/client/).
`signal_workflow` liefert die Annahmequittung einschließlich `request_id`. `query_workflow` und `WorkflowHandle.query` liefern eine Query-Quittung; lesen Sie `receipt["result"]` für den dekodierten Handlerwert, auch wenn der Handler erfolgreich `None` zurückgibt. Siehe den [Python-Client-Leitfaden](https://python.durable-workflow.com/reference/client/#read-a-query-result).

Python SDK 2.17.2 korrigiert gültige Avro-Query-Ergebnisse mit Bytes. `result_envelope` bleibt maßgeblich; nur eine optionale einfache JSON-Projektion, die nicht kodiert werden kann, entfällt. [Kontrollen mit veröffentlichtem, installiertem 2.17.2 / nativem Server 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) prüfen Query-Belege mit verschachtelten Bytes und `None`, kalten Worker-Ersatz und Update-Lesezugriffe von ausstehend bis abgeschlossenem null. Die Query-Rückgabeform bleibt wie oben beschrieben. Dieser Patch bewirbt keine Timeout-Cleanup- oder Parallel-Policy-Capabilities. Der frühere Completion-Größennachweis für 2.17.1 behält seinen genauen Versions- und Versuchsumfang.

`update_workflow` verwendet standardmäßig `wait_for="accepted"`. Die
Bestätigung kann `update_status="accepted"` und `result=None` enthalten. Bei
Expand Down
4 changes: 2 additions & 2 deletions i18n/de/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@
"polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01",
"polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13",
"polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb",
"polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a",
"polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213",
"polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989",
"polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959",
"polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c",
"polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54",
"polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f",
"polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71",
"polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3",
"polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,9 +290,15 @@ mismo caso representativo en v1, v2 integrado y este puente de modo servicio,
incluidos drenaje y reversión. Utiliza [Modos de despliegue](/docs/polyglot/deployment-modes/)
para una comparación más amplia de límites del runtime.

## Resultados de consulta con valores binarios {#query-binary-results}

PHP SDK 3.18.2 corrige la finalización de consultas para resultados Avro válidos con bytes `AvroBinaryValue` anidados. `result_envelope` sigue siendo la representación autoritativa. El SDK omite únicamente la proyección simple opcional `result` cuando no se puede codificar en JSON; los resultados habituales compatibles con JSON conservan esa proyección.

Los [controles instalados de PHP 3.18.2 publicado / Server nativo 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) verifican un recorrido real del Worker con bytes binarios anidados, JSON habitual, cero con signo y `null`, además de completar el workflow y dar de baja el Worker de forma ordenada. Es una corrección compatible de consultas; no añade una capacidad ni establece soporte completo de claves de solicitud o limpieza por timeout. Consulte la [guía PHP de consultas](https://php.durable-workflow.com/build/messages/#register-a-read-only-query).

## Leer una actualización aceptada más tarde {#read-an-update-outcome}

El PHP SDK 3.18.1 seleccionado permite leer una actualización retenida por su ID estable sin admitirla de nuevo. `Client::updateOutcome($workflowId, $updateId)` usa por defecto `waitFor: 'completed'`: el trabajo pendiente lanza `UpdateStillPending`; un resultado completado puede ser legítimamente `null`. `updateOutcomeReceipt()` usa por defecto `waitFor: 'accepted'` y devuelve el recibo del Server para inspeccionar `update_status` y `wait_timed_out` por separado del resultado completado.
El PHP SDK %%artifact.publishedPhpSdkVersion%% seleccionado permite leer una actualización retenida por su ID estable sin admitirla de nuevo. `Client::updateOutcome($workflowId, $updateId)` usa por defecto `waitFor: 'completed'`: el trabajo pendiente lanza `UpdateStillPending`; un resultado completado puede ser legítimamente `null`. `updateOutcomeReceipt()` usa por defecto `waitFor: 'accepted'` y devuelve el recibo del Server para inspeccionar `update_status` y `wait_timed_out` por separado del resultado completado.

Estas lecturas GET requieren la capacidad `update_outcome_reads` (Server nativo 3.6.0 y posteriores). Sin ella, el SDK lanza `LogicException` y no reenvía la actualización. Una excepción pendiente del `updateWorkflow()` inicial conserva el ID de solicitud del llamador. Una lectura GET pendiente conserva `updateId`, pero la clave de solicitud original puede faltar: `$pending->requestId` es entonces `''`, que significa desconocida. Siga leyendo con ese ID de actualización; nunca envíe una clave vacía, inferida o con hash interno como ID de solicitud original.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,9 @@ Los equivalentes CLI son `dw task-queue:build-ids`, `dw task-queue:drain` y
| `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, errores de autenticación/servidor |
| `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | salida de workflow decodificada | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` |

`signal_workflow` devuelve el recibo de admisión, incluido `request_id`. `query_workflow` y `WorkflowHandle.query` devuelven un recibo de consulta; lea `receipt["result"]` para el valor decodificado del handler, incluso cuando devuelve `None` correctamente. Véase la [guía del cliente Python](https://python.durable-workflow.com/reference/client/).
`signal_workflow` devuelve el recibo de admisión, incluido `request_id`. `query_workflow` y `WorkflowHandle.query` devuelven un recibo de consulta; lea `receipt["result"]` para el valor decodificado del handler, incluso cuando devuelve `None` correctamente. Véase la [guía del cliente Python](https://python.durable-workflow.com/reference/client/#read-a-query-result).

Python SDK 2.17.2 corrige resultados Avro válidos de consultas que contienen bytes. `result_envelope` sigue siendo la representación autoritativa; solo se omite una proyección JSON simple opcional que no se pueda codificar. Los [controles instalados de 2.17.2 publicado / Server nativo 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) verifican recibos de consulta con bytes anidados y `None`, reemplazo en frío del Worker y lecturas de actualizaciones desde pendientes hasta completadas con null. Las formas de retorno de las consultas siguen siendo las descritas arriba. Este parche no anuncia capacidades de limpieza por timeout ni políticas de paralelismo. La evidencia anterior del tamaño de finalización de 2.17.1 conserva su alcance exacto de versión y experimento.

`update_workflow` usa `wait_for="accepted"` de forma predeterminada. Su recibo
puede contener `update_status="accepted"` y `result=None`. Con
Expand Down
4 changes: 2 additions & 2 deletions i18n/es/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@
"polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01",
"polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13",
"polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb",
"polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a",
"polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213",
"polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989",
"polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959",
"polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c",
"polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54",
"polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f",
"polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71",
"polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3",
"polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,15 @@ mode service livré, y compris le drainage et le retour arrière.
Les [modes de déploiement](/docs/polyglot/deployment-modes/) comparent plus
largement les frontières du runtime.

## Résultats de requête avec des valeurs binaires {#query-binary-results}

Le PHP SDK 3.18.2 corrige la finalisation des requêtes pour des résultats Avro valides contenant des octets `AvroBinaryValue` imbriqués. `result_envelope` reste la représentation de référence. Le SDK omet uniquement la projection simple facultative `result` lorsqu’elle ne peut pas être encodée en JSON ; les résultats ordinaires compatibles JSON conservent cette projection.

Les [contrôles sur installation du PHP 3.18.2 publié / Server natif 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) vérifient un aller-retour réel du Worker pour des octets binaires imbriqués, du JSON ordinaire, un zéro signé et `null`, ainsi que la fin du workflow et la désinscription propre du Worker. C’est une correction compatible des requêtes ; elle n’ajoute aucune capacité et n’établit pas la prise en charge complète des clés de requête ou du nettoyage après timeout. Voir le [guide PHP des requêtes](https://php.durable-workflow.com/build/messages/#register-a-read-only-query).

## Lire plus tard une mise à jour acceptée {#read-an-update-outcome}

Le PHP SDK 3.18.1 sélectionné permet de lire une mise à jour conservée par son ID stable sans l’admettre à nouveau. `Client::updateOutcome($workflowId, $updateId)` utilise par défaut `waitFor: 'completed'` : un travail en attente lève `UpdateStillPending` ; un résultat terminé peut légitimement être `null`. `updateOutcomeReceipt()` utilise par défaut `waitFor: 'accepted'` et renvoie le reçu du Server pour examiner `update_status` et `wait_timed_out` séparément du résultat terminé.
Le PHP SDK %%artifact.publishedPhpSdkVersion%% sélectionné permet de lire une mise à jour conservée par son ID stable sans l’admettre à nouveau. `Client::updateOutcome($workflowId, $updateId)` utilise par défaut `waitFor: 'completed'` : un travail en attente lève `UpdateStillPending` ; un résultat terminé peut légitimement être `null`. `updateOutcomeReceipt()` utilise par défaut `waitFor: 'accepted'` et renvoie le reçu du Server pour examiner `update_status` et `wait_timed_out` séparément du résultat terminé.

Ces lectures GET exigent la capacité `update_outcome_reads` (Server natif 3.6.0 et suivants). Sans elle, le SDK lève `LogicException` et ne renvoie pas la mise à jour. Une exception d’attente du premier `updateWorkflow()` conserve l’ID de requête de l’appelant. Une lecture GET en attente conserve `updateId`, mais la clé d’origine peut manquer : `$pending->requestId` vaut alors `''`, soit inconnue. Continuez la lecture avec cet ID de mise à jour ; ne soumettez jamais de clé vide, déduite ou hachée interne comme ID de requête d’origine.

Expand Down
Loading
Loading