Files
github-actions[bot] e6af70b9d9 Version Packages (beta) (#3318)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 09:02:00 -07:00

82 KiB

@workflow/world-vercel

5.0.0-beta.36

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

  • #3347 8d47928 Thanks @karthikscale3! - Add a bulk run cancellation primitive. @workflow/world defines the BulkCancelWorkflowRuns* contract and an optional runs.cancelMany; @workflow/world-vercel implements it via a single POST /v4/runs/cancel; @workflow/core adds a cancelRuns helper that uses cancelMany when available and falls back to bounded-concurrency single-run cancellation.

Patch Changes

  • #3315 1222aab Thanks @pranaygp! - Update undici to 7.29.0

  • #3334 2eddf74 Thanks @VaguelySerious! - Send the run id with correlation-id event lookups so the backend can scope them to a single run.

  • #2960 79e4c04 Thanks @alangenfeld! - Re-route a queue delivery that reaches a deployment other than the one its run is pinned to, retry transient publishing failures through normal queue redelivery, and fail the run with the new DEPLOYMENT_MISMATCH error code once the recovery budget is spent.

  • #3345 9c1b3c8 Thanks @karthikscale3! - Initialize lazy hook resume replay from the hook_received write via the new advisory preloadEvents param, skipping run_started and the initial events.list; safe fallback otherwise.

  • #3360 72efc90 Thanks @elliotdauber! - Derive inline-execution duration limits from World.getRuntimeDeadline() (implemented on Vercel World via @vercel/functions).

  • Updated dependencies [8d47928, de1905f, 79e4c04, 9c1b3c8, e6f1b6f, 72efc90]:

    • @workflow/world@5.0.0-beta.25
    • @workflow/errors@5.0.0-beta.16

5.0.0-beta.35

Minor Changes

  • #3186 4a9d26b Thanks @alangenfeld! - Record the compute instance that ran each step attempt: CreateEventParams.computeInstanceId is stamped on step_started writes, forwarded in the world-vercel v4 frame meta alongside vercelId, read back on AnalyticsEvent / AnalyticsStep, and surfaced as "Compute Instance ID" in the observability attribute panel.

  • #3145 1471f25 Thanks @VaguelySerious! - Strengthen the event-creation precondition guard: replay-context writes now also send the number of loaded events, so a snapshot that is missing an event is rejected instead of committing a divergent event log, and a rejection restarts the replay in-process (consuming the events a world may attach to the rejection) rather than re-committing the rejected payload or re-invoking over the queue. @workflow/world-local and @workflow/world-postgres do not implement the check.

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

  • #3244 ee944d2 Thanks @pranaygp! - Implement getEnvironment(), reporting the environment this client's writes are attributed to from the same resolution that produces the x-vercel-environment request header.

Patch Changes

5.0.0-beta.34

Patch Changes

  • #3190 34975f6 Thanks @VaguelySerious! - Event-log requests now multiplex over a single HTTP/2 connection instead of opening one connection per in-flight request

  • #3142 a09d001 Thanks @VaguelySerious! - Revert the static workflow world target injection: the world package is again resolved at runtime from WORKFLOW_TARGET_WORLD instead of being aliased into host bundles at build time.

  • Updated dependencies []:

    • @workflow/errors@5.0.0-beta.14

5.0.0-beta.33

Major Changes

  • #3112 4ada27d Thanks @NathanColosimo! - Remove deprecated world-specific factory aliases in favor of createWorld.

  • #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! - Persist and transport the new optional encryptionPublicKey field on workflow runs, carried on run_created (and run_started for resilient start).

  • #3099 a86035f Thanks @TooTallNate! - The cross-deployment capability probe now returns the target run's public key, letting start() seal workflow arguments without a separate key-lookup request.

Patch Changes

  • #3111 8c12358 Thanks @NathanColosimo! - Clarify runtime invariants and compression behavior.

  • #3062 313a074 Thanks @karthikscale3! - Add WORKFLOW_DISABLE_ANALYTICS_READS=1 to opt the world's analytics read namespace off, forcing workflow inspect list paths onto strongly consistent primary storage. Intended for tests and tooling that read entities immediately after writing them, where the analytics store's asynchronous ingestion can return stale pages.

  • #3144 49276f2 Thanks @VaguelySerious! - Explain how to fix a build targeting the Vercel World that runs outside a Vercel deployment, where VERCEL_DEPLOYMENT_ID is missing.

  • Updated dependencies [8c12358, b4ba79e, a86035f, d24c91c, fc81f45, 62d570e, 62d570e]:

    • @workflow/world@5.0.0-beta.23
    • @workflow/errors@5.0.0-beta.13

5.0.0-beta.32

Minor Changes

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

  • #2865 a5e6f11 Thanks @NathanColosimo! - Add experimental_minRetention for keeping a Hook token unavailable after its run ends, and require supporting Worlds to advertise the hookRetention capability.

Patch Changes

  • #2986 fe12b84 Thanks @shalabhc! - Enforce a server-supplied per-run event limit (default 25K)

  • #2951 6f032d7 Thanks @karthikscale3! - Decode stable-line CBOR structured errors when reading v4 workflow events while preserving current serialized error payloads.

  • #2959 457e671 Thanks @alangenfeld! - Log the underlying queue handler error before retrying a failed delivery.

  • #3013 9078126 Thanks @NathanColosimo! - Retry transient connection timeouts so Eve can resume existing workflow runs after brief network failures.

  • #3038 59c1369 Thanks @karthikscale3! - Retry stream close on retriable 5xx. Close is idempotent on the server (unlike chunk appends, which keep their no-5xx retry policy), and the server may return retriable 503s expecting the writer to close again.

  • #2970 bb773e9 Thanks @VaguelySerious! - Add an optional capabilities?: WorldCapabilities field to the World interface so implementations can declare backend feature support (preconditionGuard, maxConcurrency) instead of the runtime inferring it from environment variables; the Vercel World declares both.

  • #2998 4ecbe7e Thanks @ruiconti! - Append caller-provided user-agent tokens to the world-vercel user-agent instead of discarding them.

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

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

5.0.0-beta.31

Minor Changes

  • #2266 a00d169 Thanks @VaguelySerious! - Add an opt-in optimistic-concurrency guard for event creation (WORKFLOW_PRECONDITION_GUARD=1): replay-context event creations send a stateUpdatedAt snapshot timestamp, and the runtime reloads the event log and retries (then falls back to a queue re-invocation) when the backend reports a newer out-of-band event with a 412 PreconditionFailedError.

  • #2929 1933e29 Thanks @VaguelySerious! - Report run-started-to-first-step (rsfs) and final-scheduling-replay (finalSchedulingReplay) latency telemetry on step completion events.

Patch Changes

5.0.0-beta.30

Patch Changes

  • #2901 9242ddb Thanks @karthikscale3! - Move client-observed stream telemetry to core: chunk_rtt on the flush span, connect_ms on the read span, and new workflow.stream.close and workflow.stream.read.complete spans. Dedupe @opentelemetry/api to one workspace instance.

5.0.0-beta.29

Minor Changes

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

  • #2193 a4d8de0 Thanks @VaguelySerious! - Add opt-in WORKFLOW_SEQUENTIAL_REPLAYS env var (also enabled by the WORKFLOW_SAFE_MODE=1 umbrella flag when not set explicitly). When set to 1, flow (orchestrator) routes are limited to one invocation per run at a time via a per-run queue topic and maxConcurrency: 1 on the flow trigger. Step routes are unaffected.

  • #1981 9da2d76 Thanks @TooTallNate! - Implement World.createRunId to mint region-tagged ULIDs, preferring an explicit options.region from start(), then the VERCEL_REGION environment variable, and finally defaulting to iad1 so run IDs are always tagged with a concrete, routable region. The queue now routes each message to the region encoded in the payload's tagged run ID (or to an explicit opts.region override), instead of the previous hard-coded iad1.

Patch Changes

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

  • Updated dependencies [f2be954, ac41e7d, c31e30c, 9da2d76]:

    • @workflow/world@5.0.0-beta.20
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.28

Patch Changes

  • #2891 4a43e39 Thanks @karthikscale3! - Emit a client-observed workflow.stream.flush span per stream-write batch, with a buffer_dwell_ms attribute separating client-side batching cost from network/server time. Log under DEBUG=workflow:* when @opentelemetry/api fails to load in world-vercel.

5.0.0-beta.27

Patch Changes

  • Updated dependencies [7a1ea5a, 0b956f6]:
    • @workflow/world@5.0.0-beta.19
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.26

Minor Changes

Patch Changes

  • #2876 84df8f3 Thanks @karthikscale3! - Update @vercel/queue from 0.3.1 to 0.4.0

  • #2873 4dce2ae Thanks @VaguelySerious! - Cancel the v4 event frame stream when a reader stops early, so the response body's undici connection returns to the pool instead of leaking.

  • #2790 145835b Thanks @NathanColosimo! - Centralize workflow event type classifiers and event-data payload field helpers.

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

  • #2857 2c6ee61 Thanks @karthikscale3! - Add stream latency to OTEL spans

  • Updated dependencies [f28150c, 145835b, 6603628]:

    • @workflow/world@5.0.0-beta.18
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.25

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.

  • Updated dependencies [3f69666, 712ed61]:

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

5.0.0-beta.24

Patch Changes

  • #2752 0f557d5 Thanks @ijjk! - Statically inject the configured world package into host bundles instead of selecting worlds dynamically at runtime.

  • #2812 fe327e6 Thanks @karthikscale3! - Support startTime/endTime on world.analytics.runs.list to bound the listing window.

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

  • #2789 03862ed Thanks @TooTallNate! - Send the x-vercel-queue-region header on proxy-mode queue sends so they route to the region's VQS dataplane host like direct in-function sends do.

  • Updated dependencies [fe327e6]:

    • @workflow/world@5.0.0-beta.16
    • @workflow/errors@5.0.0-beta.10

5.0.0-beta.23

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

  • #2680 89f4726 Thanks @karthikscale3! - Decompress gzip- and zstd-prefixed serialized data returned from Vercel Workflow storage, and route OSS web hydration through the async WASM-capable path for compressed payloads.

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

    • @workflow/world@5.0.0-beta.15
    • @workflow/errors@5.0.0-beta.9

5.0.0-beta.22

Patch Changes

  • 897aac9 - Retry transient transport failures (e.g. UND_ERR_REQ_RETRY, ECONNRESET, socket timeouts, 5xx) in-process for idempotent-on-retry event POSTs, so a brief network blip after a step completes no longer re-executes the step. step_started, step_retrying, and hook_received are excluded as they are not safe to blindly retry.

  • 603ad97 - Treat transient world-vercel transport failures as retryable, surfacing them as a TRANSPORT type WorkflowWorldError, to be retried by the queue instead of failing the run.

  • 1dcdafd - Unify world-vercel HTTP request handling into a shared core and extend OTEL client spans + debug logging to the v4 events, stream, and Vercel-API request paths.

5.0.0-beta.21

Patch Changes

  • a1cbc8b - Enable HTTP/2 for the events API and stream write requests.

  • Updated dependencies [48e6bbf]:

    • @workflow/world@5.0.0-beta.14
    • @workflow/errors@5.0.0-beta.8

5.0.0-beta.20

Patch Changes

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

  • #2424 d476d7a Thanks @VaguelySerious! - Use v3 endpoint for stream reads, which supports automatic transparent reconnects.

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

  • Updated dependencies [25c3df7, d108ba3]:

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

5.0.0-beta.19

Patch Changes

  • #2534 b563126 Thanks @NathanColosimo! - Update undici to 7.28.0.

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

  • #2508 1332da3 Thanks @karthikscale3! - Add run IDs on world storage telemetry spans.

  • #2514 fb5abbb Thanks @VaguelySerious! - Route v4 event requests through the global fetch so they appear in the Vercel observability log viewer's outgoing-requests view again.

  • #2533 90efb96 Thanks @karthikscale3! - Inject W3C trace context (traceparent/tracestate/baggage) on v4 event requests, which previously bypassed it via fetchV4 — restoring workflow-server span correlation for traffic from the flow route. No-op when no OpenTelemetry SDK is registered.

  • Updated dependencies [2074f91, e7ef9d8, ab2e9b8]:

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

5.0.0-beta.18

Patch Changes

  • #2486 26fd184 Thanks @VaguelySerious! - Honor the server's explicit pagination flag when listing run events, avoiding one extra empty-page request per event-log load on replay.

5.0.0-beta.17

Minor Changes

  • #2394 5f0b845 Thanks @pranaygp! - Advertise specVersion 5 so new Vercel runs are eligible for gzip payload compression. The workflow-server declared spec-5 support in vercel/workflow-server#520; payloads remain opaque to the server (compression is client-side). Spec 5 is a superset of spec 4, so initial run attributes still work.

Patch Changes

  • #2415 6aa1ce0 Thanks @VaguelySerious! - Skip transferring event payload bytes when listing events with resolveData: 'none' using the v4 API.

  • Updated dependencies [5f0b845]:

    • @workflow/world@5.0.0-beta.11
    • @workflow/errors@5.0.0-beta.8

5.0.0-beta.16

Minor Changes

  • #2363 926a5e7 Thanks @karthikscale3! - Add WORKFLOW_TRACE_MODE with a new linked default: each workflow/step invocation span is now its own trace root with span links to the delivery and run-origin contexts, instead of one trace spanning the entire run. world-vercel now explicitly injects W3C traceparent/tracestate/baggage headers on outgoing workflow-server requests.

    Span names are also friendlier: workflow and step spans now use the short function name (e.g. workflow.execute processOrder, step.execute chargeCard, workflow.start processOrder) instead of the uppercase prefixes and full machine names (WORKFLOW_V2 workflow//./src/jobs/order//processOrder). The full name remains available in the workflow.name / step.name span attributes, and new workflowDisplayName / stepDisplayName helpers are exported from @workflow/utils.

    Behavioral changes to telemetry under the new default (set WORKFLOW_TRACE_MODE=continuous to restore the previous trace shape exactly; the span-name change applies in both modes):

    • A run no longer shares one trace ID: the trace of the request that called start() no longer contains the workflow's execution spans — navigate via span links or the workflow.run.id attribute instead.
    • Sampling decisions are made independently per invocation root (previously one parent-based decision covered the whole run), and the number of root spans/traces increases to one per invocation.
    • workflow.execute/step.execute invocation spans (formerly WORKFLOW_V2/STEP) become parentless roots, which changes parent/child-based queries and service-map edges.
    • Re-enqueued queue messages forward the original run-origin trace carrier unchanged, rather than each invocation's current context.
    • Queries or dashboards matching the old WORKFLOW_V2 .../STEP ... span names must switch to the new names.
    • The queue-delivered workflow.execute span kind changed from internal to consumer, matching the queue-delivered step.execute span (this applies in both modes).

    Existing attributes and baggage keys are unchanged, and everything remains a no-op when no OpenTelemetry SDK is registered.

Patch Changes

  • Updated dependencies []:
    • @workflow/errors@5.0.0-beta.8

5.0.0-beta.15

Minor Changes

  • #2055 0178fa5 Thanks @VaguelySerious! - New internal API format: separately encode event metadata from user payloads. Eliminates the need for calling separate endpoints for ref resolution, which improves performance especially on longer runs.

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 [628795a]:

    • @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

  • Updated dependencies [ae8d6fe]:
    • @workflow/world@5.0.0-beta.9
    • @workflow/errors@5.0.0-beta.7

5.0.0-beta.13

Patch Changes

  • #2338 95d7009 Thanks @xujustinj! - Use vitest run instead of watch mode so local pnpm test exits cleanly.

  • Updated dependencies [4670c4b]:

    • @workflow/world@5.0.0-beta.8
    • @workflow/errors@5.0.0-beta.7

5.0.0-beta.12

Patch Changes

  • #2257 ccd37e9 Thanks @pranaygp! - Avoid unhandled run lookups for unused or empty readable streams and include Vercel request correlation headers in world transport errors.

  • #2255 81bda49 Thanks @ctgowrie! - Update @vercel/queue from 0.2.1 to 0.3.0

  • #2035 c19f38d Thanks @TooTallNate! - Validate ref resolve responses (empty, truncated, or Content-Length-mismatched bodies) before use, throwing WorkflowWorldError instead of corrupting the event log.

5.0.0-beta.11

Minor Changes

  • #2235 3a16272 Thanks @AndrewBarba! - Add a dispatcher option to createVercelWorld for supplying a custom undici dispatcher, used for both HTTP and queue requests. Defaults to the shared undici RetryAgent.

Patch Changes

5.0.0-beta.10

Patch Changes

  • #2204 7994629 Thanks @VaguelySerious! - Retry transient response-body read/decode failures (truncated or terminated streams, gateway non-CBOR bodies) on idempotent requests inside the HTTP client, so a sporadic events.list parse failure no longer surfaces as a fatal error.

  • Updated dependencies [8f68d35]:

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

5.0.0-beta.9

Patch Changes

  • Updated dependencies [8d0928b]:
    • @workflow/errors@5.0.0-beta.6

5.0.0-beta.8

Patch Changes

  • #2142 ae37315 Thanks @pranaygp! - Prevent failed stream writes from surfacing as unhandled rejections and include request correlation details in stream errors.

5.0.0-beta.7

Minor Changes

  • #1978 b0d0561 Thanks @TooTallNate! - Add @workflow/world-vercel/run-id sub-export with encode/decode helpers that produce ULID-shaped workflow run IDs carrying a tag bit, a 5-bit version, and a 6-bit Vercel region ID.

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]:

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

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.

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

  • #2060 1d3959e Thanks @pranaygp! - Record fatal world response contract failures as non-retryable workflow errors.

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

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

5.0.0-beta.5

Patch Changes

  • #1999 c43e721 Thanks @pranaygp! - Release failed VQS workflow handler messages on the configured retry cadence.

  • #1987 22b5a12 Thanks @karthikscale3! - Update to new queue client version

  • Updated dependencies [9d2a926]:

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

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.

Minor Changes

  • #1882 cd50618 Thanks @TooTallNate! - Switch the workflow-server Deployment Protection bypass to OIDC Trusted Sources. The VERCEL_WORKFLOW_SERVER_PROTECTION_BYPASS env var is no longer used; the x-vercel-trusted-oidc-idp-token header is now sourced from getVercelOidcToken().

Patch Changes

5.0.0-beta.3

Minor Changes

  • #1824 354840e Thanks @TooTallNate! - Add VERCEL_WORKFLOW_SERVER_PROTECTION_BYPASS and VERCEL_WORKFLOW_SERVER_URL env vars.

5.0.0-beta.2

Patch Changes

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

  • #1676 68cf25e Thanks @TooTallNate! - Fix streams.get() to include runId in the request URL instead of always omitting it.

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

    • @workflow/world@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/world@5.0.0-beta.0

4.1.0-beta.49

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.

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

  • #1626 5b9eb40 Thanks @VaguelySerious! - Paginate writeToStreamMulti to stay within the server's 1000 chunks per batch limit

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

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

4.1.0-beta.48

Patch Changes

  • #1602 760ebf1 Thanks @karthikscale3! - Update headers from x-workflow-run-id and x-workflow-step-id to x-vercel-workflow-run-id and x-vercel-workflow-step-id in order to align with header naming convention

  • Updated dependencies [b30b0dc]:

    • @workflow/world@4.1.0-beta.16
    • @workflow/errors@4.1.0-beta.20

4.1.0-beta.47

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

4.1.0-beta.46

Patch Changes

  • Updated dependencies [a98f8de, 6dc1b78, 329cdb3]:
    • @workflow/world@4.1.0-beta.15
    • @workflow/errors@4.1.0-beta.20

4.1.0-beta.45

Patch Changes

  • #1340 84599b7 Thanks @pranaygp! - Add error code classification (USER_ERROR, RUNTIME_ERROR) to run_failed events, improve queue and schema validation error logging

  • #1442 fdbe853 Thanks @VaguelySerious! - When DEBUG=workflow: is enabled, show API timing debug logs

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

  • #1429 741661b Thanks @VaguelySerious! - Support refs inside hook_received event payload

  • #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, 672d919, beccbc4, 78f1b0e, aee035f, 01bbe66]:

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

4.1.0-beta.44

Patch Changes

  • #1378 d6e8727 Thanks @TooTallNate! - Reorder token resolution in fetchRunKey and resolveLatestDeploymentId to prefer options.token / VERCEL_TOKEN before calling OIDC, skipping the OIDC network call when a token is already available

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

  • #1335 e902980 Thanks @VaguelySerious! - Use undici dispatcher for queue client

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

  • Updated dependencies [2f0772d, 94c14c7]:

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

4.1.0-beta.43

Patch Changes

  • #1317 825417a Thanks @TooTallNate! - Implement resolveLatestDeploymentId() that calls the Vercel API to resolve the latest deployment for the current environment

  • #1322 d5bc418 Thanks @VaguelySerious! - Encode all user-supplied IDs in URL path segments with encodeURIComponent()

  • Updated dependencies [825417a]:

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

4.1.0-beta.42

Patch Changes

  • #1262 9781afb Thanks @TooTallNate! - Use VERCEL=1 to distinguish serverless runtime from external contexts for encryption key resolution

  • #1309 d842ce1 Thanks @TooTallNate! - Include response body and status text in fetchRunKey error message for better debuggability of rate limit and server errors.

4.1.0-beta.41

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/errors@4.1.0-beta.18

4.1.0-beta.40

Patch Changes

  • #1290 8b5a388 Thanks @pranaygp! - Support timeoutSeconds: 0 for immediate re-enqueue without arbitrary delay

4.1.0-beta.39

Patch Changes

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

  • Updated dependencies [11dcb64]:

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

4.1.0-beta.38

Patch Changes

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

  • Updated dependencies [adfe8b6, adfe8b6]:

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

4.1.0-beta.37

Patch Changes

4.1.0-beta.36

Patch Changes

4.1.0-beta.35

Patch Changes

  • #1189 b224521 Thanks @TooTallNate! - Move event ref resolution from server-side to client-side to reduce memory pressure

  • 49d1b6d Thanks @VaguelySerious! - Include total blob and stream storage size of a run in the run response

  • #1174 e1a2f47 Thanks @TooTallNate! - Handle { key: null } response from the run-key API endpoint, returning undefined to signal encryption is disabled for that workflow run

  • #1183 c614456 Thanks @TooTallNate! - Pass teamId to the run-key API endpoint for team-scoped encryption key retrieval

  • #1188 b06e491 Thanks @ctgowrie! - New vercel queue client

  • Updated dependencies [b06e491]:

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

4.1.0-beta.34

Patch Changes

  • #956 b65bb07 Thanks @TooTallNate! - Implement getEncryptionKeyForRun with HKDF-SHA256 per-run key derivation and cross-deployment key resolution via fetchRunKey API

  • Updated dependencies [b65bb07]:

    • @workflow/world@4.1.0-beta.6
    • @workflow/errors@4.1.0-beta.16

4.1.0-beta.33

Patch Changes

  • #1098 7046610 Thanks @pranaygp! - Auto-inject x-workflow-run-id and x-workflow-step-id VQS headers from queue payload in world-vercel

  • #999 ea3254e Thanks @TooTallNate! - Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME)

  • #1096 29347b7 Thanks @ctgowrie! - Use new Vercel queue client with v2 message format, simplified callback handling, etc.

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

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

4.1.0-beta.32

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

  • Updated dependencies [56f2221]:

    • @workflow/errors@4.1.0-beta.15
    • @workflow/world@4.1.0-beta.4

4.1.0-beta.31

Patch Changes

  • #985 aa448c2 Thanks @VaguelySerious! - Allow overwriting backend URL via env variable

  • Updated dependencies [d9e9859]:

    • @workflow/world@4.1.0-beta.3
    • @workflow/errors@4.1.0-beta.14

4.1.0-beta.30

Patch Changes

  • #922 0ce46b9 Thanks @pranaygp! - Add support for custom headers in queue messages

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

  • #933 79e988f Thanks @pranaygp! - Add OTEL tracing for HTTP requests and storage operations using standard OTEL semantic conventions

  • #932 088de0a Thanks @pranaygp! - Improve world-vercel telemetry and event creation performance

    • Use parent application's 'workflow' tracer instead of separate service name
    • Add peer.service and RPC semantic conventions for Datadog service maps
    • Include event type in world.events.create span names (e.g., world.events.create step_started)
    • Use lazy ref resolution for fire-and-forget events to skip S3 ref resolution (~200-460ms savings)
  • Updated dependencies [0ce46b9, c54ba21]:

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

4.1.0-beta.29

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

  • #799 26a9833 Thanks @VaguelySerious! - Update queue implementation to use VQS v3

  • #844 b59559b Thanks @TooTallNate! - Submit request bodies with CBOR encoding

  • #894 a2b688d Thanks @VaguelySerious! - Fix resuming v1 hooks and cancelling/re-running v1 runs from a v2 UI or runtime

  • #833 bd8116d Thanks @TooTallNate! - Remove skipProxy and baseUrl config options, simplify proxy logic

  • #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! - 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
  • #832 b973b8d Thanks @TooTallNate! - Add support for CBOR responses

  • #621 4966b72 Thanks @pranaygp! - Route entity mutations through v2 events API

    • events.create() calls v2 endpoint for atomic entity creation
    • Remove cancel, pause, resume from storage interface
  • Updated dependencies [4966b72, 4966b72, 4966b72, 1060f9d, 4966b72, 4966b72]:

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

4.0.1-beta.28

Patch Changes

4.0.1-beta.27

Patch Changes

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

4.0.1-beta.26

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
  • Updated dependencies [dd3db13]:

    • @workflow/world@4.0.1-beta.12
    • @workflow/errors@4.0.1-beta.13

4.0.1-beta.25

Patch Changes

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

4.0.1-beta.24

Patch Changes

  • Updated dependencies [e3f0390]:
    • @workflow/world@4.0.1-beta.11
    • @workflow/errors@4.0.1-beta.12

4.0.1-beta.23

Patch Changes

  • Updated dependencies []:
    • @workflow/errors@4.0.1-beta.11

4.0.1-beta.22

Patch Changes

4.0.1-beta.21

Patch Changes

  • #639 ab55ba2 Thanks @adriandlam! - Add custom request header to bypass RSC request memoization

  • Updated dependencies [4bdd3e5]:

    • @workflow/errors@4.0.1-beta.10

4.0.1-beta.20

Patch Changes

  • #627 deaf019 Thanks @VaguelySerious! - [world-vercel] Allow skipping vercel backend proxy for e2e tests where CLI runs in runtime env

  • Updated dependencies [b56aae3]:

    • @workflow/errors@4.0.1-beta.9

4.0.1-beta.19

Patch Changes

  • Updated dependencies []:
    • @workflow/errors@4.0.1-beta.8

4.0.1-beta.18

Patch Changes

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

  • Updated dependencies [c82b467]:

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

4.0.1-beta.17

Patch Changes

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

4.0.1-beta.16

Patch Changes

  • c8fa70a: Change Vercel queue max visibility to 11 hours

4.0.1-beta.15

Patch Changes

  • e9494d5: Update @vercel/queue to use new QueueClient class to simplify custom header/path overwrites

4.0.1-beta.14

Patch Changes

  • Updated dependencies [10c5b91]
  • Updated dependencies [bdde1bd]
    • @workflow/world@4.0.1-beta.8
    • @workflow/errors@4.0.1-beta.7

4.0.1-beta.13

Patch Changes

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

4.0.1-beta.12

Patch Changes

  • 6889dac: Log warning when detecting zod v3

4.0.1-beta.11

Patch Changes

  • 2c438c3: Make queue() call backwardscompatible with zod v3 for codebases that pin zod
    • @workflow/errors@4.0.1-beta.6

4.0.1-beta.10

Patch Changes

  • 3d99d6d: Update @vercel/oidc and @vercel/queue to fix expired OIDC token edge case

4.0.1-beta.9

Patch Changes

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

4.0.1-beta.8

Patch Changes

  • b97b6bf: Lock all dependencies in our packages
  • 00b0bb9: Support structured errors for steps and runs
  • Updated dependencies [b97b6bf]
  • Updated dependencies [00b0bb9]
  • Updated dependencies [00b0bb9]
    • @workflow/errors@4.0.1-beta.5
    • @workflow/world@4.0.1-beta.5

4.0.1-beta.7

Patch Changes

4.0.1-beta.6

Patch Changes

  • @workflow/errors@4.0.1-beta.4

4.0.1-beta.5

Patch Changes

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

4.0.1-beta.4

Patch Changes

  • 20d51f0: Enforce the Vercel Queue max visibility limit
  • Updated dependencies [796fafd]
  • Updated dependencies [20d51f0]
  • Updated dependencies [70be894]
    • @workflow/errors@4.0.1-beta.2
    • @workflow/world@4.0.1-beta.3

4.0.1-beta.3

Patch Changes

  • e367046: Allow setting baseUrl and token for queue service

4.0.1-beta.2

Patch Changes

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

4.0.1-beta.1

Patch Changes

  • 1408293: Add "description" field to package.json file
  • e46294f: Add "license" and "repository" fields to package.json file
  • Updated dependencies [1408293]
  • Updated dependencies [8422a32]
  • Updated dependencies [e46294f]
    • @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/errors@4.0.1-beta.0
    • @workflow/world@4.0.1-beta.0