Files
vercel__workflow/packages/world/CHANGELOG.md
github-actions[bot] 4ecef5303e Version Packages (beta) (#2904)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-13 16:01:51 -07:00

33 KiB

@workflow/world

5.0.0-beta.20

Minor Changes

  • #2903 f2be954 Thanks @karthikscale3! - Add analytics.attributes.list() for attribute key discovery, and an attributes key=value filter to analytics.runs.list().

  • #1981 9da2d76 Thanks @TooTallNate! - Add optional createRunId(options?) to the World interface and region to QueueOptions. Worlds can now mint custom run IDs (reading whichever start-option fields they recognise) and route messages to a specific region.

Patch Changes

  • #2899 ac41e7d Thanks @TooTallNate! - Parse timezone-naive analytics timestamps as UTC so CLI and local web output shows correct times in any timezone.

  • #2896 c31e30c Thanks @TooTallNate! - Show world-specific run fields (e.g. region on Vercel) in workflow inspect output via the new optional World.describeRun hook.

5.0.0-beta.19

Patch Changes

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

  • #2882 0b956f6 Thanks @VaguelySerious! - Update doc comments to reference setAttributes (renamed from experimental_setAttributes).

5.0.0-beta.18

Minor Changes

Patch Changes

  • #2848 6603628 Thanks @VaguelySerious! - Fix duplicate inline step execution when a hook or wait wakes a run while the step is still running (#2780). The lazy step_started now records the owning queue message ID, and wake replays schedule a delayed backstop for in-flight inline steps instead of immediately re-dispatching them. Disable with WORKFLOW_INLINE_OWNERSHIP=0.

5.0.0-beta.17

Minor Changes

  • #2833 3f69666 Thanks @VaguelySerious! - Report time-to-first-step and step-to-step overhead latency telemetry on step completion events.

Patch Changes

  • #2840 712ed61 Thanks @VaguelySerious! - Add an optional reason to run cancellation (run.cancel({ cancelReason })), recorded on the cancellation event and shown in the run detail view.

5.0.0-beta.16

Patch Changes

5.0.0-beta.15

Minor Changes

  • #2234 f76377b Thanks @karthikscale3! - Add an optional metadata-only world.analytics namespace for observability reads (runs, steps, events, hooks, waits). Implemented by @workflow/world-vercel; payload-bearing fields remain on the canonical runtime storage APIs.

  • #2718 cc7f076 Thanks @VaguelySerious! - Make runtime tuning constants (timeouts, retry counts, stream buffering/reconnect) configurable via WORKFLOW_* environment variables, and forward WORKFLOW_TEST_LIMIT_OVERRIDES to the backend as a request header so a deployment can tighten server-side limits for testing.

Patch Changes

  • #2747 2ab7057 Thanks @NathanColosimo! - Keep local hooks reachable after a crash or restart by rebuilding lost hook cache files from committed hook creation events, preventing active hook tokens from being reused.

5.0.0-beta.14

Patch Changes

  • #2622 48e6bbf Thanks @karthikscale3! - Declare Zod as a runtime dependency so exported schemas are built with the package's own Zod version instead of the consuming application's peer.

5.0.0-beta.13

Patch Changes

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

  • #2569 d108ba3 Thanks @VaguelySerious! - Turbo mode now tells world-vercel to skip the run_started event-log preload it never reads, reducing request time.

5.0.0-beta.12

Patch Changes

  • #2475 2074f91 Thanks @pranaygp! - Skip the per-step incremental events.list round-trip in the inline sequential loop by consuming an event-log delta returned from the step's terminal write (gated to the single-step case with no open hooks or waits).

    Add the opt-in CreateEventParams.sinceCursor contract so a step-terminal events.create can return the event-log delta since that cursor (via EventResult.events/cursor/hasMore).

    Return the inline delta from a step-terminal write when sinceCursor is supplied, computed identically to events.list so the consumed prefix cannot skew from the server log.

    Forward sinceCursor over the v4 wire in @workflow/world-vercel so the server can return the delta on a step-terminal response; older servers ignore it and the runtime falls back to events.list.

  • #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.

  • #2511 ab2e9b8 Thanks @VaguelySerious! - Emit workflowName on per-step events (step_created, step_completed, and lazy-start step_started) so Worlds can access it without additional queries

5.0.0-beta.11

Minor Changes

  • #2394 5f0b845 Thanks @pranaygp! - Bump SPEC_VERSION_CURRENT to 5 (SPEC_VERSION_SUPPORTS_COMPRESSION): runs at spec 5+ may contain gzip-compressed payloads, and older SDKs reject them via requiresNewerWorld() instead of failing on individual payloads.

5.0.0-beta.10

Minor Changes

  • #2385 628795a Thanks @pranaygp! - Add an allowReservedAttributes option to start() so framework-level callers can seed reserved $-prefixed run attributes at creation, matching the existing experimental_setAttributes option. The flag is carried through the resilient-start queue input so lazy run creation validates identically.

5.0.0-beta.9

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.

5.0.0-beta.8

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.

5.0.0-beta.7

Patch Changes

  • #2212 2a3b11b Thanks @pranaygp! - Retry transient workflow replay divergence before classifying repeated divergence as a corrupted event log.

5.0.0-beta.6

Patch Changes

  • #2191 8f68d35 Thanks @pranaygp! - Fix forwarded writable stream encryption when child workflows execute on a newer deployment than their parent.

5.0.0-beta.5

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

  • #1979 62ec537 Thanks @adamiBs! - Make run.input and step.input .optional() on the World snapshot schemas so consumers no longer fail validation when the service externalizes payloads as RemoteRef blobs.

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

5.0.0-beta.4

Patch Changes

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

  • #2046 ad71b58 Thanks @pranaygp! - Report corrupted event logs with a distinct CorruptedEventLogError type and CORRUPTED_EVENT_LOG run error code.

  • #2030 b124365 Thanks @pranaygp! - Validate step, wait, and hook lifecycle events against replay ownership metadata.

  • #2013 2a446af Thanks @TooTallNate! - Exclude inline step execution from the workflow replay timeout. Long-running steps no longer hit REPLAY_TIMEOUT (fixes #2009). Adds a WORKFLOW_REPLAY_TIMEOUT_MS env var override and a new optional World.processExitTriggersQueueRedelivery capability used to gate the runtime's process.exit(1) failure path.

5.0.0-beta.3

Patch Changes

5.0.0-beta.2

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

  • #1939 5374148 Thanks @TooTallNate! - Fix compatibility with Zod 4.4.x in WorkflowRunSchema by marking output, error, and completedAt as .optional() on non-final / cancelled / completed / failed run states.

  • #1338 8ea1532 Thanks @VaguelySerious! - Merge flow and step routes into a single combined handler that executes steps inline when possible, reducing function invocations and queue overhead.

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

5.0.0-beta.0

Major Changes

4.1.0-beta.17

Patch Changes

  • #1627 5f138f2 Thanks @VaguelySerious! - Bump specVersion to 3 and gate CBOR queue transport on spec version. Old deployments (specVersion < 3) receive JSON queue messages; new deployments receive CBOR. Handler uses dual transport to deserialize both formats. Fixes replay/reenqueue from dashboard to older deployments.

  • #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.

4.1.0-beta.16

Patch Changes

4.1.0-beta.15

Patch Changes

4.1.0-beta.14

Patch Changes

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

  • #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.

4.1.0-beta.13

Patch Changes

  • #1396 2f0772d Thanks @karthikscale3! - Track Vercel request IDs (x-vercel-id) on all workflow events for correlating request logs with workflow executions

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

4.1.0-beta.12

Patch Changes

  • #1317 825417a Thanks @TooTallNate! - Add optional resolveLatestDeploymentId() method to the World interface for resolving the most recent deployment ID for the current deployment's environment

4.1.0-beta.11

Patch Changes

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

4.1.0-beta.10

Patch Changes

4.1.0-beta.9

Patch Changes

  • #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.

4.1.0-beta.8

Patch Changes

4.1.0-beta.7

Patch Changes

4.1.0-beta.6

Patch Changes

  • #956 b65bb07 Thanks @TooTallNate! - Overload getEncryptionKeyForRun interface: accept WorkflowRun (preferred) or runId string with optional opaque world-specific context for start()

4.1.0-beta.5

Patch Changes

  • #979 6e72b29 Thanks @TooTallNate! - Add World.getEncryptionKeyForRun() and thread encryption key through serialization layer

  • #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! - Add optional close() method to the World interface for releasing resources held by a World implementation

4.1.0-beta.4

Patch Changes

  • #966 56f2221 Thanks @VaguelySerious! - Add 429 throttle retry handling and 500 server error retry with exponential backoff to the workflow and step runtimes

4.1.0-beta.3

Patch Changes

  • #954 d9e9859 Thanks @TooTallNate! - Generate runId client-side in start() and simplify runId types

    The runId is now generated client-side using ULID before serialization, rather than waiting for the server response. This simplifies the Streamer interface and WorkflowServerWritableStream to accept string instead of string | Promise<string> for runId.

4.1.0-beta.2

Patch Changes

4.1.0-beta.1

Minor 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
  • #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 hook_conflict event type for duplicate token detection

    • World returns hook_conflict event when hook_created uses an existing token
    • Add HOOK_CONFLICT error slug
  • #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

4.0.1-beta.13

Patch Changes

4.0.1-beta.12

Patch Changes

  • #751 dd3db13 Thanks @VaguelySerious! - Remove the unused paused/resumed run events and states
    • Remove run_paused and run_resumed event types
    • Remove paused status from WorkflowRunStatus
    • Remove PauseWorkflowRunParams and ResumeWorkflowRunParams types
    • Remove pauseWorkflowRun and resumeWorkflowRun functions from world-vercel

4.0.1-beta.11

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.

4.0.1-beta.10

Patch Changes

4.0.1-beta.9

Patch Changes

  • 57a2c32: Add expiredAt attribute to Run

4.0.1-beta.8

Patch Changes

  • 10c5b91: Export QueueOptions type
  • bdde1bd: track queue overhead with opentelemetry

4.0.1-beta.7

Patch Changes

  • fb9fd0f: Add support for closure scope vars in step functions

4.0.1-beta.6

Patch Changes

  • 4b70739: Require specifying runId when writing to stream

4.0.1-beta.5

Patch Changes

  • 00b0bb9: Add error stack propogation to steps and runs

4.0.1-beta.4

Patch Changes

  • f973954: Update license to Apache 2.0

4.0.1-beta.3

Patch Changes

  • 20d51f0: Add optional retryAfter property to Step interface
  • 70be894: Implement sleep() natively into the workflow runtime

4.0.1-beta.2

Patch Changes

  • d3a4ed3: Remove @types/json-schema dependency (not used)
  • d3a4ed3: Remove @types/node from being a peerDependency
  • 7868434: Remove AuthProvider interface from World and associated implementations

4.0.1-beta.1

Patch Changes

  • 8422a32: Update Workflow naming convention
  • e46294f: Add "license" and "repository" fields to package.json file

4.0.1-beta.0

Patch Changes

  • fcf63d0: Initial publish