Notable Changes
Added
-
Added
WorkflowAlreadyStartedError.first_run_idfor the first execution run
ID when provided by the server. -
Experimental:
temporalio.contrib.google_adk_agentsnow supports ADK v2
graph workflows, dynamic@nodeworkflows, and durable HITL. -
Experimental: Experimental support for Event Groups. Event Groups is a new form of
Workflow-level metadata that allows for improved visibility into a Workflow execution's history
by grouping logically related Events together based on user-defined or system-inferred criteria.
workflow.create_event_group(...)takes the Event Group's ID as its first and only required
argument; the user-provided ID is used verbatim and should not contain sensitive information.
The label is optional and passed as a keyword argument; it is a codec-encoded Payload. -
Added
workflow.Info.original_execution_run_id, the run ID recorded on the workflow
execution started event. Unlikerun_id, this value is preserved across workflow resets. -
Experimental:
temporalio.contrib.strandsnow supports durable,
Workflow-isolated Strands sandboxes throughTemporalSandboxand
worker-side factories registered withStrandsPlugin(sandboxes=...). -
Added the
temporalio.contrib.gcp.cloud_run.idmodule with theCloudRunIdPluginclient plugin to set the worker identity on Cloud Run.
Changed
- The
deepagentsextra now requiresdeepagents>=0.7,<0.8(was<0.7). Because
deepagents 0.7 requireslangsmith>=0.10.9, thelangsmithextra now allows
langsmith<0.13(was<0.9).
💥 Breaking Changes
- The
google-adkextra now requiresgoogle-adk>=2.8.0,<3, up from>=2.2.0. temporalio.contrib.google_adk_agents: ADK-generated ids and retry jitter now draw from the
workflow's deterministic random stream. A workflow started under an earlier release that calls
workflow.random()orworkflow.uuid4()after ADK code may not replay deterministically
across the upgrade; drain such workflows or use worker versioning.
Fixed
-
temporalio.contrib.deepagentsnow preserves model binding options such as
response_formatandtool_choicewhen tools are also bound. -
Workflow handles returned when a start attaches to a running workflow now use
the server-provided first execution run ID with Temporal Server 1.32.0 or
later. -
Restore
frozensetvalues when decoding JSON payloads with afrozensettype hint,
including nested frozen sets. -
Ordinary absolute imports of already-loaded modules in sandboxed workflows no longer go through
importlib's module locks, fixing intermittentFailed validating workflowerrors on Python 3.10
caused by aKeyErrorinimportlib._bootstrap._ModuleLock.acquirewhen a garbage-collection
finalizer importedwarningsduring a workflow load
(#585). -
temporalio.contrib.deepagents.TemporalBackendis fixed for deepagents 0.7 compatibility
(e.g., addingdelete/adelete). -
temporalio.contrib.deepagents.TemporalBackendnow forwards the per-commandtimeoutof
deepagents'executetool for a wrapped sandbox backend such asLocalShellBackend. -
GoogleAdkPluginnow passes the optionalanthropic,litellm, andopenaiSDKs through
the workflow sandbox. -
GoogleAdkPluginnow passes OpenTelemetry modules through the workflow sandbox so ADK 2.9
graph workflows can load their context support during execution. -
contrib.deepagents: prevent duplicate input messages after continue-as-new. -
DataConverter.payload_converterand current workflow and activity payload converter accessors
now return the configured converter without SDK-internal transfer type conversion. -
Restore pickling of Pydantic data converters, preserving the type adapter cache
size limit while excluding cached adapters. -
Current workflow and activity payload converter accessors now return the configured converter
without SDK-internal transfer type conversion. -
A Nexus operation's user metadata is now serialized with
NexusSerializationContext, the same way
workflow and activity user metadata are serialized with theirs. This covers the static summary
sent when starting an operation, and the summary and details read back from a description.
SDK Core
info: syncing channel updates for 1.94-x86_64-unknown-linux-gnu
info: latest update on 2026-03-26 for version 1.94.1 (e408947bf 2026-03-25)
info: downloading 5 components
warn: the missing active toolchain 1.94-x86_64-unknown-linux-gnu has been auto-installed
warn: this might cause rustup commands to take longer time to finish than expected
info: you may opt out with RUSTUP_AUTO_INSTALL=0 or rustup set auto-install disable
Changelog
Added
- External workflow signal and cancellation resolution activations now include the typed server
failure cause alongside the existing failure.
Fixed
- Task-poll targets no longer decrease after cancelled or timed-out polls. Affected pollers still
retain their slot during backoff, while resource-exhaustion errors still reduce the target. - Replay now preserves which local activity results were delivered together for newly recorded
histories. This prevents local activity scheduling which was conditional on local activity
resolution order from assigning recorded results to different handles. Older markers keep their
existing behavior. - Workflow poll balancing now lets non-sticky pollers use capacity after sticky pollers reach their
configured or autoscaled polling limit. - Every path that fails a workflow task now only reports the failure to server
on the task's first attempt, and later attempts are left to time out. PreviouslyPayloadsTooLarge
failures and history fetch failures were re-reported on every attempt. - The
workflow_task_execution_failedmetric is now recorded for every failed workflow task
attempt, including attempts whose failure was not sent to the server, and itsfailure_reason
tag distinguishesGrpcMessageTooLarge,PayloadsTooLarge, andRequestTooLargeon every path.
Commits
88af5c87chore(sdk): make serialization context extensible (#1553)b804c0bachore(sdk): rename include_arguments_into_marker to include_arguments_in_marker (#1554)a38b8b4fchore(sdk): automate crate release (#1550)0ee46047Fix flaky post-cancel abandoned child test (#1555)eea75f41Stabilize Nexus async outcome deadlines (#1556)8ccec71dAdd named deterministic workflow random streams (#1557)37d747ddfeat(sdk): gate experimental APIs behind feature (#1395)85bf431fUse context-sensitive randomness for workflow views (#1558)173afc02Make SdkWakeGuard thread-bound (#1562)98bf1639Synchronize cgroup memory test refresh (#1559)2f7ef345chore(sdk): make publish idempotent (#1561)207acc16chore(sdk): prepare for 0.8.0 release (#1560)9f1acdb9chore(sdk): resolve some doc(hidden) APIs (#1563)f3bf104bchore(sdk): limit macro exports (#1564)5db7e2efdocs: update API WIT documentation (#1573)a94ca631chore(sdk): use correct repo in cargo toml (#1567)139d2e8fchore(sdk): mark remaining error enums as non exhaustive (#1568)078f7fe5feat(sdk): add not found variant for signal/cancel external wf (#1569)8cab93dachore(sdk): mark pub test utilities as experimental (#1570)c8551672chore(core): remove doc hidden from runtime opts (#1572)e7693a2cAdd workflow-scoped context storage (#1580)82b24c94fix(sdk): ensure memo/search attribute keys are determistic (#1576)2b8b3509chore(sdk): add SDK owned types over using core directly (#1577)4212ee2bchore(sdk): provide concrete types for worker tuning (#1581)b020c53cchore(sdk): limit reexport of core worker and worker config (#1582)fcac7560chore: add msrv to every crate (#1587)8a155a93fix(sdk/testing): hide cancellation token from public API (#1588)3d2cb186chore(sdk): keep proto/core in sync (#1583)e6dc63fafix(sdk): add sdk owned wrappers for some proto types exposed in client (#1584)edf4d2fefeat(client): allow usage of protox instead of system protoc (#1590)399cb7adchore: release 1.0.0 (#1586)acac9e3fRun Cloud-eligible integration tests with filtering (#1518)26eeb2f6Allow normal polling when sticky is saturated (#1579)0c23f718build(deps): update wit-bindgen requirement from 0.57.1 to 0.61.1 (#1601)24dc2d9bFix PayloadsTooLarge errors spamming WFT failures (#1604)b33e76e4Preserve targets after transient errors (#1600)27073b0aGenerate payload visitor implementations in a stable order (#1608)2deeab98Update API definitions (#1607)efa9e671Standalone Activities samples (#1603)0eb03f21feat: add RetryPolicy option under ChildWorkflowOptions (#1610)e163abd6Record order LAs are resolved in WFTs (#1616)
What's Changed
- Automate release preparation by @tconley1428 in #1692
- Mark breaking change headers by @tconley1428 in #1694
- Fix flake in test_started_workflow_has_link_to_standalone_nexus_operation by @VegetarianOrc in #1696
- feat(extstore): Add support for Nexus task handling by @jmaeagle99 in #1676
- fix: revert testmodule proto gen to mypy-protobuf 3.3.0 format by @jmaeagle99 in #1699
- test: run integration suite against Cloud by @tconley1428 in #1687
- refactor: move workflow task duration logging to core by @jmaeagle99 in #1698
- chore: update uv lockfile by @tconley1428 in #1700
- test: unskip unfinished update handler cases on time-skipping server by @Sakshamm-Goyal in #1697
- Ensure unique workflow IDs in deployment config test by @VegetarianOrc in #1705
- Add pytest marker to skip nexus extstore tests by @VegetarianOrc in #1702
- Add SAA TemporalNexusOperation handling by @VegetarianOrc in #1689
- Bump OpenAI Agents failure-propagation test timeout by @THardy98 in #1711
- fix: preserve restricted proxies after in-place operations by @Sakshamm-Goyal in #1706
- revert: restore Python workflow task duration logging by @tconley1428 in #1720
- Forward MCP server config through GeminiTestServer.plugin() by @brianstrauch in #1721
- Updating Temporal API protos by @JoshuaFrenchwood in #1719
- fix(contrib): pool and idle-evict MCP connections in google_adk_agents by @wankhede04 in #1664
- Fix duplicate links for Nexus backing SAA by @VegetarianOrc in #1725
- Test Strands with unique task queues by @tconley1428 in #1729
- fix(contrib/pydantic): reuse TypeAdapters across payloads by @nathan-gage in #1703
- Fix race in nexus double start test by @VegetarianOrc in #1728
- Wait for deployment ramp propagation by @tconley1428 in #1730
- test: provision Cloud namespace per CI run by @tconley1428 in #1731
- test: tolerate trace start-run ordering by @tconley1428 in #1714
- Test LangSmith built-in query filtering by @tconley1428 in #1727
- [AI-163] google_adk_agents: support ToolContext session state in activity_tool by @DABH in #1683
- Add mcp dependency to google-adk extra by @DABH in #1736
- contrib/google_adk_agents: rename activity_tool to activity_as_tool by @DABH in #1735
- Accept dict run_config in openai_agents Temporal runner by @DABH in #1739
- docs: clarify AI contribution expectations by @tconley1428 in #1737
- [AI-250] Add Deep Agents plugin by @DABH in #1644
- chore: update sdk-core submodule to latest by @jmaeagle99 in #1738
- Add workflow.uuid7() by @ribhavjain in #1733
- docs: clarify OpenAI Agents tool execution by @jaeyoung0509 in #1741
- chore: update sdk-core submodule to latest by @jmaeagle99 in #1742
- Add missing changelog entry for Nexus invoked SAA by @VegetarianOrc in #1746
- Remove stale references to Python 3.9 by @mjameswh in #1740
- feat: expose runtime environment info option by @tconley1428 in #1747
- Fix OpenInference trace patch lifecycle by @tconley1428 in #1726
- Add SDK Core changelog release notes by @tconley1428 in #1744
- refactor: move workflow task duration logging to core by @jmaeagle99 in #1749
- feat: Add optional FIPS support- #466 by @christiandcucco in #1743
- Expose Core console log format by @Sushisource in #1750
- [SDK Sentinel] Fix concurrent OpenTelemetry ID seed isolation by @sdk-sentinel-bot in #1758
- test: support standalone activity cancellation status change by @tconley1428 in #1762
- Expose failure converter to system Nexus conversion by @VegetarianOrc in #1760
- AI-382: keep hosted tool credentials out of workflow history by @xumaple in #1752
- Report non-retryable PayloadValidationError as BAD_REQUEST by @bergundy in #1756
- Set request ID for SAA by @Quinn-With-Two-Ns in #1761
- Use target serialization context for system Nexus signal-with-start by @tconley1428 in #1672
- Fix the sandbox examples in the OpenAI Agents README by @brianstrauch in #1764
- [AI-383] Add replay-safe OpenTelemetry meter and logger providers by @DABH in #1710
- AI-382: keep sandbox credentials out of workflow history by @xumaple in #1745
- Move Nexus start workflow logic into the Nexus package. by @VegetarianOrc in #1765
- Add payload validation error factory by @bergundy in #1766
- Fix shared header encoding for update-with-start by @tconley1428 in #1770
- Omit null payload validation details by @bergundy in #1774
- Move Nexus workflow update and signal logic into the Nexus package. by @VegetarianOrc in #1771
- Decode system Nexus worker payloads by @VegetarianOrc in #1775
- Prepare release 1.32.0 by @tconley1428 in #1779
- Adding QueryWorkflowResponse Link for Nexus by @JoshuaFrenchwood in #1723
- Fix release changelog verification by @tconley1428 in #1780
- Add SDK Sentinel PR responder by @Sushisource in #1781
- fix: fail task when update handler continues as new by @Sakshamm-Goyal in #1708
- Update sdk-core by @tconley1428 in #1786
- [SDK Sentinel] Fix Nexus TRY_CANCEL cancellation test race by @sdk-sentinel-bot in #1785
- Support payload-free system Nexus roots by @JoshuaFrenchwood in #1783
- Update bridge lockfile security fixes by @tconley1428 in #1789
- Use shared changelog workflow by @Sushisource in #1790
- Fix tests with latest dependencies by @brianstrauch in #1798
- [SDK Sentinel] Stabilize immediate schedule trigger test by @sdk-sentinel-bot in #1802
- fix: only set Nexus start on_conflict_options when there's something to attach by @tekkaya in #1799
- 💥 feat(extstore): pass a dedicated select context to the driver selector by @jmaeagle99 in #1794
- feat: add System Nexus operation interceptors by @tconley1428 in #1791
- Honor retry-after headers when OpenAI requests a retry by @1fanwang in #1796
- Disable Botocore retries for default Strands Bedrock model by @brianstrauch in #1797
- feat: restore generic System Nexus workflow interceptor by @tconley1428 in #1800
- [SDK Sentinel] Remove flaky Gemini replay workflow deadline by @sdk-sentinel-bot in #1816
- Fix duplicate activity cancellation commands by @tconley1428 in #1814
- fix(extstore): report wall-clock duration for storage metrics by @jmaeagle99 in #1815
- Support new API fields in ActivityHandle.describe by @maciejdudko in #1782
- [SDK Sentinel] Stabilize unfinished-handler cancellation test by @sdk-sentinel-bot in #1824
- Add GCP Cloud Run OpenTelemetry support by @seanbollin in #1767
- Add OpenTelemetry metrics exporter built on MetricBuffer by @harsh543 in #1701
- Pass pydantic_core through the workflow sandbox by default by @DABH in #1834
- Run google_genai MCP tests in-memory and close pooled connections by @DABH in #1836
- Remove redundant workflow deadlines from google_genai and openai_agents tests by @DABH in #1835
- Bound workflow task latency metric by wall-clock time in metrics test by @DABH in #1839
- Derive reset point from history in random seed test by @DABH in #1840
- Fix System Nexus payload converter serialization context by @tconley1428 in #1825
- Skip cloud tests for Dependabot by @tconley1428 in #1846
- Standalone Activities operator commands by @GregoryTravis in #1809
- deepagents: route string summarizer models through the durable seam by @DABH in #1843
- Bump aiohttp from 3.14.1 to 3.14.3 by @dependabot[bot] in #1827
- Bump cryptography from 49.0.0 to 50.0.0 by @dependabot[bot] in #1826
- Fix repeated Deep Agents tool calls with identical arguments by @1fanwang in #1806
- Fix OpenTelemetry exporter examples in the openai_agents README by @DABH in #1850
- Remove Experimental tag from Standalone Activities by @GregoryTravis in #1863
- Prepare release 1.33.0 by @tconley1428 in #1864
- [SDK Sentinel] Retry transport-cancelled worker deployment test RPCs by @sdk-sentinel-bot in #1857
- NexusSerializationContext for data/failure converters by @JoshuaFrenchwood in #1828
- Support google-genai 2.21 file downloads by @brianstrauch in #1865
- Add Google Cloud Run CloudRunIDPlugin by @seanbollin in #1776
- Rename CloudRunIDPlugin to CloudRunIdPlugin by @seanbollin in #1869
- Unwrap current payload converters by @tconley1428 in #1867
- Fix release changelog notes command by @tconley1428 in #1866
- Restore pickling of Pydantic data converters by @tconley1428 in #1877
- Replace traced readiness query polls with untraced waits by @DABH in #1848
- Keep DataConverter payload converters unwrapped by @tconley1428 in #1875
- Add durable Strands sandbox support by @brianstrauch in #1768
- Prevent duplicate Deep Agents messages after continue-as-new by @1fanwang in #1804
- Query completed workflows instead of polling traced queries in LangSmith tests by @DABH in #1830
- Improve behavior of NexusSerializationContext by @Evanthx in #1879
- Add experimental Event Groups support by @mjameswh in #1784
- [AI-303] google_adk_agents: graph workflows, dynamic workflows, and durable HITL (ADK v2) by @DABH in #1675
- Bump deepagents to 0.7 and mirror optional backend ops in TemporalBackend by @DABH in #1873
- Pass OpenTelemetry through Google ADK workflow sandbox by @brianstrauch in #1899
- Skip importlib for already-loaded modules in the workflow sandbox by @DABH in #1833
- Bump soupsieve from 2.8.4 to 2.9 by @dependabot[bot] in #1884
- [SDK Sentinel] Wait for workflow completion metric in custom metrics test by @sdk-sentinel-bot in #1819
- Restore frozensets when decoding typed JSON payloads by @LindseyZ1205 in #1898
- Add first run ID to workflow already started errors by @Quinn-With-Two-Ns in #1893
- Preserve DeepAgents model bind options with tools by @brianstrauch in #1901
- Update sdk-core by @tconley1428 in #1906
- Prepare release 1.34.0 by @tconley1428 in #1903
New Contributors
- @JoshuaFrenchwood made their first contribution in #1719
- @wankhede04 made their first contribution in #1664
- @nathan-gage made their first contribution in #1703
- @ribhavjain made their first contribution in #1733
- @jaeyoung0509 made their first contribution in #1741
- @christiandcucco made their first contribution in #1743
- @sdk-sentinel-bot made their first contribution in #1758
- @tekkaya made their first contribution in #1799
- @seanbollin made their first contribution in #1767
- @harsh543 made their first contribution in #1701
- @LindseyZ1205 made their first contribution in #1898
Full Changelog: 1.31.0...1.34.0