diff --git a/CHANGELOG.md b/CHANGELOG.md index e9a26a8c..580155bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,11 +19,34 @@ to docs, or any other relevant information. ## [Unreleased] +## [v1.6.0] - 2026-07-16 + ### Added - Exposed `Temporalio::Workflow::ContinueAsNewError#backoff_start_interval`, to allow the new workflow to start after a delay. - Added the experimental `Temporalio::Worker` `patch_activation_callback:` option, allowing workers to decide whether a first non-replay `Temporalio::Workflow.patched` call should activate a patch during rolling deployments. +#### Experimental FIPS builds + +The native extension can now be built with `TEMPORALIO_FIPS=1` to use the FIPS-mode +`aws-lc-rs` TLS backend for gRPC and OTLP metrics. This is opt-in, source-build only. +FIPS builds use SHA-256 rather than MD5 for the default worker build ID and warn when +the Ruby OpenSSL runtime is not itself in FIPS mode. + +#### Experimental RBS and RBI signatures are included in the gem + +Released gems now contain the SDK's maintained RBS signatures in `sig/` and Sorbet RBI +signatures in `rbi/`, including generated types for Temporal API messages and services. +These type signatures are subject to change in future releases as we move towards a stronger typing story. + +### Changed + +#### gRPC transport compression defaults to gzip + +Client connections now use gzip transport compression by default. Pass +`grpc_compression: Temporalio::Client::Connection::GrpcCompressionOptions::None.new` to +`Client.connect` or `Client::Connection.new` to opt out. + ### Fixed #### `Workflow.suggest_continue_as_new_reasons` returns workflow enum values @@ -32,10 +55,37 @@ Workflow activations containing continue-as-new suggestion reasons previously fa worker tried to call `to_i` on bridge enum symbols. Continue-as-new suggestion reasons are now converted from bridge enum symbols to `Temporalio::SuggestContinueAsNewReason` integer enum values before being exposed to workflows. -### Removed shutdown race in `replay_workflow` +#### Deadlock errors from workflow futures fail the current workflow task + +A workflow deadlock raised inside `Temporalio::Workflow::Future` is no longer deferred until the +future is awaited. The worker fails the current workflow task immediately, preventing commands +created before the deadlock from being recorded as a successful partial command batch. + +#### Scheduler waits for the Protobuf object-cache mutex + +The workflow scheduler no longer yields while a workflow fiber is blocked on the +`google-protobuf` object-cache mutex. This prevents a workflow task from completing with only part +of a command batch when Protobuf serialization blocks. + +#### `replay_workflow` shutdown after nondeterminism Fixed a race in `replay_workflow` where if a NDE was hit, worker shutdown could panic if it happens before async activation completion completes. +#### Core updates + +- Retried transport-originated gRPC `CANCELLED` errors, such as a connection closure or GOAWAY, + using the normal RPC retry policy while continuing not to retry application-initiated + cancellations. +- Resource sampling interval for worker heartbeating now matches heartbeat interval rather than every 100ms +- Activities with a heartbeat timeout shorter than their start-to-close timeout now still enforce + the start-to-close timeout while heartbeats succeed. +- Local activity completion after workflow eviction no longer risks a Core panic or dispatching a + stale local activity. +- Corrected the `worker_task_slots_used` gauge so it does not count a slot that is currently being + released. +- OTLP metric export failures are now emitted through Core telemetry, making them visible through + the SDK logger. + ## [v1.5.0] - 2026-06-11 ### Breaking Changes diff --git a/temporalio/Gemfile.lock b/temporalio/Gemfile.lock index defe1b88..d6c2a63b 100644 --- a/temporalio/Gemfile.lock +++ b/temporalio/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - temporalio (1.5.0) + temporalio (1.6.0) google-protobuf (>= 3.25.0) logger @@ -284,7 +284,7 @@ CHECKSUMS steep (1.10.0) sha256=1b295b55f9aaff1b8d3ee42453ee55bc2a1078fda0268f288edb2dc014f4d7d1 stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e - temporalio (1.5.0) + temporalio (1.6.0) terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 timeout (0.6.1) sha256=78f57368a7e7bbadec56971f78a3f5ecbcfb59b7fcbb0a3ed6ddc08a5094accb traces (0.18.2) sha256=80f1649cb4daace1d7174b81f3b3b7427af0b93047759ba349960cb8f315e214 diff --git a/temporalio/lib/temporalio/version.rb b/temporalio/lib/temporalio/version.rb index 21b41148..fb5201bf 100644 --- a/temporalio/lib/temporalio/version.rb +++ b/temporalio/lib/temporalio/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Temporalio - VERSION = '1.5.0' + VERSION = '1.6.0' end