From 6214cf0d40e2d864bbc4612449ae339cd11b0c8e Mon Sep 17 00:00:00 2001 From: Benoit Travers Date: Thu, 3 Sep 2026 00:48:16 +0200 Subject: [PATCH] chore: release packages (beta) --- .changeset/{ => pre}/workflow-saga.md | 0 packages/client/CHANGELOG.md | 6 +++ packages/client/package.json | 2 +- packages/contract/CHANGELOG.md | 2 + packages/contract/package.json | 2 +- packages/testing/CHANGELOG.md | 9 ++++ packages/testing/package.json | 8 ++-- packages/worker/CHANGELOG.md | 59 +++++++++++++++++++++++++++ packages/worker/package.json | 2 +- 9 files changed, 83 insertions(+), 7 deletions(-) rename .changeset/{ => pre}/workflow-saga.md (100%) diff --git a/.changeset/workflow-saga.md b/.changeset/pre/workflow-saga.md similarity index 100% rename from .changeset/workflow-saga.md rename to .changeset/pre/workflow-saga.md diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 7f89c092..0559c4b7 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,11 @@ # @temporal-contract/client +## 8.0.0-beta.8 + +### Patch Changes + +- @temporal-contract/contract@8.0.0-beta.8 + ## 8.0.0-beta.7 ### Patch Changes diff --git a/packages/client/package.json b/packages/client/package.json index ca97a564..40009805 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@temporal-contract/client", - "version": "8.0.0-beta.7", + "version": "8.0.0-beta.8", "description": "Client utilities with unthrown Result/AsyncResult for consuming temporal-contract workflows", "keywords": [ "client", diff --git a/packages/contract/CHANGELOG.md b/packages/contract/CHANGELOG.md index 617f846e..c8961db9 100644 --- a/packages/contract/CHANGELOG.md +++ b/packages/contract/CHANGELOG.md @@ -1,5 +1,7 @@ # @temporal-contract/contract +## 8.0.0-beta.8 + ## 8.0.0-beta.7 ## 8.0.0-beta.6 diff --git a/packages/contract/package.json b/packages/contract/package.json index 9c56e3b4..a7c82fe0 100644 --- a/packages/contract/package.json +++ b/packages/contract/package.json @@ -1,6 +1,6 @@ { "name": "@temporal-contract/contract", - "version": "8.0.0-beta.7", + "version": "8.0.0-beta.8", "description": "Contract builder for temporal-contract", "keywords": [ "contract", diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md index 61b13587..ebc989bf 100644 --- a/packages/testing/CHANGELOG.md +++ b/packages/testing/CHANGELOG.md @@ -1,5 +1,14 @@ # @temporal-contract/testing +## 8.0.0-beta.8 + +### Patch Changes + +- Updated dependencies [274e340] + - @temporal-contract/worker@8.0.0-beta.8 + - @temporal-contract/client@8.0.0-beta.8 + - @temporal-contract/contract@8.0.0-beta.8 + ## 8.0.0-beta.7 ### Major Changes diff --git a/packages/testing/package.json b/packages/testing/package.json index 41474b77..29a50a92 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@temporal-contract/testing", - "version": "8.0.0-beta.7", + "version": "8.0.0-beta.8", "description": "Temporal testing utilities", "keywords": [ "contract", @@ -88,9 +88,9 @@ "zod": "catalog:" }, "peerDependencies": { - "@temporal-contract/client": "^8.0.0-beta.7", - "@temporal-contract/contract": "^8.0.0-beta.7", - "@temporal-contract/worker": "^8.0.0-beta.7", + "@temporal-contract/client": "^8.0.0-beta.8", + "@temporal-contract/contract": "^8.0.0-beta.8", + "@temporal-contract/worker": "^8.0.0-beta.8", "@temporalio/client": "^1.16.0", "@temporalio/testing": "^1.16.0", "@temporalio/worker": "^1.16.0", diff --git a/packages/worker/CHANGELOG.md b/packages/worker/CHANGELOG.md index 31d1576d..085b3121 100644 --- a/packages/worker/CHANGELOG.md +++ b/packages/worker/CHANGELOG.md @@ -1,5 +1,64 @@ # @temporal-contract/worker +## 8.0.0-beta.8 + +### Minor Changes + +- 274e340: `context.saga()`: steps with compensating undos, unwound LIFO — with the + machinery failures exempt by default. + + `declareWorkflow` handed a workflow `context.activities` and `context.errors` + and nothing for the walk-back, so every saga wrote its own. The LIFO machinery + is now `@unthrown/saga`'s. What this adds is the decision that belongs to + Temporal rather than to a `Result` combinator: **which failures compensate.** + + ```ts + const fulfilled = await context + .saga() + .step( + () => context.activities.reserveStock(order), + (reservation) => context.activities.releaseStock({ id: reservation.id }), + ) + .step( + () => context.activities.chargeCard(order), + (charge) => context.activities.refund({ id: charge.id }), + ) + .step(() => context.activities.ship(order)) + .run(); + ``` + + The undos run on a **declared contract error** — a permanent domain answer, + where what the step did before saying no is knowable. They do **not** run on an + `ActivityError`, a `ChildWorkflowError` or a defect: a step that failed + unmodelled left state nobody can see, and un-deciding what you cannot see is a + second bug. That failure propagates untouched, so `propagateActivityFailure` + still re-raises Temporal's original failure — which deletes the per-step + + ```ts + .with(P.tag(ACTIVITY_ERROR_TAG), P.tag(ACTIVITY_CANCELLED_ERROR_TAG), (error) => ErrAsync(error)) + ``` + + arm that had to be repeated, was easy to omit, and was invisible when omitted. + + Cancellation is the one case a caller may opt back in to, with + `saga({ compensateOnCancellation: true })`. Every undo runs inside a + non-cancellable scope: a cancelled scope schedules no activity at all, so + without one that opt-in could never compensate for the failure it exists for. + A compensation that itself fails + becomes a defect carrying its own failure, which outranks the failure that + triggered the unwind — a refund that never happened is worse news than the order + that could not ship — and the remaining undos still run first. + + `workflowSaga` is the same function, exported from + `@temporal-contract/worker/workflow` for a workflow that composes its steps in a + helper. + + Closes #413. + +### Patch Changes + +- @temporal-contract/contract@8.0.0-beta.8 + ## 8.0.0-beta.7 ### Major Changes diff --git a/packages/worker/package.json b/packages/worker/package.json index 0446acff..e5bf32f0 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,6 +1,6 @@ { "name": "@temporal-contract/worker", - "version": "8.0.0-beta.7", + "version": "8.0.0-beta.8", "description": "Worker utilities with unthrown Result/AsyncResult for implementing temporal-contract workflows and activities", "keywords": [ "contract",