Repository navigation
chore: prepare Python minor releases - #764
Conversation
|
before next release, please let's double-check how operation type works the type out from the subtype in plugin, since this is a plugin change it could probably do with going out in the same release. still investigating. |
|
@yaythomas I checked this and opened #768. Checkpoint-backed plugin hooks already use the explicit operation type, but local hooks could fall back to inferring it from subtype. #768 removes that fallback and The new tests cover built-in operations across suspension/replay and checkpointed/virtual children whose subtype differs from their type. Core (1,821), OTel (668), and Insight (157) tests pass locally, with 98.33% core coverage; type checking and lint also pass. CI is still running. Requiring |
This comment has been minimized.
This comment has been minimized.
|
agree minor release is fine here. this #749 change to make OperationSubType a str could impact Otel also, so we might want to consider making this 1st to avoid release churn? Before we release, OTel and testing should accept a subtype that is a plain string. If we make this change now, #749 won't need another OTel or testing release. Change:
Effect today: none. For every subtype the SDK records today, the new code returns the same value. |
|
@yaythomas #774 is now limited to metadata-read preparation in commit 1c2158d: the two OTel attribute builders and testing's history-event projection accept enum values or plain-string labels. Core and testing public subtype declarations remain unchanged. The earlier claim in this reply that unknown labels are accepted by the checkpoint/typed-history parsers is withdrawn. Real endpoint validation found that passing an unknown string into the current core model can consume an in-memory checkpoint token before serialization fails; returning that string as an enum-typed history result also violates the declared contract. Both parser fallbacks have therefore been removed and are deferred until the core parsing, serialization, replay and public type work in issue #749 can be coordinated. Existing enum parsing and known-label identity are preserved. The testing suite passes 1,615 tests; the final 210 focused exporter/history/endpoint tests and six-file type check pass, including state/token/retry controls on memory, filesystem and SQLite stores and an existing typed |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
yaythomas
left a comment
There was a problem hiding this comment.
Should prob pin the min version of the sdk?
packages/aws-durable-execution-sdk-python-testing/pyproject.toml "aws-durable-execution-sdk-python>=1.0.0" → "aws-durable-execution-sdk-python>=2.1.0
Pause/resume needs SDK 2.1.0, but the package still requires only aws-durable-execution-sdk-python>=1.0.0. I ran main's full testing suite against SDK 2.0.1. 1,699 tests passed and 3 failed. All 3 failures are in tests/e2e/pause_resume_test.py. The SDK side of #757, which returns PENDING on a revoked token, exists only in 2.1.0.
(Turns out the >=1.0.0 floor was already wrong in 1.2.1 too 💀 Both 1.2.1 and main fail to import with SDK 1.1.0. On 1.0.0, main fails with an ImportError for TimestampConverter. Both import cleanly from SDK 1.1.2 on.)
New features
- Virtual clock (#523). skip_time=True is now the default. Waits and step-retry delays finish instantly, and the history still records the original durations. The DURABLE_EXECUTION_TIME_SCALE env var is removed. I ran a handler that does context.wait(Duration.from_hours(1)) with main's defaults. It succeeded in 0.21 s.
- Chained invoke in the local runner (#731). context.invoke now works locally. You register targets with register_durable_function() or register_function(). The web runner takes --function-configs.
- Experimental pause/resume (#757). The local runner adds pause_execution() and resume_execution(). The cloud runner reports them as not implemented.
- Local runner rework to behave like the service (#515, #516, #504).
- Only one handler invocation runs at a time per execution.
- Each execution gets its own worker that runs its tasks one at a time.
- Map/parallel branches no longer all run on the scheduler thread.
- Updated operation IDs carry over across resumed invocations.
Behavior changes
- Lower default execution timeout. It drops from 900 s to 300 s, set by the new constructor argument execution_timeout=300.
- run(timeout=...) is deprecated. Use run(execution_timeout=...) instead. The old keyword still works but raises a DeprecationWarning. Positional calls such as run(input, 60) keep their meaning, because the new second parameter does what the old timeout did.
- Failed invocations without an error payload now fail the execution (#682). In 1.2.1 those executions succeeded.
- Invalid handler output fails the execution right away (#777). The error is InvalidParameterValueException. Only a PENDING result with no pending operations is retried, up to 3 attempts. 1.2.1 retried every invalid output up to 5 times, 5 s apart.
Fixes
- Local waits no longer hang when the scheduler loop is blocked (#498).
- A due wait in a map/parallel branch now completes inside the running invocation. Before, the branch needed an extra invocation to resume (#588).
- The cloud runner retries the temporary ResourceNotFoundException that GetDurableExecution can return right after invoke (#512).
- The cloud runner fetches every page of execution history (#514).
- The web server honors ReverseOrder on history requests (#595).
- Blank execution ARNs are now rejected. Before, they registered a worker thread that never shut down (#636).
- get_assertable_operations() excludes EXECUTION operations by type. Before, it dropped the first item in the list (#637).
Codex AI reviewNo actionable findings in the version bump or SDK dependency-floor changes. Static review only; tests, package builds, and installed-package compatibility were not exercised. Reviewed commit |
* chore: prepare Python minor releases * fix(ci): use JSON logs for plugin conformance * fix(testing): require SDK 2.1.0 for pause and resume --------- Co-authored-by: Frank Chen <frankchn@dev-dsk-frankchn-2a-ff9871a5.us-west-2.amazon.com>
Prepare the coordinated SDK 2.1.0, OTel 1.1.0 and testing 1.3.0 release from changes already merged to
mainas of October 21, 2026.The branch contains main through
c6383691eacca01ccbf0d76f0959a0de948e2ac3. This PR bumps the testing package from 1.2.1 to 1.3.0 and raises its minimum SDK version to 2.1.0 in both the published dependency metadata and the package-local Hatch test environment.Currently unmerged PRs are excluded from this release and are not release prerequisites. In particular, #758, #795, #796 and aws/aws-durable-execution-conformance-tests#131 are deferred. Their callback delivery, replay telemetry, testing-state corrections and expanded conformance coverage are not included in the notes or validation below. The factory migration in #737 and the Telemetry Exporter promotion in #788 are also outside this release.
Intended combined release tag:
sdk-v2.1.0,otel-v1.1.0,testing-v1.3.0.Draft release notes
SDK 2.1.0
XAmznTraceId; require boto3 >=1.43.114 (feat(plugin): propagate chained invoke trace context in START checkpoints #755).NonDeterministicExecutionError(fix(core): reject checkpoints at virtual child ids #778).OTel 1.1.0
Testing 1.3.0
pause_execution()/resume_execution()and paused-checkpoint simulation. Cloud-runner pause/resume remains unsupported (fix(sdk): answer PENDING on revoked token #757).Compatibility and publication
This minor release retains the enum-based
OperationSubTypecontract. The public subtype migration in #749 and the compatibility preparation in closed, unmerged #774 remain deferred to the next major release, as recorded in the closing decision. The minor-release classification of merged #768 is recorded in the compatibility discussion.The current
.github/workflows/pypi-publish.ymlincludesaws-durable-execution-sdk-python-telemetry-exporterunconditionally in both build and publish matrices. The exporter is outside this coordinated release scope, so that publishing-scope issue still needs to be resolved before publication. First publication of that distribution name requires its own release decision and PyPI trusted-publishing configuration underRELEASING.md; this is not a prerequisite to merge any currently open feature or fix PR.Validation and remaining release checks
c6383691and differs only in the testing version and its two SDK dependency declarations.5b3a9a3b: Python package, Python 3.11–3.14, Cloud tests, Python 3.11–3.14, JS Examples, CodeQL and AI PR Review. AI workflow success does not replace a required approval.hatch run dev-testing:test -qpassed all 1,702 unit and end-to-end tests, including all pause/resume cases.hatch fmt --check,hatch run dev-testing:typecheck(135 files), and the new commit's Conventional Commits check passed.hatch build; both declareaws-durable-execution-sdk-python>=2.1.0. Verified the requirement rejects SDK 2.0.1 and accepts 2.1.0 and later.hatch run dev-testing:js-examples --js-dir <prebuilt checkout> --no-buildpassed all 122 runnable JS example files with no retries or failures (4 selected files contain no cloud tests), using JS SDK commit351786a5baec2062fce88ee0803fb2f2b07da3cf.RELEASING.md.The dependency-floor correction addresses review 5605560893. This PR prepares the release metadata; publication remains subject to the release checks above.