Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
71 KiB
@workflow/world-local
5.0.0-beta.34
Major Changes
- #3280
de1905fThanks @VaguelySerious! - Breaking:events.listByCorrelationIdandanalytics.events.listByCorrelationIdnow require arunId. 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
- #2866
e6f1b6fThanks @NathanColosimo! - Keep Hook tokens reserved through their configured minimum retention.
Patch Changes
-
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.33
Minor Changes
- #3230
31f92dfThanks @karthikscale3! - Lazy hook resumption: on a fast path,resumeHook()writes thehook_receivedevent 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 whenWORKFLOW_DISABLE_LAZY_HOOK_RESUME=1.resumeHook()resolves to aResumedHook(aHookplus an optionalresilientResume: trueflag, 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.
Patch Changes
-
#3255
2677653Thanks @AndrewBarba! - Bound stalled local queue deliveries and redeliver their durable messages instead of waiting indefinitely. -
#3297
aa78a7eThanks @TooTallNate! - Converge a redeliveredhook_receivedre-ensure on its already-committed(runId, resumeId)claim instead of rejecting withHookNotFoundErrorwhen the hook was disposed after the resume was recorded. The rejection made the queue consumer ack the redelivery as "nothing left to resume", silently dropping any continuation the message carried. -
#3215
f05f642Thanks @AndrewBarba! - Retry transientEPERMunlink failures on Windows when deleting hook and entity JSON files. A concurrent reader briefly holding a file open madedeleteJSONthrow a share-violationEPERM, which surfaced as a failed operation — for example a failedrun.cancel()whiledeleteAllHooksForRunraced hook polling. -
Updated dependencies [
4a9d26b,1471f25,31f92df,4017597,438eaa6,ee944d2]:- @workflow/world@5.0.0-beta.24
- @workflow/errors@5.0.0-beta.15
5.0.0-beta.32
Patch Changes
-
#3142
a09d001Thanks @VaguelySerious! - Revert the static workflow world target injection: the world package is again resolved at runtime fromWORKFLOW_TARGET_WORLDinstead of being aliased into host bundles at build time. -
Updated dependencies [
a09d001]:- @workflow/utils@5.0.0-beta.8
- @workflow/errors@5.0.0-beta.14
5.0.0-beta.31
Major Changes
-
#3112
4ada27dThanks @NathanColosimo! - Remove deprecated world-specific factory aliases in favor ofcreateWorld. -
#3061
62d570eThanks @NathanColosimo! - Remove legacy step queue topics and payloads now that queued steps use the workflow topic and combined flow handler.
Minor Changes
- #3095
b4ba79eThanks @TooTallNate! - Persist and transport the new optionalencryptionPublicKeyfield on workflow runs, carried onrun_created(andrun_startedfor resilient start).
Patch Changes
-
#3144
49276f2Thanks @VaguelySerious! - Warn when the Local World starts inside a Vercel deployment, and fail with an actionable error instead of a confusingENOENTwhen its data directory cannot be created on a read-only filesystem. -
Updated dependencies [
8c12358,b4ba79e,a86035f,d24c91c,fc81f45,49276f2,62d570e,62d570e,62d570e]:- @workflow/world@5.0.0-beta.23
- @workflow/utils@5.0.0-beta.7
- @workflow/errors@5.0.0-beta.13
5.0.0-beta.30
Minor Changes
- #2915
7d29babThanks @joeyhotz! - Addruns.getMany()for retrieving ordered workflow run snapshots in one storage operation.
Patch Changes
-
#2987
850777aThanks @VaguelySerious! - Rejecthook_receivedon terminal runs, including when the termination commits concurrently (cross-process) and for legacy (pre-event-sourcing) runs. -
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.29
Minor Changes
- #2914
f72184dThanks @karthikscale3! - AddWORKFLOW_LOCAL_RECOVER_ACTIVE_RUNSenv var as a fallback for therecoverActiveRunsoption, so re-enqueueing of pending/running runs on startup can be disabled without a custom world module.
Patch Changes
- Updated dependencies [
a00d169,1933e29,6b8efd5]:- @workflow/world@5.0.0-beta.21
- @workflow/errors@5.0.0-beta.11
5.0.0-beta.28
Patch Changes
- Updated dependencies [
f2be954,ac41e7d,c31e30c,9da2d76]:- @workflow/world@5.0.0-beta.20
- @workflow/errors@5.0.0-beta.10
5.0.0-beta.27
Patch Changes
-
#2888
7a1ea5aThanks @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/errors@5.0.0-beta.10
5.0.0-beta.26
Patch Changes
-
#2876
84df8f3Thanks @karthikscale3! - Update@vercel/queuefrom 0.3.1 to 0.4.0 -
#2790
145835bThanks @NathanColosimo! - Centralize workflow event type classifiers and event-data payload field helpers. -
Updated dependencies [
f28150c,145835b,6603628]:- @workflow/world@5.0.0-beta.18
- @workflow/errors@5.0.0-beta.10
5.0.0-beta.25
Patch Changes
-
#2830
79a9813Thanks @AndrewBarba! - Fix hook operations scaling with total event history: hook creation, hook cache rebuilds, and token lookups now use durable per-token/per-hookId indexes instead of scanning the entire global event log, and run-termination hook cleanup uses per-run markers instead of reading every live hook. Directory listings read files concurrently,runs.listdefaults to a page size of 200, and compiled filename regexes are reused. -
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
-
#2808
c1d29f1Thanks @VaguelySerious! - Fix a stalled hook token claim release deleting the next claimant's live claim -
#2808
c1d29f1Thanks @VaguelySerious! - Fix aresumeHookracinghook.dispose()being recorded after the disposal, which corrupted the receiving run's replay -
#2779
7637196Thanks @VaguelySerious! - Fix hook token claims of disposed hooks and finished runs not being released to the next claimant -
#2807
e7e5a0eThanks @VaguelySerious! - Shard stream chunks into a directory per stream so a tail reader's poll no longer lists every chunk in the world on each tick, and reliably release its emitter listeners and poll timer when the reader is cancelled. Note: stream chunks are now stored atstreams/chunks/<streamName>/; chunk files written to the old flat layout by an earlier version are not read back (an acceptable tradeoff for local dev data, and stale flat files are left in place rather than cleaned up). -
#2732
239031aThanks @NathanColosimo! - Respect framework base paths when routing workflow traffic and expose health checks on generated Next.js workflow routes. -
#2752
0f557d5Thanks @ijjk! - Statically inject the configured world package into host bundles instead of selecting worlds dynamically at runtime. -
#2468
49a50e8Thanks @NathanColosimo! - Standardize first-party World packages oncreateWorld(), support relative target World modules consistently, and align the Postgres WorldDATABASE_URLfallback with bootstrap. -
Updated dependencies [
239031a,0f557d5,fe327e6]:- @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.23
Patch Changes
-
#2152
fc5bdcbThanks @pranaygp! - Reduce local sequential-step replay I/O with bounded recent-event and storage-directory caches. -
#2747
2ab7057Thanks @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. -
Updated dependencies [
f6772d9,f76377b,cc7f076,2ab7057]:- @workflow/utils@5.0.0-beta.5
- @workflow/world@5.0.0-beta.15
- @workflow/errors@5.0.0-beta.9
5.0.0-beta.22
Patch Changes
-
#2679
5977694Thanks @VaguelySerious! - Retry local queue deliveries that fail at the transport (e.g.fetch failed/ETIMEDOUTwhen the dev server is saturated by many parallel steps) instead of dropping the message, so steps no longer get stuck never-started under high local concurrency. -
#2667
d4e6c5bThanks @VaguelySerious! - Scope untagged startup recovery to untagged runs so a dev server no longer re-enqueues tagged runs (e.g. left behind by the vitest harness in a shared data directory), which previously failedrun_startedwith "did not return the run entity". -
Updated dependencies [
48e6bbf]:- @workflow/world@5.0.0-beta.14
- @workflow/errors@5.0.0-beta.8
5.0.0-beta.21
Patch Changes
- Updated dependencies [
25c3df7,d108ba3]:- @workflow/world@5.0.0-beta.13
- @workflow/errors@5.0.0-beta.8
5.0.0-beta.20
Patch Changes
-
#2534
b563126Thanks @NathanColosimo! - Updateundicito 7.28.0. -
#2475
2074f91Thanks @pranaygp! - Skip the per-step incrementalevents.listround-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.sinceCursorcontract so a step-terminalevents.createcan return the event-log delta since that cursor (viaEventResult.events/cursor/hasMore).Return the inline delta from a step-terminal write when
sinceCursoris supplied, computed identically toevents.listso the consumed prefix cannot skew from the server log.Forward
sinceCursorover the v4 wire in@workflow/world-vercelso the server can return the delta on a step-terminal response; older servers ignore it and the runtime falls back toevents.list. -
#2478
e7ef9d8Thanks @pranaygp! - Lazy inline step start: the owned-inline runtime path now sends a singlestep_startedcarrying the step input, letting the world create the step on the fly and saving one round-trip per inline step.@workflow/world:step_startedevent data accepts an optionalinput, andEventResultgains astepCreatedownership signal.@workflow/world-local:step_startedwith input atomically creates the step plus a syntheticstep_createdevent; a lazystep_startedfor an already-existing step throwsEntityConflictErrorso 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 onstep_startedover the v4 wire and threads the server'sstepCreatedsignal intoEventResult. -
#2508
1332da3Thanks @karthikscale3! - Add run IDs on world storage telemetry spans. -
Updated dependencies [
2074f91,e7ef9d8,ab2e9b8]:- @workflow/world@5.0.0-beta.12
- @workflow/errors@5.0.0-beta.8
5.0.0-beta.19
Patch Changes
- Updated dependencies [
5f0b845]:- @workflow/world@5.0.0-beta.11
- @workflow/errors@5.0.0-beta.8
5.0.0-beta.18
Patch Changes
- Updated dependencies [
926a5e7]:- @workflow/utils@5.0.0-beta.4
- @workflow/errors@5.0.0-beta.8
5.0.0-beta.17
Patch Changes
-
#2399
af859c3Thanks @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.16
Minor Changes
- #2226
ae8d6feThanks @pranaygp! - Allow passing initial run attributes throughstart(), and speed up workflow-levelsetAttributecalls by using native events for recording attributes.
Patch Changes
-
#1925
b3279f8Thanks @VaguelySerious! - V2 suspension processing: unify wait + step queue dispatch into a single parallel batch. The runtime now queues every pending operation (non-inline steps + wait timer) in onePromise.alland then inline-executes one owned step (if any). The asymmetric{ timeoutSeconds }return contract for waits is dropped from suspension processing; waits become normal queue continuations withdelaySeconds, deduplicated per wait so repeated suspension passes don't accumulate delayed messages. Continuation delays are clamped to 23h (VQS's message-retention bound) with longer waits chained across hop-keyed messages, so multi-daysleep()s work on every world. This restores inline step execution forPromise.race(step, sleep)workflows without any of the carve-outs the prior fix needed: even when the inline step blocks the handler, the wait continuation fires in parallel and drives the next replay. As part of the same change,world-local's queue now honorsdelaySeconds(matchesworld-vercel/world-postgres), and itsclose()aborts pending delayed deliveries and retry sleeps so dev-server/test shutdown isn't held open by wait timers. -
#2295
f2a7bdeThanks @TooTallNate! - Fixworld-localandworld-postgresturning duplicate processing of the samehook_created(samerunId,hookId, and token) into a self-conflict; both worlds now treat same-entity duplicates as idempotent (matchingstep_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 [
ae8d6fe]:- @workflow/world@5.0.0-beta.9
- @workflow/errors@5.0.0-beta.7
5.0.0-beta.15
Minor Changes
- #2305
4670c4bThanks @willsather! - Add an optionalnamespaceparameter 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/errors@5.0.0-beta.7
5.0.0-beta.14
Patch Changes
-
#2296
867e339Thanks @pranaygp! - Prevent concurrent readers from observing partially written local entity files. -
#2255
81bda49Thanks @ctgowrie! - Update @vercel/queue from 0.2.1 to 0.3.0
5.0.0-beta.13
Patch Changes
-
#2231
b8a337cThanks @VaguelySerious! - Updateundicito 7.26.0. -
#2246
ddc8a79Thanks @ctgowrie! - Update@vercel/queuefrom 0.1.7 to 0.2.1 -
Updated dependencies [
2a3b11b]:- @workflow/errors@5.0.0-beta.7
- @workflow/world@5.0.0-beta.7
5.0.0-beta.12
Patch Changes
- Updated dependencies [
8f68d35]:- @workflow/world@5.0.0-beta.6
- @workflow/errors@5.0.0-beta.6
5.0.0-beta.11
Patch Changes
-
#2168
3128dfcThanks @allenzhou101! - Skip past abandoned5.0.0-beta.8/9/10npm slots from the November 2025 5.x attempt so the next Changesets publish lands on a fresh5.0.0-beta.11. -
Updated dependencies [
8d0928b]:- @workflow/errors@5.0.0-beta.6
5.0.0-beta.8
Patch Changes
- #2139
65336dfThanks @pranaygp! - Reduce local stream metadata and pagination I/O by reading only EOF marker bytes and scanning chunk files once.
5.0.0-beta.7
Patch Changes
-
#2134
1e6b1fdThanks @VaguelySerious! - Addexperimental_setAttributes()workflow-level helper for attaching string key/value metadata to a workflow run, surfaced asrun.attributes -
#1799
503a929Thanks @TooTallNate! - Use inline sourcemaps for all workspace packages; published packages no longer ship external.js.mapfiles. -
#2097
657e8bbThanks @TooTallNate! - Reject dots and empty correlationId values in entity ID validation. -
Updated dependencies [
1e6b1fd,62ec537,503a929]:- @workflow/world@5.0.0-beta.5
- @workflow/errors@5.0.0-beta.5
- @workflow/utils@5.0.0-beta.3
5.0.0-beta.6
Patch Changes
-
#2038
dc0be50Thanks @pranaygp! - Refresh workflow events after completing elapsed waits so concurrent hook events preserve deterministic replay order. -
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
-
#2012
9d2a926Thanks @pranaygp! - Expose the active run ID on hook token conflict errors. -
#1985
c145bf5Thanks @pranaygp! - Improve the local queue error message when a Next.js proxy intercepts workflow routes. -
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
5f22832Thanks @TooTallNate! - BREAKING CHANGE: Run and step errors are now serialized through the workflow serialization pipeline, preserving original class identity and cause chains onWorkflowRunFailedError.cause. Pre-upgrade failed runs in theworld-postgreslegacyerrortext column surface aserror: undefinedon read; the original payload is still readable directly from theerrorJsoncolumn for manual inspection.
Patch Changes
-
#1877
92dc826Thanks @TooTallNate! - Fix race inevents.create()where concurrentstep_created/wait_createdwrites with the samecorrelationIdwould both succeed instead of one losing withEntityConflictError. -
#1895
2f52d14Thanks @VaguelySerious! - Fix local-world recovery isolation in Vitest and support custom test directories -
#1894
c1163ebThanks @VaguelySerious! - ThrowWorkflowRunNotFoundErrorwhenrun_failedis recorded against a run that doesn't exist, matching the behaviour ofworld-postgresandworld-vercel. -
Updated dependencies [
540a2ef,5374148,1203dae,1203dae,5f22832,8ea1532]:- @workflow/errors@5.0.0-beta.2
- @workflow/world@5.0.0-beta.2
- @workflow/utils@5.0.0-beta.2
5.0.0-beta.3
Patch Changes
- #1829
3ad8ee7Thanks @TooTallNate! - Fix path traversal via request-supplied IDs in theworld-localstorage backend.
5.0.0-beta.2
Patch Changes
-
#1769
5a42964Thanks @tomdale! - Embed source content in published sourcemaps. -
#1739
11cfb8fThanks @VaguelySerious! - Add filesystem polling to enable cross-process streaming in local development -
Updated dependencies [
5a42964,173756d]:- @workflow/errors@5.0.0-beta.1
- @workflow/utils@5.0.0-beta.1
5.0.0-beta.1
Major Changes
-
#1293
66d49c0Thanks @VaguelySerious! - BREAKING CHANGE: Restructure stream methods on World interface to useworld.streams.*namespace withrunIdas 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
66d49c0Thanks @VaguelySerious! - RequirerunIdargument forworld.steps.get.
Patch Changes
-
#1658
a5c90ceThanks @VaguelySerious! - Fix community world E2E tests by addingspecVersionto the World interface sostart()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/errors@5.0.0-beta.0
5.0.0-beta.0
Major Changes
- #1642
c5cdfc0Thanks @VaguelySerious! - Initial v5 beta release
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
4.1.0-beta.51
Patch Changes
-
#1533
7e70d18Thanks @VaguelySerious! - AddstreamFlushIntervalMsoption toStreamerinterface, optional for worlds to allow overwriting the default of 10ms in low-latency environments. -
#1537
c8dce52Thanks @VaguelySerious! - Allow workflow invocation to create run if initial storage call instartdid 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/errors@4.1.0-beta.20
4.1.0-beta.50
Patch Changes
-
#1605
b30b0dcThanks @VaguelySerious! - Use asymmetric ULID timestamp validation thresholds: 24h past, 5min future. -
Updated dependencies [
b30b0dc]:- @workflow/world@4.1.0-beta.16
- @workflow/errors@4.1.0-beta.20
4.1.0-beta.49
Patch Changes
- #1588
ef2218aThanks @VaguelySerious! - Fix zod v3/v4 schema mismatch crash (keyValidator._parse is not a function) by using consistentzod/v4imports in queue files that consume v4-native schemas from@workflow/world
4.1.0-beta.48
Patch Changes
-
#1569
a98f8deThanks @VaguelySerious! - Combine initial run fetch, event fetch, and run_started event creation -
#1534
329cdb3Thanks @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/errors@4.1.0-beta.20
4.1.0-beta.47
Patch Changes
- #1494
bd1f7e4Thanks @VaguelySerious! - Tidy code for stream chunk listing and metadata
4.1.0-beta.46
Patch Changes
- #1523
d1391e1Thanks @pranaygp! - Fix race condition allowing duplicatehook_disposedevents for the same hook
4.1.0-beta.45
Patch Changes
-
#1340
84599b7Thanks @pranaygp! - Add error code classification (USER_ERROR,RUNTIME_ERROR) torun_failedevents, improve queue and schema validation error logging -
#1434
d428d66Thanks @pranaygp! - Add atomic terminal-state guards to step and wait transitions usingwriteExclusivelock files. Prevents concurrentstep_completed/step_failed/wait_completedraces and blocksstep_startedon already-terminal steps. Also addscancelledtoisStepTerminal. -
#1344
beccbc4Thanks @pranaygp! - Remove VQS maxDeliveries cap and enforce max delivery limit in workflow/step handlers with graceful failure -
#1460
78f1b0eThanks @VaguelySerious! - Support negativestartIndexfor streaming (e.g.-3reads last 3 chunks) -
#1342
aee035fThanks @pranaygp! - Replace HTTP status code checks with semantic error types (EntityConflictError, RunExpiredError, ThrottleError, TooEarlyError). BREAKING CHANGE:WorkflowAPIErrorrenamed toWorkflowWorldError. -
#1470
01bbe66Thanks @VaguelySerious! - AddgetStreamChunks()andgetStreamInfo()to the Streamer interface, andgetTailIndex()to the readable stream returned byrun.getReadable().WorkflowChatTransportnow reads thex-workflow-stream-tail-indexresponse header to resolve negativeinitialStartIndexvalues 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
-
#1417
02ea057Thanks @NathanColosimo! - Remove the unused world-local queue executor API and clean up postgres queue tests. -
#1359
0f07403Thanks @VaguelySerious! - Write workflow data for vitest to the same folder as other local world runs, allowing them to be visible in observability tooling. Use a suffix-based system to ensure clearing runs on test start only affects vitest-related data. -
#1364
94c14c7Thanks @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
- #1348
9feebeeThanks @VaguelySerious! - Ensure atomicity for hook token, matches world-postgres and world-vercel
4.1.0-beta.42
Patch Changes
-
#1334
3648109Thanks @NathanColosimo! - Refactor queue handler to separate queue behavior from route call behavior and export QueueExecutor. -
Updated dependencies [
825417a]:- @workflow/world@4.1.0-beta.12
- @workflow/errors@4.1.0-beta.18
4.1.0-beta.41
Patch Changes
- #1307
4a6ddd8Thanks @TooTallNate! - Return HTTP 200 instead of 503 for queue timeout re-enqueue signals in local world
4.1.0-beta.40
Patch Changes
-
#1287
d8daa2aThanks @VaguelySerious! - Addworld.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.39
Patch Changes
- #1290
8b5a388Thanks @pranaygp! - SupporttimeoutSeconds: 0for immediate re-enqueue without arbitrary delay
4.1.0-beta.38
Patch Changes
-
#1237
456c1aaThanks @VaguelySerious! - AddregisterHandlerfunction to allow getting direct callbacks for plugins using local world -
#1273
11dcb64Thanks @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.37
Patch Changes
-
#1270
adfe8b6Thanks @pranaygp! - AddHookNotFoundErrorto@workflow/errorsand adopt it across all world backends -
#1270
adfe8b6Thanks @pranaygp! - Prevent hooks from being resumed via the public webhook endpoint by default. AddisWebhookoption tocreateHook()to opt-in to public resumption.createWebhook()always setsisWebhook: true. -
#1275
02f706fThanks @TooTallNate! - Fixhooks.list()default sort order to ascending (creation order) in world-local and world-postgres, matching world-vercel behavior. Also fix world-postgreshooks.list()to respect thesortOrderpagination parameter instead of hardcoding descending order. -
Updated dependencies [
adfe8b6,adfe8b6]:- @workflow/errors@4.1.0-beta.18
- @workflow/world@4.1.0-beta.9
4.1.0-beta.36
Patch Changes
-
#1211
1cfb8b1Thanks @VaguelySerious! - Use undici v7 Agent for HTTP/2 multiplexing and automatic retry -
#1217
e55c636Thanks @pranaygp! - Upgrade dependencies across all packages -
Updated dependencies [
e55c636]:- @workflow/utils@4.1.0-beta.13
- @workflow/world@4.1.0-beta.8
- @workflow/errors@4.1.0-beta.17
4.1.0-beta.35
Patch Changes
- Updated dependencies [
b06e491]:- @workflow/world@4.1.0-beta.7
- @workflow/errors@4.1.0-beta.16
4.1.0-beta.34
Patch Changes
- Updated dependencies [
b65bb07]:- @workflow/world@4.1.0-beta.6
- @workflow/errors@4.1.0-beta.16
4.1.0-beta.33
Patch Changes
-
#1057
5e06a7cThanks @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: AddWaittype,WaitSchema, andWaitStatusSchemaexports; add optionalwaitfield toEventResult@workflow/world-local: Materialize wait entities on wait_created/wait_completed with duplicate detection; clean up waits on terminal run states@workflow/world-postgres: Addworkflow_waitstable withwait_statusenum; materialize wait entities with conditional writes for duplicate prevention; clean up waits on terminal run states
-
#1081
5487983Thanks @TooTallNate! - ImplementWorld.close()to close the undici HTTP agent; refactor agent from module-level singleton to instance-scoped -
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
- #1020
63caf93Thanks @TooTallNate! - Stream chunk files now use .bin extension instead of .json. Backwards compatible with existing .json chunk files.
4.1.0-beta.31
Patch Changes
- Updated dependencies [
3d770d5,56f2221]:- @workflow/utils@4.1.0-beta.12
- @workflow/errors@4.1.0-beta.15
- @workflow/world@4.1.0-beta.4
4.1.0-beta.30
Patch Changes
- Updated dependencies [
d9e9859]:- @workflow/world@4.1.0-beta.3
- @workflow/errors@4.1.0-beta.14
4.1.0-beta.29
Patch Changes
-
#922
0ce46b9Thanks @pranaygp! - Add support for custom headers in queue messages -
#867
c54ba21Thanks @TooTallNate! - Add optionalwriteToStreamMultifunction to the World interface -
#932
088de0aThanks @pranaygp! - Improve OpenTelemetry tracing instrumentation- Add W3C trace context headers to step queue messages for cross-service trace linking
- Add
peer.serviceand RPC semantic conventions for external service attribution - Add
step.hydrateandstep.dehydratespans for argument serialization visibility - Add
workflow.replayspan for workflow event replay tracking - Rename
queueMessagespan toqueue.publishfollowing OTEL messaging conventions - Add OTEL baggage propagation for workflow context (
workflow.run_id,workflow.name) - Add span events for milestones:
retry.scheduled,step.skipped,step.delayed - Enhance error telemetry with
recordException()and error categorization (fatal/retryable/transient) - Use uppercase span names (WORKFLOW, STEP) for consistency with HTTP spans
- Add world-local OTEL instrumentation matching world-vercel
-
#932
088de0aThanks @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
retryAftervalidation 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_startedevent before hydration to ensure correct attempt count
- Skip initial
-
Updated dependencies [
0ce46b9,c54ba21]:- @workflow/world@4.1.0-beta.2
- @workflow/errors@4.1.0-beta.14
4.1.0-beta.28
Minor Changes
- #621
4966b72Thanks @pranaygp! - BREAKING: Storage interface is now read-only; all mutations go throughevents.create()- Remove
cancel,pause,resumefromruns - Remove
create,updatefromruns,steps,hooks - Add run lifecycle events:
run_created,run_started,run_completed,run_failed,run_cancelled - Add
step_createdevent type - Remove
fatalfield fromstep_failed(terminal failure is now implicit) - Add
step_retryingevent with error info for retriable failures
- Remove
Patch Changes
-
#621
4966b72Thanks @pranaygp! - Add backwards compatibility for runs created with different spec versions- Add
RunNotSupportedErrorfor 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 runwait_completed: store event only (no entity mutation)- Unknown legacy events: throw error
- Add
-
#853
1060f9dThanks @TooTallNate! - BREAKING CHANGE: Change user input/output to be binary data (Uint8Array) at the World interfaceThis 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
4966b72Thanks @pranaygp! - Remove deprecatedworkflow_completed,workflow_failed, andworkflow_startedevents in favor ofrun_completed,run_failed, andrun_startedevents. -
#621
4966b72Thanks @pranaygp! - AddspecVersionproperty to World interface- All worlds expose
@workflow/worldpackage version for protocol compatibility - Stored in
run_createdevent andWorkflowRunschema - Displayed in observability UI
- All worlds expose
-
#718
57f6376Thanks @VaguelySerious! - Fix package info stored in data dir showing the wrong version -
#903
60a9b76Thanks @VaguelySerious! - Increase local world concurrency limits for HTTP and queue semaphore from 100 to 1000 -
#621
4966b72Thanks @pranaygp! - Implement event-sourced entity creation inevents.create()- Atomically create run/step/hook entities when processing corresponding events
- Return
hook_conflictevent when hook token already exists - Remove direct entity mutation methods from storage
-
Updated dependencies [
4966b72,4966b72,4966b72,b16a682,1060f9d,4966b72,4966b72]:- @workflow/world@4.1.0-beta.1
- @workflow/errors@4.1.0-beta.14
- @workflow/utils@4.1.0-beta.11
4.0.1-beta.27
Patch Changes
-
#818
202c524Thanks @TooTallNate! - Add retry for filesystem operation errors on Windows -
#816
5ba82ecThanks @TooTallNate! - Add support for settingWORKFLOW_LOCAL_BASE_URLenv var -
#824
b05dbd7Thanks @TooTallNate! - Clamp setTimeout value to 32-bit integer (~25d) forsleep()
4.0.1-beta.26
Patch Changes
- Updated dependencies [
61fdb41,0aa835f]:- @workflow/world@4.0.1-beta.13
- @workflow/errors@4.0.1-beta.13
4.0.1-beta.25
Patch Changes
-
#751
dd3db13Thanks @VaguelySerious! - Remove the unused paused/resumed run events and states- Remove
run_pausedandrun_resumedevent types - Remove
pausedstatus fromWorkflowRunStatus - Remove
PauseWorkflowRunParamsandResumeWorkflowRunParamstypes - Remove
pauseWorkflowRunandresumeWorkflowRunfunctions from world-vercel
- Remove
-
Updated dependencies [
dd3db13]:- @workflow/world@4.0.1-beta.12
- @workflow/errors@4.0.1-beta.13
4.0.1-beta.24
Patch Changes
- Updated dependencies [
9b1640d]:- @workflow/utils@4.0.1-beta.10
- @workflow/errors@4.0.1-beta.13
4.0.1-beta.23
Patch Changes
- #704
2dbe494Thanks @TooTallNate! - Fix race condition in streamer when multiple writes share a promise runId.
4.0.1-beta.22
Patch Changes
-
#455
e3f0390Thanks @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/utils@4.0.1-beta.9
- @workflow/world@4.0.1-beta.11
- @workflow/errors@4.0.1-beta.12
4.0.1-beta.21
Patch Changes
-
#681
d9f6a49Thanks @VaguelySerious! - Create dataDir on app start, and record package version to enable future migrations -
#672
c3464bfThanks @TooTallNate! - Fix race condition in streamer where close events arriving during disk reads would close the controller before data was enqueued. Close events are now buffered and processed after disk reads complete. -
Updated dependencies [
0cf0ac3]:- @workflow/utils@4.0.1-beta.8
- @workflow/errors@4.0.1-beta.11
4.0.1-beta.20
Patch Changes
- #662
f2d5997Thanks @VaguelySerious! - Throw an error when trying writing JSON that fails entity validation, and remove error when trying to read JSON that fails validation, replacing it with a warning. This unblocks UI/CLI when data is invalid.
4.0.1-beta.19
Patch Changes
-
#623
ce7d428Thanks @VaguelySerious! - Fix local world not returning new items for live step pagination -
#625
712f6f8Thanks @VaguelySerious! - List implicitly passed streams forworld.listStreamsByRun -
Updated dependencies [
4bdd3e5]:- @workflow/errors@4.0.1-beta.10
4.0.1-beta.18
Patch Changes
4.0.1-beta.17
Patch Changes
-
#590
c9b8d84Thanks @adriandlam! - Improve port detection with HTTP probing -
Updated dependencies [
c9b8d84]:- @workflow/utils@4.0.1-beta.6
- @workflow/errors@4.0.1-beta.8
4.0.1-beta.16
Patch Changes
-
#568
d42a968Thanks @VaguelySerious! - Bump undici dependency to latest minor version -
#574
c82b467Thanks @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.15
Patch Changes
-
48b3a12: perf: optimize for high-concurrency workflows- Add in-memory cache for file existence checks to avoid expensive fs.access() calls
- Increase default concurrency limit from 20 to 100
- Improve HTTP connection pooling with undici Agent (100 connections, 30s keepalive)
-
Updated dependencies [
57a2c32]- @workflow/world@4.0.1-beta.9
- @workflow/errors@4.0.1-beta.7
4.0.1-beta.14
Patch Changes
6e8e828: Silently ignore stream already closed errors2faddf3: Move@workflow/errorspackage to "dependencies" instead of "devDependencies"8d4562e: Rename leftover references to "embedded world" to be "local world"- Updated dependencies [
bc9b628] - Updated dependencies [
34f3f86] - Updated dependencies [
cd451e0] - Updated dependencies [
10c5b91] - Updated dependencies [
bdde1bd]- @workflow/utils@4.0.1-beta.5
- @workflow/world@4.0.1-beta.8
- @workflow/errors@4.0.1-beta.7
4.0.1-beta.13
Patch Changes
40057db: Use a semaphore to enforce a concurrency limit on the local world queue- Updated dependencies [
fb9fd0f]- @workflow/world@4.0.1-beta.7
4.0.1-beta.12
Patch Changes
edb69c3: Fix port detection and base URL resolution for dev servers- Updated dependencies [
edb69c3]- @workflow/utils@4.0.1-beta.4
4.0.1-beta.11
Patch Changes
3436629: Fix bugs in streamer (empty chunk handling and cloning chunks)
5.0.0-beta.10
Patch Changes
3d99d6d: Update@vercel/oidcand@vercel/queueto fix expired OIDC token edge case
5.0.0-beta.9
Patch Changes
4b70739: Require specifying runId when writing to stream- Updated dependencies [
4b70739]- @workflow/world@4.0.1-beta.6
5.0.0-beta.8
Major Changes
-
aa015af: BREAKING: ChangecreateLocalWorldAPI signature from positional parameters to config object. Add baseUrl configuration support.Breaking change:
createLocalWorld(dataDir?, port?)→createLocalWorld(args?: Partial<Config>)
New features:
- Add
baseUrlconfig option for HTTPS and custom hostnames (via config orWORKFLOW_LOCAL_BASE_URLenv var) - Support for port 0 (OS-assigned port)
Patch Changes
00b0bb9: Support for structured errorsb97b6bf: Lock all dependencies in our packages79480f2: Clean up Hook entities after a workflow run has completed- Updated dependencies [
b97b6bf] - Updated dependencies [
00b0bb9]- @workflow/utils@4.0.1-beta.3
- @workflow/world@4.0.1-beta.5
4.0.1-beta.7
Patch Changes
2b880f9: Enforce uniqueness on hook "token" values68363b2: When paginating, return a cursor even at the end of the list, to allow for stable resumption
4.0.1-beta.6
Patch Changes
adf0cfe: Add automatic port discovery- Updated dependencies [
bf170ad] - Updated dependencies [
adf0cfe]- @workflow/utils@4.0.1-beta.2
4.0.1-beta.5
Patch Changes
05714f7: Add sveltekit workflow integration
4.0.1-beta.4
Patch Changes
10309c3: Fix long-running steps to not time out after 5 minutesf973954: Update license to Apache 2.0- Updated dependencies [
f973954]- @workflow/world@4.0.1-beta.4
4.0.1-beta.3
Patch Changes
20d51f0: AllowWORKFLOW_LOCAL_QUEUE_MAX_VISIBILITYenv var to set max queue visibility timeout- Updated dependencies [
20d51f0] - Updated dependencies [
70be894]- @workflow/world@4.0.1-beta.3
4.0.1-beta.2
Patch Changes
66225bf: World-local: filter by workflowName/status if passed7868434: RemoveAuthProviderinterface fromWorldand 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.jsonfile - e46294f: Add "license" and "repository" fields to
package.jsonfile - Updated dependencies [8422a32]
- Updated dependencies [e46294f]
- @workflow/world@4.0.1-beta.1
4.0.1-beta.0
Patch Changes
- fcf63d0: Initial publish
- Updated dependencies [fcf63d0]
- @workflow/world@4.0.1-beta.0