Skip to content

1.29.0

Choose a tag to compare

@github-actions github-actions released this 17 Jun 21:23
4b4e34e

Notable Changes

Added

  • Added experimental temporalio.workflow.signal_with_start_workflow, backed by
    generated system Nexus bindings for
    WorkflowService.SignalWithStartWorkflowExecution.
  • Added OpenAI Agents plugin support for CustomTool dispatch, including lazy
    tool discovery through defer_loading.

Breaking Changes

  • Client connections now use gzip transport-level gRPC compression by default.
    Pass grpc_compression=GrpcCompression.NONE to Client.connect or
    CloudOperationsClient.connect to disable it. This can cause issues in some proxy scenarios
    if the proxy does not implement gRPC compression. Upgrade to version 1.30.0 if affected,
    in which compression downgrading is supported.

  • StartWorkflowUpdateWithStartInput now owns the authoritative
    rpc_metadata and rpc_timeout fields for
    OutboundInterceptor.start_update_with_start_workflow. These fields were
    removed from the nested update-with-start input objects, so custom
    interceptors that accessed them there should read or update the top-level
    fields instead.

Fixed

  • Fixed breakpoint() and pdb.set_trace() inside workflow code when a worker
    runs with debug_mode=True or TEMPORAL_DEBUG=1; sandboxed workflows without
    debug mode now get a clearer error pointing to debug_mode=True.

  • Fixed start_update_with_start_workflow interceptor handling so RPC metadata
    and timeouts are forwarded to the underlying execute_multi_operation call.

  • Fixed OpenAI Agents plugin streamed event serialization when pydantic had not
    yet built deferred schemas, and fixed terminal sandbox errors retrying
    forever.

  • Removed the lazy-connect lock from the per-RPC hot path. It was previously
    acquired on every RPC, putting an event-loop-bound primitive on the hot path;
    it is now skipped once the client is connected. This reduces the client's
    coupling to the event loop it connected on, which can help when reusing a
    single long-lived Client across event loops or threads (e.g. the
    dedicated-loop pattern used with gevent/gunicorn and synchronous services).
    Note this does not make a Client fully thread- or loop-agnostic; reusing one
    long-lived loop is still the recommended pattern.

    SDK Core

What's Changed

New Contributors

Full Changelog: 1.28.0...1.29.0