Repository navigation
What's Changed
- Add Python 3.15 support, by Bernd Verst (@berndverst) in #284
- Fix
when_allhanging when pending tasks are shared between groups or appear more than once in a group. Results preserve input order and duplicate positions without scheduling additional activities. Completedwhen_anygroups stop observing losing children without disturbing other groups, and throwing completion callbacks no longer prevent other observers from being notified. By andystaples in #286 - Reconstruct dataclasses with
init=Falsefields as their declared type rather than falling back to a dictionary. Handwritten constructors still receive serialized non-init fields they accept as keywords; other non-init fields use defaults, default factories, or__post_init__and may reset recorded values. Use an explicitfrom_json()hook to preserve recorded state that the constructor cannot accept. By Shubham Padkonde (@Shubham-Padkonde) in #283 - Explicitly target orchestrations rather than entities in single-instance
purge_orchestration()requests from both synchronous and asynchronous clients, by andystaples in #279 - Prevent timer callbacks from scheduling additional long-timer chunks, retrying activities or sub-orchestrations, or resuming orchestrator code after completion, failure, termination, or continue-as-new. Work scheduled before the terminal state is preserved. By andystaples in #280
- Preserve the global arrival order of unconsumed buffered external events across different event names when using
continue_as_new(..., save_events=True), by andystaples in #278 - Carry external events arriving after
continue_as_new(..., save_events=True)into the next execution instead of losing them to abandoned waits. Events already delivered to live waits are not carried over, andsave_events=Falsestill discards unprocessed events. By andystaples in #281
Warning
Replay-breaking bug fix: Shared nested races can select a different direct child during replay. For example, with first = when_any([timer, work]) and second = when_any([first, timer]), timer completion now notifies first, allowing second to select first rather than timer. Existing downstream history can then fail replay with NonDeterminismError. Disjoint task groups are unchanged.
Drain affected instances on the previous SDK, or keep their task hub on the previous SDK and use a separate task hub for new instances. Already-stuck instances may need deliberate recovery. Pin or lock the core durabletask dependency, including when using a provider. The coordinated provider releases require durabletask v1.12.0 or later and adopt this correction.
External Links
New Contributors
- Shubham Padkonde (@Shubham-Padkonde) made their first contribution in #283
Full Changelog: v1.11.0...v1.12.0