Notable Changes
Added
-
Added the
Workermax_eager_activity_reservations_per_workflow_taskoption for configuring
the number of activity slots reserved for eager execution per workflow task. Configured values
must be positive; usedisable_eager_activity_executionto disable eager activity execution. -
Added experimental SDK payload converter support for values and type hints
decorated with@transfer_type_convertible(...)using aTransferTypeConverterclass.
This lets types with transfer type converters delegate their wire representation to the
configured payload converter, preserving SDK behavior such as serialization
contexts. -
Added
TLSConfig.verification_server_nameto verify the server certificate against a fixed name
instead of the connection's server name. Unlikedomain, it does not change the TLS SNI or
HTTP/2 authority values, which keep following the connected host, so it can be used when the
server's certificate does not carry the dialed name but on-path infrastructure (e.g. an
SNI-inspecting egress proxy) needs the SNI to remain resolvable. Requires
server_root_ca_cert. -
Added the experimental
Workerpatch_activation_callbackoption, allowing workers
to decide whether a first non-replayworkflow.patchedcall should activate a patch
during rolling deployments.
Changed
- Prepared replay-safe workflow activation scheduling that prevents cancellation
from being lost when another event becomes ready in the same workflow task. The
behavior is guarded by internal workflow logic flag 2 and remains disabled by
default during its compatibility rollout.
Maintainer reminder: keep flag 2 default-disabled for the first two published
SDK releases that recognize it; enable it in the third release, remove the explicit
overrides for this flag fromtests/worker/test_workflow.py, and replace this rollout
note with aFixedentry announcing the behavior change.
💥 Breaking Changes
- Custom workflow runners that construct
WorkflowInstanceDetailsmust now pass
payload_converter_factoryinstead ofpayload_converter_class. The factory
returns the already wrapped payload converter that workflow instances should
use. - System Nexus payload converter helpers added for generated bindings are now
private implementation details, and the remaining publictemporalio.nexus.system
APIs are marked experimental and subject to change. - Payload size limits have moved from
DataConvertertoClient.connect. Pass
payload_limits=PayloadLimitsConfig(...)(now exported from
temporalio.client) instead of settingpayload_limitsonDataConverter.
Config fields were renamed topayloads_warn_sizeandmemo_warn_size, and
the deprecatedPayloadSizeWarningwas removed.
Fixed
- Marked system Nexus envelope payloads so nested payloads can be detected and
visited after the envelope is already stored as a payload.
SDK Core
db902171cleanup changelog (#1374)353fd3b8chore: limit wasm test concurrency (#1375)5df57f6dfix(otel): install subscriber on PeriodicReader thread (#1378)467e871aUpdate api upstream (#1367)d96b1eb4feat(sdk): switch to rich search attributes from all getters (#1373)9b9325cdfix(client): correctly handle Node gRPC style unimplemented method message (#1379)8e21d5bcchore(ci): use mise for installing protoc (#1382)afb5251ffeat(schedules): provide typed accessor to schedule action (#1372)2cf2c103Test Cloud gzip support for GetSystemInfo and HealthCheck (#1362)03a6d123chore(sdk): reject#[workflow(name=...)]for overriding workflow name (#1390)95e97686fix: use worker hearbeat interval for heartbeat system info poller (#1393)6f75de52Fix workflow executor cooperative budget livelock (#1396)6a0a5bc3docs: update contributing guide (#1397)208ca8bcchore: add dev tools to mise.toml, remove redundant CI installs (#1386)207194c9Fix task slots used metric (#1391)16452094feat(sdk): remove remaining raw protos in APIs (#1398)e72c031ffeat(sdk): provide typed accessor for workflow count group (#1410)1b6e4e38Allow resource controllers to be shared across tuners (#1407)3dac9013feat: payload limit enforcement (#1363)846ac2c5chore: extract composite action for CI setup, add selective mise installs (#1387)47d3a40echore(ci): use github backend for temporal cli (#1414)a9bdead4Add patch activation callback (#1394)5f94631dReplace unmaintained backoff crate with backon (#1411)aeb102efOnly set worker control task queue field in polls when appropriate (#1418)71f46055feat(sdk): addrandomanduuid4in workflow context (#1412)52aa5ed7fix(sdk): respect forced failure over completion in same poll (#1417)19123894chore(sdk): rename start_activity to execute_activity (#1416)25de75e1don't use versioning for internal nexus poller (#1420)eb004c78Integrate Temporal API 1.63.4 (#1423)d2769368Make eager activity reservation limit configurable (#1424)
What's Changed
- fix(activity): do not mutate caller-provided extra dict in LoggerAdapter by @1fanwang in #1513
- Update sdk-core to incorporate time-skipping api changes by @GregoryTravis in #1633
- Fix flaky TMPRL1104 duration-log assertions in test_extstore by @DABH in #1628
- Add dynamic node/task summaries to LangGraph plugin by @DABH in #1612
- Add First-Class Google Gen AI SDK Integration to Contrib by @JasonSteving99 in #1378
- fix: use functools.wraps in activity_tool to preserve annotations and module by @brucearctor in #1636
- Add musl/alpine support by @Sushisource in #1634
- Update extstore s3 driver key percent encoding to be consistent with other SDKs and S3's safe character guidelines. by @cconstable in #1637
- Update contributing guide by @tconley1428 in #1625
- Fix a few typos by @iampat in #1647
- Release the GIL during the activity heartbeat core call by @odedkedemdreeze in #1643
- Fix copy-paste error message in OpenTelemetryPlugin by @xumaple in #1649
- Clarify determinism of wait_condition with comment by @Sushisource in #1638
- Remove exclude-newer-package exemptions by @brianstrauch in #1653
- Add patch activation callback by @Sushisource in #1639
- Prevent post-return activity cancel from killing pool thread by @tconley1428 in #1654
- Fix stale workflow.tracer() references in OpenTelemetry contrib by @xumaple in #1662
- Fix type checking for google-genai 2.12.0 by @DABH in #1652
- 💥 refactor: payloads/memo size validation by @jmaeagle99 in #1640
- feat: expose histogram_bucket_overrides on OpenTelemetryConfig by @parth-wisdom in #1433
- Minor README update for Nexus operations and asyncio cancellation by @cretz in #1234
- fix: avoid spurious "exception in shielded future" logs on cancellation by @Bathula-Adiseshu in #1624
- Don't swallow stderr in gen_protos_docker by @dandavison in #1145
- Fixing indent issue with kwargs["extra"] by @MasonEgger in #789
- Fix minor typo by @tconley1428 in #1666
- Add TLSConfig.verification_server_name to decouple certificate verification from SNI by @kollektiv in #1651
- NEXUS-484: Support UpdateWorkflow as a Nexus Operation by @mavemuri in #1631
- fix: exclude sdk-core gitfile from wheels by @Sakshamm-Goyal in #1669
- 💥 Add transfer type payload conversion hooks by @tconley1428 in #1655
- Fix type checking for openai 2.45.0 by @xumaple in #1673
- Make eager activity reservation limit configurable by @Sushisource in #1674
- Unify Payload Visitation by @VegetarianOrc in #1684
- Add type_hint to TransferTypeConverter.from_transfer_type by @VegetarianOrc in #1685
- Fix cancellations being swallowed in some circumstances by @Sushisource in #1671
- Mark system Nexus envelope payloads by @tconley1428 in #1667
- AI-374: Warn against passing secrets through MCP factory_argument by @xumaple in #1688
- Prepare release 1.31.0 by @THardy98 in #1693
New Contributors
- @1fanwang made their first contribution in #1513
- @GregoryTravis made their first contribution in #1633
- @iampat made their first contribution in #1647
- @odedkedemdreeze made their first contribution in #1643
- @parth-wisdom made their first contribution in #1433
- @Bathula-Adiseshu made their first contribution in #1624
- @MasonEgger made their first contribution in #789
- @kollektiv made their first contribution in #1651
- @mavemuri made their first contribution in #1631
- @Sakshamm-Goyal made their first contribution in #1669
Full Changelog: 1.30.0...1.31.0