diff --git a/CHANGELOG.md b/CHANGELOG.md index d961775..cce5c66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -## [2.10.0] - Unreleased +## [2.10.0] - 2026-10-23 ### Added diff --git a/docs/reference/client.md b/docs/reference/client.md index 2fe1c77..42f9dff 100644 --- a/docs/reference/client.md +++ b/docs/reference/client.md @@ -2,8 +2,7 @@ ## Trust a private certificate authority -The `tls_context` option is available in unreleased SDK source and will be -included in the next package release. +The `tls_context` option requires Python SDK 2.10.0 or later. Pass a verifying `ssl.SSLContext` to configure trust for this client without changing trust for other clients in the process. Start with certifi's public diff --git a/docs/reference/metrics.md b/docs/reference/metrics.md index 3f03914..54f9faa 100644 --- a/docs/reference/metrics.md +++ b/docs/reference/metrics.md @@ -2,9 +2,8 @@ ## Recorder contract -The expanded route normalization described here is available in unreleased -SDK source. Published packages retain their existing route labels until the -next package release. +The expanded route normalization described here requires Python SDK 2.10.0 +or later. Client request, worker poll and task dispatch observations follow the [shared SDK metrics contract](https://github.com/durable-workflow/.github/tree/main/sdk-metrics). @@ -43,9 +42,9 @@ failures without throwing into the client or worker. ## Request outcomes and errors -**Unreleased:** named poll warnings and the local cancellation outcome below -await package publication. Until then, a locally cancelled request may still -be recorded as `pending`. +Named poll warnings and the local cancellation outcome below require Python +SDK 2.10.0 or later. Earlier packages may record a locally cancelled request +as `pending`. The client counter and duration share one terminal `outcome` per logical request, including its transport retries: diff --git a/docs/reference/testing.md b/docs/reference/testing.md index 86b3a33..163ed92 100644 --- a/docs/reference/testing.md +++ b/docs/reference/testing.md @@ -2,9 +2,9 @@ ## Test failures, retries and compensation -This behavior is available in unreleased SDK source and awaits package -publication. Published Python SDK 2.9.0 still lets activity mock exceptions -escape and does not provide callable child mocks or these retry observations. +This failure/retry behavior and callable child mocks require Python SDK +2.10.0 or later. Earlier packages let activity mock exceptions escape and do +not provide these child callables or retry observations. Synchronous mock exceptions become terminal history events. The production replayer then raises `ActivityFailed` or `ChildWorkflowFailed` at the authored @@ -88,8 +88,7 @@ backend recovery; qualify those behaviors with a real Server and workers. ## Mock a Nexus service operation -This API is available in unreleased SDK source. Published packages gain these -registration methods with the next SDK release. +These Nexus mock registration methods require Python SDK 2.10.0 or later. Register a result or a synchronous callable by endpoint, service and operation name. The mock runs once for each authored call, even when later workflow tasks diff --git a/docs/reference/worker.md b/docs/reference/worker.md index d9d8eb4..32b7a5f 100644 --- a/docs/reference/worker.md +++ b/docs/reference/worker.md @@ -31,8 +31,8 @@ execution; selecting a default thread does not enable that protocol. ## Poll failures and recovery -This backoff is available in unreleased SDK source. Until the next package -release, published workers retain their fixed one-second poll-error wait. +This backoff requires Python SDK 2.10.0 or later. Earlier packages use a fixed +one-second poll-error wait. Workflow, activity and query pollers back off independently after failed polls, including HTTP errors, rejected credentials and unreachable runtimes. The @@ -48,8 +48,8 @@ credentials and their permissions. Once requests succeed again, polling recovers without a worker restart. Poll-error metrics still count every failed poll, including failures whose warning is suppressed. -**Unreleased diagnostics:** warnings name the exception class and static poll -route even when an httpx exception has an empty message. Transport exception +Starting with Python SDK 2.10.0, warnings name the exception class and static +poll route even when an httpx exception has an empty message. Transport exception messages are omitted because they can contain private request details. Server refusals retain their status and bounded reason; authentication failures retain their credential-safe summary. See [request outcomes and errors](metrics.md#request-outcomes-and-errors) diff --git a/docs/sdk-reference.md b/docs/sdk-reference.md index 251cd75..bef59c4 100644 --- a/docs/sdk-reference.md +++ b/docs/sdk-reference.md @@ -685,12 +685,11 @@ bundle simulation does not execute workflow code in Python, a clean integrity-only simulation recommends `review_before_promote` rather than `safe_to_promote`. -**Unreleased:** schema-2 history-bundle verification is implemented in source -and is awaiting package publication. The published Python SDK 2.9.0 still -refuses these exports; changing a bundle's version or checksum does not make -it compatible. +Schema-2 history-bundle verification requires Python SDK 2.10.0 or later. +Earlier packages refuse these exports; upgrade the SDK while preserving the +original bundle's version, checksum and bytes. -The source verifier supports history-export structural versions 1 and 2. +The verifier supports history-export structural versions 1 and 2. Schema 2 retains the lossless Avro memo map in `workflow.memo_payload` and its JSON-safe display projection in `workflow.memo`. Both are checked, except for fields explicitly listed in the export's redaction paths. Unknown or malformed @@ -992,18 +991,17 @@ still fails before transport for actual worker or control operations; use ## TLS trust -Unreleased SDK source accepts `tls_context=ssl_context` on async and synchronous -clients. Use a verifying `ssl.SSLContext` initialized with certifi's public +Starting with Python SDK 2.10.0, async and synchronous clients accept +`tls_context=ssl_context`. Use a verifying `ssl.SSLContext` initialized with certifi's public roots, then load your private CA. Worker query clones and runtime-owned payload transfers reuse that trust configuration. See the [private CA recipe](reference/client.md#trust-a-private-certificate-authority) -for root selection and `SSL_CERT_FILE` / `SSL_CERT_DIR` behavior. Published -packages gain this option with the next SDK release. +for root selection and `SSL_CERT_FILE` / `SSL_CERT_DIR` behavior. ## Poll failures -The backoff described here is available in unreleased SDK source. Published -workers retain their fixed one-second poll-error wait until the next release. +The backoff described here requires Python SDK 2.10.0 or later. Earlier +packages use a fixed one-second poll-error wait. Workflow, activity and query pollers use independent exponential backoff after HTTP, authentication or transport failures. The retry ceiling doubles from 1 @@ -1050,14 +1048,14 @@ Custom recorders implement `increment(name, value=1.0, tags=None)` and `record(n The [metrics reference](reference/metrics.md#recorder-contract) explains the shared names, count/second units, recorder inheritance and exporter conventions. -In unreleased source, client routes use reviewed templates without variable IDs or query strings; +From Python SDK 2.10.0, client routes use reviewed templates without variable IDs or query strings; unknown operations use `unknown`. Keep configured worker queue names and any exporter resource labels bounded. The [request outcome reference](reference/metrics.md#request-outcomes-and-errors) distinguishes HTTP refusals, httpx transport failures and local Python -cancellation. Unreleased diagnostics name exception classes and static poll -routes; local cancellation records `CancelledError` and still propagates +cancellation. From Python SDK 2.10.0, diagnostics name exception classes and +static poll routes; local cancellation records `CancelledError` and still propagates immediately. These diagnostic changes are separate from durable cancellation and preserve the existing transport retry policy. @@ -1180,8 +1178,7 @@ else: ## Test workflows that call Nexus services -The Nexus mock registration API below is available in unreleased SDK source -and will be included in the next package release. +The Nexus mock registration API below requires Python SDK 2.10.0 or later. `WorkflowEnvironment` can mock service operations by endpoint, service and operation name. Use `register_nexus_operation_result()` for a fixed response or