Files
vercel__workflow/packages/world-postgres/CHANGELOG.md
github-actions[bot] 2d753279d5 Version Packages (beta) (#3826)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-31 16:36:07 -07:00

74 KiB

@workflow/world-postgres

5.0.0-beta.39

Patch Changes

  • Updated dependencies [855e479, 2668e33, e9d5c56, ffc5807, 3e0c18a]:
    • @workflow/world@5.0.0-beta.32
    • @workflow/world-local@5.0.0-beta.41
    • @workflow/utils@5.0.0-beta.10
    • @workflow/errors@5.0.0-beta.19

5.0.0-beta.38

Patch Changes

  • Updated dependencies [d9e0777]:
    • @workflow/world@5.0.0-beta.31
    • @workflow/errors@5.0.0-beta.18
    • @workflow/world-local@5.0.0-beta.40

5.0.0-beta.37

Patch Changes

  • Updated dependencies [d62b444]:
    • @workflow/world@5.0.0-beta.30
    • @workflow/errors@5.0.0-beta.18
    • @workflow/world-local@5.0.0-beta.39

5.0.0-beta.36

Minor Changes

  • #3570 9454d51 Thanks @pranaygp! - Add world.runs.waitForTerminalStatus(runId, { timeoutMs, signal, resolveData }) method, which long-polls until the run reaches a terminal status. await run.returnValue now internally uses this, if the World supports it, instead of using a polling interval.

  • #3634 7b79ba3 Thanks @pranaygp! - New runs are created with the sealed-log event identity (specVersion 7). A sealed-log run's event positions are assigned by the backend before each write commits, so concurrent writers never contend for a position. A position whose writer dies is closed by the backend with a noop event; replay steps over those without delivering them or advancing the deterministic clock. Set WORKFLOW_SEALED_LOG=0 to put a deployment back on the previous scheme. Every runtime reads sealed logs either way, and a run's version is fixed at creation, so the setting only affects new runs.

Patch Changes

5.0.0-beta.35

Patch Changes

  • #3645 771cdb2 Thanks @VaguelySerious! - Reject a hook resume that races the hook's disposal, instead of journaling it after hook_disposed and corrupting the owning run's event log.

  • Updated dependencies [b0adb50, 37e1d9e, 1321570, 04e060a]:

    • @workflow/world@5.0.0-beta.28
    • @workflow/world-local@5.0.0-beta.37
    • @workflow/errors@5.0.0-beta.17

5.0.0-beta.34

Patch Changes

  • #3542 de2a86c Thanks @VaguelySerious! - Breaking: New runs are created at spec version 6, and a World that declares an older spec version is now rejected before the first run rather than failing partway through one.

  • #3519 dc85865 Thanks @VaguelySerious! - Slot-numbered event ids are a requirement of the World contract, not a capability. The slotEventIds flag is gone, and the conformance suite now fails a World whose event ids are not positions.

  • Updated dependencies [600b096, dc85865, efbc408, a0ccfe0, de2a86c, dc85865, 7683130, dc85865, b589460, c1a5c74, 0f4b35f]:

    • @workflow/world@5.0.0-beta.27
    • @workflow/world-local@5.0.0-beta.36
    • @workflow/errors@5.0.0-beta.17

5.0.0-beta.33

Patch Changes

  • #3385 74dbf81 Thanks @NathanColosimo! - Retry replay timeouts through normal queue redelivery instead of exiting the process, and keep Postgres jobs retryable through Core's terminal delivery limit.

  • #3382 a8db185 Thanks @VaguelySerious! - Fold new events returned by events.create into the replay log so a completed wait no longer needs a follow-up events.list round trip

  • #3389 6786db9 Thanks @VaguelySerious! - Breaking: SpecVersion 6: Event IDs are now a dense per-run slot number, allocated by the world at publish time so a rejected write leaves no gap in the event log. A replay tells the world how many events it had read and gets back the ones it did not see, so an event that arrives from outside the replay and lands ahead of an event the replay wrote no longer fails the run with CORRUPTED_EVENT_LOG: it is held for whichever part of the workflow awaits it. A gap in the numbering fails the run instead of being replayed over.

  • #3205 22349e9 Thanks @NathanColosimo! - Load replay-event suffixes through one World request.

  • #3124 65139ac Thanks @NathanColosimo! - Infer required run and step entities, including their start times, from events.create request types.

  • Updated dependencies [74dbf81, a8db185, 439a495, 6786db9, 22349e9, 65139ac]:

    • @workflow/world@5.0.0-beta.26
    • @workflow/world-local@5.0.0-beta.35
    • @workflow/errors@5.0.0-beta.16

5.0.0-beta.32

Major Changes

  • #3280 de1905f Thanks @VaguelySerious! - Breaking: events.listByCorrelationId and analytics.events.listByCorrelationId now require a runId. A correlation id is unique within its run, not across runs, so an unscoped lookup answered with one event per run that numbered a step or wait the same.

Minor Changes

Patch Changes

5.0.0-beta.31

Patch Changes

  • #3230 31f92df Thanks @karthikscale3! - Lazy hook resumption: on a fast path, resumeHook() writes the hook_received event and dispatches the workflow queue message concurrently instead of sequentially, cutting a round trip off resume latency. A (runId, resumeId) dedup constraint keeps the two writers converging on exactly one event; the runtime falls back to the sequential path when dedup support is unavailable or when WORKFLOW_DISABLE_LAZY_HOOK_RESUME=1. resumeHook() resolves to a ResumedHook (a Hook plus an optional resilientResume: true flag, set only when the direct write failed transiently and the resume was recovered via the queue consumer's re-ensure) — preserving the contract introduced alongside the resilient-resume work.

  • Updated dependencies [4a9d26b, 1471f25, 31f92df, 4017597, 438eaa6, ee944d2, 2677653, aa78a7e, f05f642]:

    • @workflow/world@5.0.0-beta.24
    • @workflow/errors@5.0.0-beta.15
    • @workflow/world-local@5.0.0-beta.33

5.0.0-beta.30

Patch Changes

  • Updated dependencies [a09d001]:
    • @workflow/utils@5.0.0-beta.8
    • @workflow/world-local@5.0.0-beta.32
    • @workflow/errors@5.0.0-beta.14

5.0.0-beta.29

Major Changes

  • #3061 62d570e Thanks @NathanColosimo! - Remove legacy step queue topics and payloads now that queued steps use the workflow topic and combined flow handler.

Minor Changes

  • #3095 b4ba79e Thanks @TooTallNate! - Add an encryption_public_key column to workflow_runs (migration 0016) to store each run's X25519 public key.

Patch Changes

  • #3064 cdb3db4 Thanks @joeyhotz! - On shutdown, abort stalled workflow and step HTTP deliveries after Graphile Worker's grace period so their Postgres job rows are unlocked through normal failure handling instead of waiting for stale-lock recovery; aborted deliveries still consume an attempt and retry only when budget remains. Add opt-in application-managed shutdown through applicationManagedShutdown or WORKFLOW_POSTGRES_APPLICATION_MANAGED_SHUTDOWN=1 so applications can await world.close() before closing their HTTP server and caller-owned pool.

  • #3125 d24c91c Thanks @karthikscale3! - Hooks can carry an optional resumeContext; when present, resumeHook/resumeWebhook resume from it directly instead of fetching the full run, saving a round trip per resume. When the context also carries the run's encryptionPublicKey, the resume seals its payload (encp) directly to that key, so a default webhook resume needs neither a run read nor a run-key lookup. These two optimizations fall back independently: it fetches the full run when the context is absent, and uses symmetric encryption when no usable public key is available.

  • Updated dependencies [8c12358, b4ba79e, a86035f, d24c91c, fc81f45, 49276f2, 49276f2, 4ada27d, 62d570e, 62d570e, 62d570e]:

    • @workflow/world@5.0.0-beta.23
    • @workflow/world-local@5.0.0-beta.31
    • @workflow/utils@5.0.0-beta.7
    • @workflow/errors@5.0.0-beta.13

5.0.0-beta.28

Minor Changes

  • #2915 7d29bab Thanks @joeyhotz! - Add runs.getMany() for retrieving ordered workflow run snapshots in one storage operation.

Patch Changes

  • #2987 850777a Thanks @VaguelySerious! - Reject hook_received on terminal runs, including when the termination commits concurrently (cross-process) and for legacy (pre-event-sourcing) runs.

  • #2983 3ddf42e Thanks @joeyhotz! - Throw EntityConflictError when a run_created event targets a run that already exists, instead of resolving with no run. This matches world-local and world-vercel, and stops start() from throwing Missing 'run' in server response for 'run_created' event when the resilient start path wins the race.

  • Updated dependencies [7d29bab, fe12b84, a5e6f11, 850777a, eb8fdb9, bb773e9]:

    • @workflow/world@5.0.0-beta.22
    • @workflow/world-local@5.0.0-beta.30
    • @workflow/errors@5.0.0-beta.12

5.0.0-beta.27

Patch Changes

  • Updated dependencies [f72184d, a00d169, 1933e29, 6b8efd5]:
    • @workflow/world-local@5.0.0-beta.29
    • @workflow/world@5.0.0-beta.21
    • @workflow/errors@5.0.0-beta.11

5.0.0-beta.26

Patch Changes

  • Updated dependencies [f2be954, ac41e7d, c31e30c, 9da2d76]:
    • @workflow/world@5.0.0-beta.20
    • @workflow/errors@5.0.0-beta.10
    • @workflow/world-local@5.0.0-beta.28

5.0.0-beta.25

Patch Changes

  • #2888 7a1ea5a Thanks @ctgowrie! - Use the active queue namespace when re-enqueuing workflow runs during world startup recovery.

  • Updated dependencies [7a1ea5a, 0b956f6]:

    • @workflow/world@5.0.0-beta.19
    • @workflow/world-local@5.0.0-beta.27
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.24

Patch Changes

5.0.0-beta.23

Patch Changes

  • Updated dependencies [79a9813, 3f69666, 712ed61]:
    • @workflow/world-local@5.0.0-beta.25
    • @workflow/world@5.0.0-beta.17
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.22

Patch Changes

  • #2732 239031a Thanks @NathanColosimo! - Respect framework base paths when routing workflow traffic and expose health checks on generated Next.js workflow routes.

  • #2468 49a50e8 Thanks @NathanColosimo! - Standardize first-party World packages on createWorld(), support relative target World modules consistently, and align the Postgres World DATABASE_URL fallback with bootstrap.

  • Updated dependencies [c1d29f1, c1d29f1, 7637196, e7e5a0e, 239031a, 0f557d5, fe327e6, 49a50e8]:

    • @workflow/world-local@5.0.0-beta.24
    • @workflow/utils@5.0.0-beta.6
    • @workflow/world@5.0.0-beta.16
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.21

Minor Changes

Patch Changes

  • #2714 dd36e26 Thanks @NathanColosimo! - Fix Postgres step lifecycle event ordering so a late concurrent step_started is no longer logged after step_completed.

  • Updated dependencies [f6772d9, fc5bdcb, f76377b, cc7f076, 2ab7057]:

    • @workflow/utils@5.0.0-beta.5
    • @workflow/world-local@5.0.0-beta.23
    • @workflow/world@5.0.0-beta.15
    • @workflow/errors@5.0.0-beta.9

5.0.0-beta.20

Patch Changes

5.0.0-beta.19

Patch Changes

  • #2580 25c3df7 Thanks @karthikscale3! - Send optional client-side event occurrence timestamps through world event creation.

  • Updated dependencies [25c3df7, d108ba3]:

    • @workflow/world@5.0.0-beta.13
    • @workflow/errors@5.0.0-beta.8
    • @workflow/world-local@5.0.0-beta.21

5.0.0-beta.18

Patch Changes

  • #2478 e7ef9d8 Thanks @pranaygp! - Lazy inline step start: the owned-inline runtime path now sends a single step_started carrying the step input, letting the world create the step on the fly and saving one round-trip per inline step.

    @workflow/world: step_started event data accepts an optional input, and EventResult gains a stepCreated ownership signal.

    @workflow/world-local: step_started with input atomically creates the step plus a synthetic step_created event; a lazy step_started for an already-existing step throws EntityConflictError so concurrent losers skip (exactly-once).

    @workflow/world-postgres: same lazy-create + exactly-once create-claim for the Postgres backend.

    @workflow/world-vercel: sends the step input on step_started over the v4 wire and threads the server's stepCreated signal into EventResult.

  • Updated dependencies [b563126, 2074f91, e7ef9d8, ab2e9b8, 1332da3]:

    • @workflow/world-local@5.0.0-beta.20
    • @workflow/world@5.0.0-beta.12
    • @workflow/errors@5.0.0-beta.8

5.0.0-beta.17

Patch Changes

  • Updated dependencies [5f0b845]:
    • @workflow/world@5.0.0-beta.11
    • @workflow/errors@5.0.0-beta.8
    • @workflow/world-local@5.0.0-beta.19

5.0.0-beta.16

Patch Changes

  • Updated dependencies [926a5e7]:
    • @workflow/utils@5.0.0-beta.4
    • @workflow/errors@5.0.0-beta.8
    • @workflow/world-local@5.0.0-beta.18

5.0.0-beta.15

Patch Changes

  • #2399 af859c3 Thanks @VaguelySerious! - Update @vercel/queues from 0.3.0 to 0.3.1, which adds native retries for 429s and ECONNRESET

  • Updated dependencies [af859c3, 628795a]:

    • @workflow/world-local@5.0.0-beta.17
    • @workflow/world@5.0.0-beta.10
    • @workflow/errors@5.0.0-beta.7

5.0.0-beta.14

Minor Changes

  • #2226 ae8d6fe Thanks @pranaygp! - Allow passing initial run attributes through start(), and speed up workflow-level setAttribute calls by using native events for recording attributes.

Patch Changes

  • #2295 f2a7bde Thanks @TooTallNate! - Fix world-local and world-postgres turning duplicate processing of the same hook_created (same runId, hookId, and token) into a self-conflict; both worlds now treat same-entity duplicates as idempotent (matching step_created), and recover crash-orphaned token claims (world-local) and hook rows (world-postgres) by completing the partial write instead of incorrectly suppressing it.

  • Updated dependencies [b3279f8, f2a7bde, ae8d6fe]:

    • @workflow/world-local@5.0.0-beta.16
    • @workflow/world@5.0.0-beta.9
    • @workflow/errors@5.0.0-beta.7

5.0.0-beta.13

Minor Changes

  • #2305 4670c4b Thanks @willsather! - Add an optional namespace parameter that scopes queue topic prefixes to __{namespace}_wkf_workflow_*. This allows configuring multiple frameworks in the same deployment without queue topic collision.

Patch Changes

  • Updated dependencies [4670c4b]:
    • @workflow/world@5.0.0-beta.8
    • @workflow/world-local@5.0.0-beta.15
    • @workflow/errors@5.0.0-beta.7

5.0.0-beta.12

Patch Changes

5.0.0-beta.11

Patch Changes

  • #2246 ddc8a79 Thanks @ctgowrie! - Update @vercel/queue from 0.1.7 to 0.2.1

  • Updated dependencies [b8a337c, ddc8a79, 2a3b11b]:

    • @workflow/world-local@5.0.0-beta.13
    • @workflow/errors@5.0.0-beta.7
    • @workflow/world@5.0.0-beta.7

5.0.0-beta.10

Patch Changes

  • Updated dependencies [8f68d35]:
    • @workflow/world@5.0.0-beta.6
    • @workflow/errors@5.0.0-beta.6
    • @workflow/world-local@5.0.0-beta.12

5.0.0-beta.9

Patch Changes

  • Updated dependencies [8d0928b, 3128dfc]:
    • @workflow/errors@5.0.0-beta.6
    • @workflow/world-local@5.0.0-beta.11

5.0.0-beta.8

Patch Changes

  • Updated dependencies [65336df]:
    • @workflow/world-local@5.0.0-beta.8

5.0.0-beta.7

Patch Changes

  • #2134 1e6b1fd Thanks @VaguelySerious! - Add experimental_setAttributes() workflow-level helper for attaching string key/value metadata to a workflow run, surfaced as run.attributes

  • #1799 503a929 Thanks @TooTallNate! - Use inline sourcemaps for all workspace packages; published packages no longer ship external .js.map files.

  • Updated dependencies [1e6b1fd, 62ec537, 503a929, 657e8bb]:

    • @workflow/world@5.0.0-beta.5
    • @workflow/world-local@5.0.0-beta.7
    • @workflow/errors@5.0.0-beta.5
    • @workflow/utils@5.0.0-beta.3

5.0.0-beta.6

Patch Changes

  • #2038 dc0be50 Thanks @pranaygp! - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order.

  • #2019 738ec5e Thanks @VaguelySerious! - workflow-postgres-setup now also bootstraps the graphile_worker schema, fixing potential race on setup when starting the app and a test runner at the same time

  • Updated dependencies [dc0be50, ad71b58, b124365, 2a446af, 1d3959e]:

    • @workflow/world@5.0.0-beta.4
    • @workflow/world-local@5.0.0-beta.6
    • @workflow/errors@5.0.0-beta.4

5.0.0-beta.5

Patch Changes

  • #2012 9d2a926 Thanks @pranaygp! - Expose the active run ID on hook token conflict errors.

  • Updated dependencies [9d2a926, c145bf5]:

    • @workflow/errors@5.0.0-beta.3
    • @workflow/world@5.0.0-beta.3
    • @workflow/world-local@5.0.0-beta.5

5.0.0-beta.4

Major Changes

  • #1851 5f22832 Thanks @TooTallNate! - BREAKING CHANGE: Run and step errors are now serialized through the workflow serialization pipeline, preserving original class identity and cause chains on WorkflowRunFailedError.cause. Pre-upgrade failed runs in the world-postgres legacy error text column surface as error: undefined on read; the original payload is still readable directly from the errorJson column for manual inspection.

Patch Changes

  • #1338 8ea1532 Thanks @VaguelySerious! - Increase default concurrency to 50

  • #1878 7c45e9e Thanks @TooTallNate! - Fix race in events.create() where concurrent step_created / hook_created / wait_created writes with the same correlationId would persist duplicate event rows. Adds a unique partial index and surfaces the violation as EntityConflictError.

  • Updated dependencies [540a2ef, 92dc826, 5374148, 1203dae, 1203dae, 5f22832, 2f52d14, 8ea1532, c1163eb]:

    • @workflow/errors@5.0.0-beta.2
    • @workflow/world-local@5.0.0-beta.4
    • @workflow/world@5.0.0-beta.2
    • @workflow/utils@5.0.0-beta.2

5.0.0-beta.3

Patch Changes

  • Updated dependencies [3ad8ee7]:
    • @workflow/world-local@5.0.0-beta.3

5.0.0-beta.2

Patch Changes

  • #1769 5a42964 Thanks @tomdale! - Embed source content in published sourcemaps.

  • Updated dependencies [5a42964, 11cfb8f, 173756d]:

    • @workflow/errors@5.0.0-beta.1
    • @workflow/utils@5.0.0-beta.1
    • @workflow/world-local@5.0.0-beta.2

5.0.0-beta.1

Major Changes

  • #1293 66d49c0 Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to use world.streams.* namespace with runId as the first parameter. writeToStream(name, runId, chunk) → streams.write(runId, name, chunk), writeToStreamMulti → streams.writeMulti, closeStream → streams.close, readFromStream → streams.get(runId, name, startIndex?), listStreamsByRunId → streams.list(runId).

  • #1293 66d49c0 Thanks @VaguelySerious! - Require runId argument for world.steps.get.

Patch Changes

  • #1658 a5c90ce Thanks @VaguelySerious! - Fix community world E2E tests by adding specVersion to the World interface so start() uses the safe baseline (v2) for worlds that don't declare their supported version

  • Updated dependencies [66d49c0, a5c90ce, 66d49c0]:

    • @workflow/world@5.0.0-beta.1
    • @workflow/world-local@5.0.0-beta.1
    • @workflow/errors@5.0.0-beta.0

5.0.0-beta.0

Major Changes

Patch Changes

  • Updated dependencies [c5cdfc0]:
    • @workflow/errors@5.0.0-beta.0
    • @workflow/utils@5.0.0-beta.0
    • @workflow/world@5.0.0-beta.0
    • @workflow/world-local@5.0.0-beta.0

4.1.0-beta.53

Patch Changes

  • #1533 7e70d18 Thanks @VaguelySerious! - Add streamFlushIntervalMs option to Streamer interface, optional for worlds to allow overwriting the default of 10ms in low-latency environments.

  • #1537 c8dce52 Thanks @VaguelySerious! - Allow workflow invocation to create run if initial storage call in start did not succeed. Send run input through queue to enable this. Allow creating run_created and run_started events together in World, and skip first event list call by returning events directly.

  • Updated dependencies [5f138f2, 7e70d18, c8dce52]:

    • @workflow/world@4.1.0-beta.17
    • @workflow/world-local@4.1.0-beta.51
    • @workflow/errors@4.1.0-beta.20

4.1.0-beta.52

Patch Changes

  • Updated dependencies [b30b0dc]:
    • @workflow/world@4.1.0-beta.16
    • @workflow/world-local@4.1.0-beta.50
    • @workflow/errors@4.1.0-beta.20

4.1.0-beta.51

Patch Changes

  • #1588 ef2218a Thanks @VaguelySerious! - Fix zod v3/v4 schema mismatch crash (keyValidator._parse is not a function) by using consistent zod/v4 imports in queue files that consume v4-native schemas from @workflow/world

  • Updated dependencies [ef2218a]:

    • @workflow/world-local@4.1.0-beta.49

4.1.0-beta.50

Patch Changes

  • #1569 a98f8de Thanks @VaguelySerious! - Combine initial run fetch, event fetch, and run_started event creation

  • #1534 329cdb3 Thanks @VaguelySerious! - Re-enqueue active runs on world restart so inflight runs resume instead of getting stuck

  • Updated dependencies [a98f8de, 6dc1b78, 329cdb3]:

    • @workflow/world@4.1.0-beta.15
    • @workflow/world-local@4.1.0-beta.48
    • @workflow/errors@4.1.0-beta.20

4.1.0-beta.49

Patch Changes

  • Updated dependencies [bd1f7e4]:
    • @workflow/world-local@4.1.0-beta.47

4.1.0-beta.48

Patch Changes

4.1.0-beta.47

Patch Changes

  • #1434 d428d66 Thanks @pranaygp! - Fix race condition in step_started that could corrupt the event log. The UPDATE for step_started now includes a conditional guard (status NOT IN ('completed', 'failed', 'cancelled')) to prevent a concurrent step execution from reverting a completed step back to running. Also adds terminal-state guards to step_retrying, run_completed, run_failed, and run_cancelled, and adds cancelled to the existing guards on step_completed and step_failed.

  • #1484 5502438 Thanks @jlalmes! - Replace postgres (postgres.js) with pg (node-postgres) for Drizzle and Graphile Worker. Add optional pool on createWorld to share a pg.Pool; when provided

  • #1460 78f1b0e Thanks @VaguelySerious! - Support negative startIndex for streaming (e.g. -3 reads last 3 chunks)

  • #1342 aee035f Thanks @pranaygp! - Replace HTTP status code checks with semantic error types (EntityConflictError, RunExpiredError, ThrottleError, TooEarlyError). BREAKING CHANGE: WorkflowAPIError renamed to WorkflowWorldError.

  • #1470 01bbe66 Thanks @VaguelySerious! - Add getStreamChunks() and getStreamInfo() to the Streamer interface, and getTailIndex() to the readable stream returned by run.getReadable(). WorkflowChatTransport now reads the x-workflow-stream-tail-index response header to resolve negative initialStartIndex values into absolute positions, fixing reconnection retries after a disconnect.

  • Updated dependencies [73a851a, 84599b7, 2ef33d2, d428d66, 672d919, beccbc4, 78f1b0e, aee035f, 01bbe66]:

    • @workflow/errors@4.1.0-beta.19
    • @workflow/world-local@4.1.0-beta.45
    • @workflow/world@4.1.0-beta.14

4.1.0-beta.46

Patch Changes

  • #1417 02ea057 Thanks @NathanColosimo! - Remove the unused world-local queue executor API and clean up postgres queue tests.

  • #1417 02ea057 Thanks @NathanColosimo! - Fix world-postgres queue execution to use workflow HTTP routes instead of in-process handlers.

  • #1364 94c14c7 Thanks @karthikscale3! - Strip only ref/payload fields from eventData when resolveData is 'none', preserving all other metadata

  • Updated dependencies [02ea057, 2f0772d, 0f07403, 94c14c7]:

    • @workflow/world-local@4.1.0-beta.44
    • @workflow/world@4.1.0-beta.13
    • @workflow/errors@4.1.0-beta.18

4.1.0-beta.45

Patch Changes

  • Updated dependencies [9feebee]:
    • @workflow/world-local@4.1.0-beta.43

4.1.0-beta.44

Patch Changes

  • #1334 3648109 Thanks @NathanColosimo! - Execute Graphile jobs inline and durably reschedule delayed queue work.

  • Updated dependencies [825417a, 3648109]:

    • @workflow/world@4.1.0-beta.12
    • @workflow/world-local@4.1.0-beta.42
    • @workflow/errors@4.1.0-beta.18

4.1.0-beta.43

Patch Changes

  • Updated dependencies [4a6ddd8]:
    • @workflow/world-local@4.1.0-beta.41

4.1.0-beta.42

Patch Changes

  • #1287 d8daa2a Thanks @VaguelySerious! - Add world.events.get(runId, eventId) to the Storage interface for fetching a single event by ID.

  • Updated dependencies [d8daa2a]:

    • @workflow/world@4.1.0-beta.11
    • @workflow/world-local@4.1.0-beta.40
    • @workflow/errors@4.1.0-beta.18

4.1.0-beta.41

Patch Changes

  • Updated dependencies [8b5a388]:
    • @workflow/world-local@4.1.0-beta.39

4.1.0-beta.40

Patch Changes

  • #1273 11dcb64 Thanks @VaguelySerious! - Locally validate run ID to be ULID when passed by user

  • Updated dependencies [456c1aa, 11dcb64]:

    • @workflow/world-local@4.1.0-beta.38
    • @workflow/world@4.1.0-beta.10
    • @workflow/errors@4.1.0-beta.18

4.1.0-beta.39

Patch Changes

  • #1270 adfe8b6 Thanks @pranaygp! - Add HookNotFoundError to @workflow/errors and adopt it across all world backends

  • #1270 adfe8b6 Thanks @pranaygp! - Prevent hooks from being resumed via the public webhook endpoint by default. Add isWebhook option to createHook() to opt-in to public resumption. createWebhook() always sets isWebhook: true.

  • #1275 02f706f Thanks @TooTallNate! - Fix hooks.list() default sort order to ascending (creation order) in world-local and world-postgres, matching world-vercel behavior. Also fix world-postgres hooks.list() to respect the sortOrder pagination parameter instead of hardcoding descending order.

  • Updated dependencies [adfe8b6, adfe8b6, 02f706f]:

    • @workflow/errors@4.1.0-beta.18
    • @workflow/world-local@4.1.0-beta.37
    • @workflow/world@4.1.0-beta.9

4.1.0-beta.38

Patch Changes

  • #1217 e55c636 Thanks @pranaygp! - Upgrade dependencies across all packages

  • Updated dependencies [1cfb8b1, e55c636]:

    • @workflow/world-local@4.1.0-beta.36
    • @workflow/world@4.1.0-beta.8
    • @workflow/errors@4.1.0-beta.17

4.1.0-beta.37

Patch Changes

  • #1002 0735b2a Thanks @rovo89! - Fix racing conditions in Postgres streamer

  • #1171 79a730a Thanks @rovo89! - Hide also "info" logs from Graphile Worker by default

  • #1124 1f9a67c Thanks @kschmelter13! - Replace queue pg-boss-based implementation with graphile-worker

  • Updated dependencies [b06e491]:

    • @workflow/world@4.1.0-beta.7
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world-local@4.1.0-beta.35

4.1.0-beta.36

Patch Changes

  • Updated dependencies [b65bb07]:
    • @workflow/world@4.1.0-beta.6
    • @workflow/errors@4.1.0-beta.16
    • @workflow/world-local@4.1.0-beta.34

4.1.0-beta.35

Patch Changes

  • #1057 5e06a7c Thanks @pranaygp! - Materialize waits as entities to prevent duplicate wait_completed events

    • @workflow/core: Handle 409 conflict gracefully when creating wait_completed events, preventing crashes when multiple concurrent invocations race to complete the same wait
    • @workflow/world: Add Wait type, WaitSchema, and WaitStatusSchema exports; add optional wait field to EventResult
    • @workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states
    • @workflow/world-postgres: Add workflow_waits table with wait_status enum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
  • #1081 5487983 Thanks @TooTallNate! - Implement World.close() to stop PgBoss and close the postgres connection pool so the process can exit cleanly

  • Updated dependencies [c2b4fe9, 6e72b29, 5e06a7c, 5487983, 5487983]:

    • @workflow/errors@4.1.0-beta.16
    • @workflow/world@4.1.0-beta.5
    • @workflow/world-local@4.1.0-beta.33

4.1.0-beta.34

Patch Changes

  • Updated dependencies [63caf93]:
    • @workflow/world-local@4.1.0-beta.32

4.1.0-beta.33

Patch Changes

  • Updated dependencies [56f2221]:
    • @workflow/errors@4.1.0-beta.15
    • @workflow/world@4.1.0-beta.4
    • @workflow/world-local@4.1.0-beta.31

4.1.0-beta.32

Patch Changes

  • Updated dependencies [d9e9859]:
    • @workflow/world@4.1.0-beta.3
    • @workflow/errors@4.1.0-beta.14
    • @workflow/world-local@4.1.0-beta.30

4.1.0-beta.31

Patch Changes

  • #867 c54ba21 Thanks @TooTallNate! - Add optional writeToStreamMulti function to the World interface

  • #932 088de0a Thanks @pranaygp! - Optimize step handler performance and improve server-side validation

    • Skip initial world.steps.get() call in step handler (saves one HTTP round-trip)
    • Add server-side retryAfter validation to local and postgres worlds (HTTP 425 when not reached)
    • Fix HTTP status code for step terminal state: return 409 (Conflict) instead of 410
    • Fix race condition: await step_started event before hydration to ensure correct attempt count
  • Updated dependencies [0ce46b9, c54ba21, 088de0a, 088de0a]:

    • @workflow/world@4.1.0-beta.2
    • @workflow/world-local@4.1.0-beta.29
    • @workflow/errors@4.1.0-beta.14

4.1.0-beta.30

Minor Changes

  • #621 4966b72 Thanks @pranaygp! - BREAKING: Storage interface is now read-only; all mutations go through events.create()
    • Remove cancel, pause, resume from runs
    • Remove create, update from runs, steps, hooks
    • Add run lifecycle events: run_created, run_started, run_completed, run_failed, run_cancelled
    • Add step_created event type
    • Remove fatal field from step_failed (terminal failure is now implicit)
    • Add step_retrying event with error info for retriable failures

Patch Changes

  • #621 4966b72 Thanks @pranaygp! - Add backwards compatibility for runs created with different spec versions

    • Add RunNotSupportedError for runs requiring newer world versions
    • Add semver-based version comparison utilities
    • Legacy runs (< 4.1): route to legacy handlers
    • run_cancelled: skip event storage, directly update run
    • wait_completed: store event only (no entity mutation)
    • Unknown legacy events: throw error
  • #853 1060f9d Thanks @TooTallNate! - BREAKING CHANGE: Change user input/output to be binary data (Uint8Array) at the World interface

    This is part of specVersion 2 changes where serialization of workflow and step data uses binary format instead of JSON arrays. This allows the workflow client to be fully responsible for the data serialization format and enables future enhancements such as encryption and compression without the World implementation needing to care about the underlying data representation.

  • #621 4966b72 Thanks @pranaygp! - Remove deprecated workflow_completed, workflow_failed, and workflow_started events in favor of run_completed, run_failed, and run_started events.

  • #621 4966b72 Thanks @pranaygp! - Add specVersion property to World interface

    • All worlds expose @workflow/world package version for protocol compatibility
    • Stored in run_created event and WorkflowRun schema
    • Displayed in observability UI
  • #621 4966b72 Thanks @pranaygp! - Implement event-sourced entity creation in events.create()

    • Atomically create run/step/hook entities when processing corresponding events
    • Return hook_conflict event when hook token already exists
    • Add spec_version column to runs table
  • Updated dependencies [4966b72, 4966b72, 4966b72, 1060f9d, 4966b72, 4966b72, 57f6376, 60a9b76, 4966b72]:

    • @workflow/world@4.1.0-beta.1
    • @workflow/world-local@4.1.0-beta.28
    • @workflow/errors@4.1.0-beta.14

4.1.0-beta.29

Patch Changes

4.1.0-beta.28

Patch Changes

  • Updated dependencies [61fdb41, 0aa835f]:
    • @workflow/world@4.0.1-beta.13
    • @workflow/errors@4.0.1-beta.13
    • @workflow/world-local@4.0.1-beta.26

4.1.0-beta.27

Patch Changes

  • Updated dependencies [dd3db13]:
    • @workflow/world@4.0.1-beta.12
    • @workflow/world-local@4.0.1-beta.25
    • @workflow/errors@4.0.1-beta.13

4.1.0-beta.26

Patch Changes

  • Updated dependencies []:
    • @workflow/errors@4.0.1-beta.13
    • @workflow/world-local@4.0.1-beta.24

4.1.0-beta.25

Patch Changes

  • Updated dependencies [2dbe494]:
    • @workflow/world-local@4.0.1-beta.23

4.1.0-beta.24

Patch Changes

  • #455 e3f0390 Thanks @karthikscale3! - Added Control Flow Graph extraction from Workflows and extended manifest.json's schema to incorporate the graph structure into it. Refactored manifest generation to pass manifest as a parameter instead of using instance state. Add e2e tests for manifest validation across all builders.

  • Updated dependencies [e3f0390]:

    • @workflow/world-local@4.0.1-beta.22
    • @workflow/world@4.0.1-beta.11
    • @workflow/errors@4.0.1-beta.12

4.1.0-beta.23

Patch Changes

  • Updated dependencies [d9f6a49, c3464bf]:
    • @workflow/world-local@4.0.1-beta.21
    • @workflow/errors@4.0.1-beta.11

4.1.0-beta.22

Patch Changes

  • Updated dependencies [f2d5997]:
    • @workflow/world-local@4.0.1-beta.20

4.1.0-beta.21

Patch Changes

4.1.0-beta.20

Patch Changes

  • Updated dependencies [b56aae3]:
    • @workflow/errors@4.0.1-beta.9
    • @workflow/world-local@4.0.1-beta.18

4.1.0-beta.19

Patch Changes

  • Updated dependencies [c9b8d84]:
    • @workflow/world-local@4.0.1-beta.17
    • @workflow/errors@4.0.1-beta.8

4.1.0-beta.18

Patch Changes

  • #574 c82b467 Thanks @VaguelySerious! - Add listByRunId endpoint to Streamer interface

  • Updated dependencies [d42a968, c82b467]:

    • @workflow/world-local@4.0.1-beta.16
    • @workflow/world@4.0.1-beta.10
    • @workflow/errors@4.0.1-beta.7

4.1.0-beta.17

Patch Changes

  • Updated dependencies [48b3a12]
  • Updated dependencies [57a2c32]
    • @workflow/world-local@4.0.1-beta.15
    • @workflow/world@4.0.1-beta.9
    • @workflow/errors@4.0.1-beta.7

4.1.0-beta.16

Patch Changes

  • ef8e0e5: Increase polling interval for pg-boss to reduce interval between steps
  • 8d4562e: Rename leftover references to "embedded world" to be "local world"
  • Updated dependencies [6e8e828]
  • Updated dependencies [10c5b91]
  • Updated dependencies [bdde1bd]
  • Updated dependencies [2faddf3]
  • Updated dependencies [8d4562e]
    • @workflow/world-local@4.0.1-beta.14
    • @workflow/world@4.0.1-beta.8
    • @workflow/errors@4.0.1-beta.7

4.1.0-beta.15

Patch Changes

  • Updated dependencies [fb9fd0f]
  • Updated dependencies [40057db]
    • @workflow/world@4.0.1-beta.7
    • @workflow/world-local@4.0.1-beta.13
    • @workflow/errors@4.0.1-beta.6

4.1.0-beta.14

Patch Changes

  • Updated dependencies [edb69c3]
    • @workflow/world-local@4.0.1-beta.12
    • @workflow/errors@4.0.1-beta.6

4.1.0-beta.13

Patch Changes

  • Updated dependencies [3436629]
    • @workflow/world-local@4.0.1-beta.11

4.1.0-beta.12

Patch Changes

  • 3d99d6d: Update @vercel/oidc and @vercel/queue to fix expired OIDC token edge case
  • Updated dependencies [3d99d6d]
    • @workflow/world-local@5.0.0-beta.10

4.1.0-beta.11

Patch Changes

  • 4b70739: Require specifying runId when writing to stream
  • Updated dependencies [4b70739]
    • @workflow/world-local@5.0.0-beta.9
    • @workflow/world@4.0.1-beta.6
    • @workflow/errors@4.0.1-beta.5

4.1.0-beta.10

Patch Changes

  • 5790cb2: Use drizzle migrator
  • b97b6bf: Lock all dependencies in our packages
  • 00b0bb9: Support structured errors for steps and runs
  • a6f5545: Update migration and parse data through schemas
  • 79480f2: Clean up Hook entities after a workflow run has completed
  • Updated dependencies [aa015af]
  • Updated dependencies [00b0bb9]
  • Updated dependencies [b97b6bf]
  • Updated dependencies [00b0bb9]
  • Updated dependencies [00b0bb9]
  • Updated dependencies [79480f2]
    • @workflow/world-local@5.0.0-beta.8
    • @workflow/errors@4.0.1-beta.5
    • @workflow/world@4.0.1-beta.5

4.1.0-beta.9

Patch Changes

  • Updated dependencies [2b880f9]
  • Updated dependencies [68363b2]
    • @workflow/world-local@4.0.1-beta.7

4.1.0-beta.8

Patch Changes

  • Updated dependencies [adf0cfe]
    • @workflow/world-local@4.0.1-beta.6
    • @workflow/errors@4.0.1-beta.4

4.1.0-beta.7

Patch Changes

  • 8a82ec5: Bug fixes and test coverage for Storage.ts in Postgres World

4.1.0-beta.6

Patch Changes

  • Updated dependencies [05714f7]
    • @workflow/world-local@4.0.1-beta.5

4.1.0-beta.5

Patch Changes

  • f973954: Update license to Apache 2.0
  • Updated dependencies [10309c3]
  • Updated dependencies [f973954]
    • @workflow/world-local@4.0.1-beta.4
    • @workflow/errors@4.0.1-beta.3
    • @workflow/world@4.0.1-beta.4

4.1.0-beta.4

Minor Changes

  • 3dd25de: Exported the database schema and added a script for initializing the database with all the required tables for the setup.

Patch Changes

  • 20d51f0: Add optional retryAfter property to Step interface
  • Updated dependencies [796fafd]
  • Updated dependencies [20d51f0]
  • Updated dependencies [20d51f0]
  • Updated dependencies [70be894]
    • @workflow/errors@4.0.1-beta.2
    • @workflow/world-local@4.0.1-beta.3
    • @workflow/world@4.0.1-beta.3

4.0.1-beta.3

Patch Changes

  • ae0972f: Fix build script to include the built files

4.0.1-beta.2

Patch Changes

  • 7868434: Remove AuthProvider interface from World and associated implementations
  • Updated dependencies [d3a4ed3]
  • Updated dependencies [d3a4ed3]
  • Updated dependencies [66225bf]
  • Updated dependencies [7868434]
    • @workflow/world@4.0.1-beta.2
    • @workflow/world-local@4.0.1-beta.2

4.0.1-beta.1

Patch Changes

  • e46294f: Add "license" and "repository" fields to package.json file
  • Updated dependencies [1408293]
  • Updated dependencies [8422a32]
  • Updated dependencies [e46294f]
    • @workflow/world-local@4.0.1-beta.1
    • @workflow/errors@4.0.1-beta.1
    • @workflow/world@4.0.1-beta.1

4.0.1-beta.0

Patch Changes

  • fcf63d0: Initial publish
  • Updated dependencies [fcf63d0]
    • @workflow/world-local@4.0.1-beta.0
    • @workflow/errors@4.0.1-beta.0
    • @workflow/world@4.0.1-beta.0