Skip to content

Commit 1dc27cb

Browse files
Bernd VerstCopilot
andcommitted
docs(changelog): fold Unreleased into v1.5.0 with type-level breaking changes
Move the Unreleased changelog entries into the v1.5.0 sections of both the core and azuremanaged changelogs ahead of the 1.5.0 release. Surface the type-level breaking changes (no runtime impact for typical users) explicitly rather than burying them, per PR review feedback, and document the when_any copy semantics change and the EntityInstanceId.__lt__ recursion fix. Remove the CI type-check workflow entry since CI changes are not user-facing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 9550687 commit 1dc27cb

2 files changed

Lines changed: 50 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,36 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project
66
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## Unreleased
8+
## v1.5.0
9+
10+
BREAKING CHANGES (type-level only — no runtime impact for typical users)
11+
12+
These changes do not alter runtime behavior for clients or activity/orchestrator
13+
authors, but because the package ships `py.typed`, consumers running strict type
14+
checkers (pyright/mypy) against their own code — or subclassing the public
15+
abstract types — may see new type-check errors and need to update their
16+
overrides:
17+
18+
- `OrchestrationContext.create_timer` now returns the specific `TimerTask` type
19+
(was `CancellableTask`)
20+
([#93](https://github.com/microsoft/durabletask-python/issues/93)).
21+
- `OrchestrationContext.wait_for_external_event` now returns `CancellableTask[Any]`
22+
(was a bare `CancellableTask`).
23+
- `WhenAnyTask` is now generic; `when_any(tasks: Sequence[Task[T]])` returns
24+
`WhenAnyTask[T]` for better static inference of the completing child task
25+
([#94](https://github.com/microsoft/durabletask-python/issues/94)).
26+
`CompositeTask.on_child_completed` now takes `Task[Any]`.
27+
- `TaskHubGrpcWorker.add_activity` / `add_entity` (and the internal registry
28+
methods) now require `Activity[Any, Any]` / `Entity[Any, Any]` instead of the
29+
bare `Activity` / `Entity` aliases.
30+
- `OrchestrationContext.call_entity` / `signal_entity` `input` parameter widened
31+
from `TInput | None` to `Any` (Liskov-safe for callers; subclass overrides
32+
using the old narrower type will be flagged).
33+
- gRPC client interceptors now use the public `grpc.ClientCallDetails` /
34+
`grpc.aio.ClientCallDetails` types instead of private internal namedtuples;
35+
custom interceptor subclasses should retype their override parameters.
36+
- These changes also broadly improve generic type-safety hints throughout the
37+
SDK ([#92](https://github.com/microsoft/durabletask-python/issues/92)).
938

1039
ADDED
1140

@@ -14,25 +43,9 @@ ADDED
1443
existing `AsyncTaskHubGrpcClient` async-context-manager support and the
1544
`TaskHubGrpcWorker` pattern. `DurableTaskSchedulerClient` inherits this
1645
behavior automatically. `__exit__` delegates to `close()`, so the
17-
resiliency-aware teardown introduced in v1.5.0 (in-flight recreate
18-
thread join, retired-channel timer cancellation, and SDK-owned channel
19-
cleanup) runs unchanged through the new `with` path.
20-
- Added a pyright type-check CI workflow that runs on pull requests and pushes
21-
to `main`, using strict mode against the lowest supported Python version
22-
(3.10) across both `durabletask` and `durabletask-azuremanaged` packages.
23-
- Improved type coverage across the public API. `OrchestrationContext.create_timer`
24-
now returns the specific `TimerTask` type (previously `CancellableTask`)
25-
([#93](https://github.com/microsoft/durabletask-python/issues/93)), and
26-
`WhenAnyTask` is now generic with `when_any(tasks: Sequence[Task[T]]) -> WhenAnyTask[T]`
27-
for better static type inference of the completing child task
28-
([#94](https://github.com/microsoft/durabletask-python/issues/94)).
29-
These changes also broadly improve generic type-safety hints throughout the
30-
SDK ([#92](https://github.com/microsoft/durabletask-python/issues/92)).
31-
32-
## v1.5.0
33-
34-
ADDED
35-
46+
resiliency-aware teardown (in-flight recreate thread join, retired-channel
47+
timer cancellation, and SDK-owned channel cleanup) runs unchanged through the
48+
new `with` path.
3649
- Added `ReplaySafeLogger` and `OrchestrationContext.create_replay_safe_logger()`
3750
for suppressing duplicate log messages during orchestrator replay
3851
- Added `GrpcChannelOptions` and `GrpcRetryPolicyOptions` for configuring
@@ -53,8 +66,17 @@ ADDED
5366
`ListInstanceIds` so local orchestration tests can retrieve history and page
5467
terminal instance IDs by completion window.
5568

69+
CHANGED
70+
71+
- `when_any` now copies its input into a new list (`WhenAnyTask(list(tasks))`).
72+
Previously the task aliased the caller's list, so mutating it after
73+
construction was visible inside the task; that side effect no longer occurs.
74+
5675
FIXED
5776

77+
- Fixed `EntityInstanceId.__lt__` infinite recursion when compared against a
78+
non-`EntityInstanceId` operand. It now returns `NotImplemented`, so mixed-type
79+
comparisons raise `TypeError` cleanly instead of recursing.
5880
- Improved `TaskHubGrpcWorker` recovery from stale or disconnected gRPC streams
5981
so configured hello timeouts apply on fresh connections, received work resets
6082
failure tracking, SDK-owned channels are refreshed and cleaned up safely, and

durabletask-azuremanaged/CHANGELOG.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project
66
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## Unreleased
8+
## v1.5.0
99

10+
- Updates base dependency to durabletask v1.5.0
1011
- Improved type coverage benefits Azure Managed users: `create_timer` now
1112
returns the specific `TimerTask` type and `when_any` is generic so the
1213
completing child task is type-checked through `DurableTaskSchedulerClient`,
1314
`AsyncDurableTaskSchedulerClient`, and `DurableTaskSchedulerWorker` derived
1415
orchestrations.
15-
16-
## v1.5.0
17-
18-
- Updates base dependency to durabletask v1.5.0
16+
- gRPC client interceptors in the core SDK now use the public
17+
`grpc.ClientCallDetails` / `grpc.aio.ClientCallDetails` types instead of
18+
private internal namedtuples. Any custom DTS auth interceptor built on the
19+
same pattern as `DTSDefaultClientInterceptorImpl` should retype its
20+
`_intercept_call` override parameter accordingly. This is a type-level change
21+
only and does not alter runtime behavior.
1922
- Added optional `interceptors`, `channel`, and `channel_options` parameters to
2023
`DurableTaskSchedulerClient`, `AsyncDurableTaskSchedulerClient`, and
2124
`DurableTaskSchedulerWorker` to allow combining custom gRPC interceptors with

0 commit comments

Comments
 (0)