Skip to content

[core] [world] Fix community world E2E tests broken by specVersion bump#1658

Merged
VaguelySerious merged 3 commits intomainfrom
peter/fix-community-world-spec-version
Apr 8, 2026
Merged

[core] [world] Fix community world E2E tests broken by specVersion bump#1658
VaguelySerious merged 3 commits intomainfrom
peter/fix-community-world-spec-version

Conversation

@VaguelySerious
Copy link
Copy Markdown
Member

Summary

  • SPEC_VERSION_CURRENT was bumped to 3 in [core] [world] Gate CBOR queue transport on specVersion #1627, but community worlds (Redis, MongoDB) depend on @workflow/world v4.1.0-beta.2 where SPEC_VERSION_CURRENT is 2. Their requiresNewerWorld() check rejects runs with specVersion 3, causing every workflow execution to return 500 and the E2E community world tests to time out after 30 minutes.
  • Reverts SPEC_VERSION_CURRENT to 2 (safe baseline all worlds handle) and adds a specVersion property to the World interface so individual world implementations can declare support for higher versions. world-vercel sets specVersion: 3, preserving CBOR queue transport and resilient start without breaking community worlds.

Test plan

  • All 581 core unit tests pass
  • All world-vercel tests pass (55 tests)
  • Typecheck passes across all affected packages
  • CI: E2E Community World (Redis) passes
  • CI: E2E Community World (MongoDB) passes
  • CI: E2E Community World (Turso) continues to pass
  • CI: E2E Vercel Prod Tests pass

🤖 Generated with Claude Code

…URRENT bump

SPEC_VERSION_CURRENT was bumped to 3 in #1627, but community worlds
(Redis, MongoDB) depend on @workflow/world v4.1.0-beta.2 where
SPEC_VERSION_CURRENT is 2. Their requiresNewerWorld() check rejects
runs with specVersion 3, causing every workflow to 500 and the E2E
tests to time out.

Fix: revert SPEC_VERSION_CURRENT to 2 (safe baseline all worlds
handle) and add a `specVersion` property to the World interface so
individual worlds can declare support for higher versions.
world-vercel sets specVersion to 3, enabling CBOR queue transport
and resilient start without breaking community worlds.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@VaguelySerious VaguelySerious requested a review from a team as a code owner April 8, 2026 19:24
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 8, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Apr 8, 2026 8:05pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 8, 2026 8:05pm
example-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-astro-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-express-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-fastify-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-hono-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-nitro-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workbench-vite-workflow Ready Ready Preview, Comment Apr 8, 2026 8:05pm
workflow-docs Ready Ready Preview, Comment, Open in v0 Apr 8, 2026 8:05pm
workflow-swc-playground Ready Ready Preview, Comment Apr 8, 2026 8:05pm

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 8, 2026

🦋 Changeset detected

Latest commit: 67f2d9c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 20 packages
Name Type
@workflow/core Patch
@workflow/world Patch
@workflow/world-vercel Patch
@workflow/world-local Patch
@workflow/world-postgres Patch
@workflow/builders Patch
@workflow/cli Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/vitest Patch
@workflow/web-shared Patch
workflow Patch
@workflow/world-testing Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
@workflow/nuxt Patch
@workflow/ai Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 890 0 67 957
✅ 💻 Local Development 866 0 178 1044
✅ 📦 Local Production 866 0 178 1044
✅ 🐘 Local Postgres 866 0 178 1044
✅ 🪟 Windows 79 0 8 87
❌ 🌍 Community Worlds 136 65 24 225
✅ 📋 Other 219 0 42 261
Total 3922 65 675 4662

❌ Failed Tests

🌍 Community Worlds (65 failed)

mongodb (4 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNQB5HY10K0N9E31HQZJFFW0
  • webhookWorkflow | wrun_01KNQB5T5DXXE5BGYGBJ4HXKAJ
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNQBD5P032YVSKYAW2ACM2V6
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNQBK3M1EKRHKGK5JAZVGFF2

redis (3 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNQB5HY10K0N9E31HQZJFFW0
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNQBD5P032YVSKYAW2ACM2V6
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNQBK3M1EKRHKGK5JAZVGFF2

turso (58 failed):

  • addTenWorkflow | wrun_01KNQB4CPS7R10P413ZHRHGXDG
  • addTenWorkflow | wrun_01KNQB4CPS7R10P413ZHRHGXDG
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KNQB631R2CMT45B5R0Q24YA9
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KNQB4KKQR7MSETCSFDFFHJAT
  • promiseRaceWorkflow | wrun_01KNQB4RPDF3FW0WQ40KWA0VWS
  • promiseAnyWorkflow | wrun_01KNQB4TKEMNKD5653RVJX93C5
  • importedStepOnlyWorkflow | wrun_01KNQB6DE2WZ26V6HE1CF1QNBS
  • hookWorkflow | wrun_01KNQB57JSMNRXJN0RADKD35D4
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNQB5HY10K0N9E31HQZJFFW0
  • webhookWorkflow | wrun_01KNQB5T5DXXE5BGYGBJ4HXKAJ
  • sleepingWorkflow | wrun_01KNQB60JHC4Y0BVG3QMF5C26F
  • parallelSleepWorkflow | wrun_01KNQB6CW6ZJEDEVGJ7DSEYRZB
  • nullByteWorkflow | wrun_01KNQB6G63S43XTP7JV586FKKE
  • workflowAndStepMetadataWorkflow | wrun_01KNQB6JFDXPP7F6Z2YSE3JAD4
  • fetchWorkflow | wrun_01KNQB97DM89EN2365JKM96E4X
  • promiseRaceStressTestWorkflow | wrun_01KNQB9AC6B0JPGSKPMCFQ5JW3
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • error handling not registered WorkflowNotRegisteredError fails the run when workflow does not exist
  • error handling not registered StepNotRegisteredError fails the step but workflow can catch it
  • error handling not registered StepNotRegisteredError fails the run when not caught in workflow
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KNQBCK3NXK2ENNTWEZBCS1K0
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNQBD5P032YVSKYAW2ACM2V6
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KNQBDS4HMPW1CZREJ80E0YSA
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KNQBEBKN48G65RGVFDPAK0QJ
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KNQBEK3F6YPRW22TESZ8WXJW
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KNQBEQR738JV2CH84YPCBR6F
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KNQBET49TFEASJSD5YPDVJY4
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KNQBFAXGSVQ7H2KNZQHTASZ9
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KNQBFFQPXVY54QPF0QN2FD6D
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KNQBFNCXGBT4CPN8RH91TZ0A
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KNQBFV3CQ3A0BXSAX54HCDEN
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KNQBG18FV09WYD40KZ1NMH8T
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KNQBG83XX9BJKFMZPSE2K55A
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KNQBGEZEFGA22NBYETZYV4VK
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KNQBGRW77EWYT002MCJSPVFJ
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KNQBH272S7FSFEACDE8PXC78
  • cancelRun - cancelling a running workflow | wrun_01KNQBH7XXXAB25HQ11JCE3XB4
  • cancelRun via CLI - cancelling a running workflow | wrun_01KNQBHGA870FEX4575GC3Q7FN
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KNQBHV9EN53V1H7YZK3T3GJT
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KNQBJE0Y9V0CSKAZ8JG9JYG0
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KNQBJS5VQRJRMN3A07PC6SVA
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KNQBJZ0NNN233NS1F22C8X7R
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KNQBK1WJNT2BA6E4RVRA35DN
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNQBK3M1EKRHKGK5JAZVGFF2
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KNQBK71K3BG9X5GSZKWSN786

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 80 0 7
✅ example 80 0 7
✅ express 80 0 7
✅ fastify 80 0 7
✅ hono 80 0 7
✅ nextjs-turbopack 85 0 2
✅ nextjs-webpack 85 0 2
✅ nitro 80 0 7
✅ nuxt 80 0 7
✅ sveltekit 80 0 7
✅ vite 80 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 73 0 14
✅ express-stable 73 0 14
✅ fastify-stable 73 0 14
✅ hono-stable 73 0 14
✅ nextjs-turbopack-canary 62 0 25
✅ nextjs-turbopack-stable 79 0 8
✅ nextjs-webpack-canary 62 0 25
✅ nextjs-webpack-stable 79 0 8
✅ nitro-stable 73 0 14
✅ nuxt-stable 73 0 14
✅ sveltekit-stable 73 0 14
✅ vite-stable 73 0 14
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 73 0 14
✅ express-stable 73 0 14
✅ fastify-stable 73 0 14
✅ hono-stable 73 0 14
✅ nextjs-turbopack-canary 62 0 25
✅ nextjs-turbopack-stable 79 0 8
✅ nextjs-webpack-canary 62 0 25
✅ nextjs-webpack-stable 79 0 8
✅ nitro-stable 73 0 14
✅ nuxt-stable 73 0 14
✅ sveltekit-stable 73 0 14
✅ vite-stable 73 0 14
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 73 0 14
✅ express-stable 73 0 14
✅ fastify-stable 73 0 14
✅ hono-stable 73 0 14
✅ nextjs-turbopack-canary 62 0 25
✅ nextjs-turbopack-stable 79 0 8
✅ nextjs-webpack-canary 62 0 25
✅ nextjs-webpack-stable 79 0 8
✅ nitro-stable 73 0 14
✅ nuxt-stable 73 0 14
✅ sveltekit-stable 73 0 14
✅ vite-stable 73 0 14
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 79 0 8
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 5 0 0
❌ mongodb 58 4 8
✅ redis-dev 5 0 0
❌ redis 59 3 8
✅ turso-dev 5 0 0
❌ turso 4 58 8
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 73 0 14
✅ e2e-local-postgres-nest-stable 73 0 14
✅ e2e-local-prod-nest-stable 73 0 14

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.041s (-3.3%) 1.005s (~) 0.964s 10 1.00x
💻 Local Nitro 0.041s (-6.8% 🟢) 1.006s (~) 0.964s 10 1.02x
💻 Local Next.js (Turbopack) 0.048s 1.005s 0.957s 10 1.19x
🌐 Redis Next.js (Turbopack) 0.054s 1.005s 0.951s 10 1.32x
🐘 Postgres Express 0.058s (+5.4% 🔺) 1.010s (~) 0.952s 10 1.43x
🐘 Postgres Next.js (Turbopack) 0.059s 1.010s 0.950s 10 1.46x
🐘 Postgres Nitro 0.062s (+0.8%) 1.011s (~) 0.950s 10 1.52x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 0.226s (-47.0% 🟢) 2.487s (~) 2.262s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 1.121s 2.006s 0.885s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.126s 2.006s 0.881s 10 1.00x
💻 Local Nitro 1.129s (~) 2.006s (~) 0.877s 10 1.01x
💻 Local Express 1.130s (+0.6%) 2.006s (~) 0.876s 10 1.01x
🐘 Postgres Next.js (Turbopack) 1.139s 2.011s 0.873s 10 1.02x
🐘 Postgres Nitro 1.142s (-0.6%) 2.009s (~) 0.867s 10 1.02x
🐘 Postgres Express 1.144s (~) 2.011s (~) 0.867s 10 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.076s (-0.8%) 3.631s (-3.3%) 1.555s 10 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 10.775s 11.023s 0.248s 3 1.00x
🌐 Redis Next.js (Turbopack) 10.780s 11.024s 0.243s 3 1.00x
🐘 Postgres Next.js (Turbopack) 10.861s 11.022s 0.161s 3 1.01x
🐘 Postgres Nitro 10.893s (~) 11.022s (~) 0.129s 3 1.01x
💻 Local Nitro 10.932s (-0.7%) 11.023s (-3.0%) 0.091s 3 1.01x
🐘 Postgres Express 10.937s (~) 11.024s (~) 0.087s 3 1.02x
💻 Local Express 10.949s (~) 11.024s (~) 0.075s 3 1.02x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 17.172s (~) 19.107s (+1.3%) 1.936s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 14.335s 15.029s 0.694s 4 1.00x
🐘 Postgres Next.js (Turbopack) 14.534s 15.023s 0.489s 4 1.01x
🐘 Postgres Nitro 14.579s (~) 15.021s (~) 0.442s 4 1.02x
💻 Local Next.js (Turbopack) 14.680s 15.029s 0.349s 4 1.02x
🐘 Postgres Express 14.739s (+0.8%) 15.023s (~) 0.284s 4 1.03x
💻 Local Nitro 14.967s (-0.7%) 15.029s (-4.8%) 0.062s 4 1.04x
💻 Local Express 14.998s (~) 15.278s (+1.7%) 0.281s 4 1.05x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 34.023s (+6.0% 🔺) 36.073s (+7.0% 🔺) 2.050s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 13.480s 14.027s 0.547s 7 1.00x
🐘 Postgres Next.js (Turbopack) 13.849s 14.164s 0.315s 7 1.03x
🐘 Postgres Nitro 14.107s (~) 14.881s (+1.0%) 0.774s 7 1.05x
🐘 Postgres Express 14.290s (+1.5%) 15.020s (+1.0%) 0.730s 6 1.06x
💻 Local Next.js (Turbopack) 16.101s 17.030s 0.929s 6 1.19x
💻 Local Express 16.458s (~) 17.031s (~) 0.574s 6 1.22x
💻 Local Nitro 16.814s (-1.0%) 17.032s (-1.9%) 0.218s 6 1.25x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 57.776s (-0.5%) 59.408s (-1.6%) 1.632s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.235s 2.009s 0.774s 15 1.00x
🐘 Postgres Express 1.271s (+0.6%) 2.010s (~) 0.739s 15 1.03x
🐘 Postgres Nitro 1.276s (~) 2.011s (~) 0.735s 15 1.03x
🌐 Redis Next.js (Turbopack) 1.306s 2.006s 0.700s 15 1.06x
💻 Local Express 1.492s (-4.2%) 2.006s (-3.2%) 0.514s 15 1.21x
💻 Local Next.js (Turbopack) 1.517s 2.006s 0.489s 15 1.23x
💻 Local Nitro 1.569s (+1.0%) 2.007s (~) 0.438s 15 1.27x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.250s (-6.7% 🟢) 3.969s (-4.9%) 1.719s 8 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.347s (+0.6%) 3.010s (~) 0.664s 10 1.00x
🐘 Postgres Nitro 2.359s (~) 3.009s (~) 0.649s 10 1.01x
🐘 Postgres Next.js (Turbopack) 2.461s 3.010s 0.549s 10 1.05x
🌐 Redis Next.js (Turbopack) 2.540s 3.008s 0.468s 10 1.08x
💻 Local Next.js (Turbopack) 2.873s 3.343s 0.469s 9 1.22x
💻 Local Express 2.924s (+3.1%) 3.109s (~) 0.185s 10 1.25x
💻 Local Nitro 3.044s (-3.6%) 3.885s (-3.2%) 0.841s 8 1.30x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.756s (~) 4.314s (-12.2% 🟢) 1.558s 7 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.463s (~) 4.012s (~) 0.549s 8 1.00x
🐘 Postgres Nitro 3.505s (+1.1%) 4.014s (~) 0.509s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.654s 4.011s 0.357s 8 1.06x
🌐 Redis Next.js (Turbopack) 4.255s 5.011s 0.756s 6 1.23x
💻 Local Express 7.545s (-6.8% 🟢) 8.023s (-5.9% 🟢) 0.479s 4 2.18x
💻 Local Nitro 8.261s (-7.7% 🟢) 9.023s (-2.7%) 0.761s 4 2.39x
💻 Local Next.js (Turbopack) 8.978s 9.272s 0.295s 4 2.59x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.766s (-3.9%) 5.443s (-7.2% 🟢) 1.676s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.223s 2.008s 0.786s 15 1.00x
🐘 Postgres Nitro 1.263s (+0.9%) 2.008s (~) 0.744s 15 1.03x
🐘 Postgres Express 1.268s (+1.5%) 2.009s (~) 0.741s 15 1.04x
🌐 Redis Next.js (Turbopack) 1.426s 2.007s 0.581s 15 1.17x
💻 Local Express 1.480s (-1.8%) 2.005s (~) 0.525s 15 1.21x
💻 Local Next.js (Turbopack) 1.515s 2.006s 0.491s 15 1.24x
💻 Local Nitro 1.540s (-1.7%) 2.007s (~) 0.467s 15 1.26x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.566s (+28.2% 🔺) 4.188s (+14.1% 🔺) 1.622s 8 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.329s (~) 3.008s (~) 0.679s 10 1.00x
🐘 Postgres Nitro 2.329s (-0.5%) 3.010s (~) 0.681s 10 1.00x
🐘 Postgres Next.js (Turbopack) 2.367s 3.009s 0.642s 10 1.02x
🌐 Redis Next.js (Turbopack) 2.592s 3.008s 0.417s 10 1.11x
💻 Local Next.js (Turbopack) 2.740s 3.342s 0.602s 9 1.18x
💻 Local Express 2.943s (-16.6% 🟢) 3.342s (-22.2% 🟢) 0.399s 9 1.26x
💻 Local Nitro 3.161s (~) 3.759s (-6.3% 🟢) 0.599s 8 1.36x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.705s (-7.0% 🟢) 4.524s (-12.6% 🟢) 1.819s 7 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.485s (+0.9%) 4.010s (~) 0.525s 8 1.00x
🐘 Postgres Nitro 3.496s (+1.1%) 4.014s (~) 0.518s 8 1.00x
🐘 Postgres Next.js (Turbopack) 3.659s 4.013s 0.353s 8 1.05x
🌐 Redis Next.js (Turbopack) 4.186s 4.582s 0.397s 7 1.20x
💻 Local Express 8.557s (-3.1%) 9.023s (-2.7%) 0.465s 4 2.46x
💻 Local Nitro 8.779s (-5.6% 🟢) 9.273s (-7.5% 🟢) 0.494s 4 2.52x
💻 Local Next.js (Turbopack) 9.004s 9.519s 0.515s 4 2.58x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.129s (-13.6% 🟢) 4.846s (-12.7% 🟢) 1.717s 7 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 0.744s 1.004s 0.261s 60 1.00x
🐘 Postgres Next.js (Turbopack) 0.779s 1.023s 0.244s 59 1.05x
🐘 Postgres Nitro 0.839s (-0.5%) 1.006s (~) 0.168s 60 1.13x
💻 Local Next.js (Turbopack) 0.839s 1.005s 0.166s 60 1.13x
🐘 Postgres Express 0.877s (-1.7%) 1.040s (-1.8%) 0.164s 58 1.18x
💻 Local Nitro 0.986s (-2.9%) 1.158s (-35.7% 🟢) 0.173s 52 1.32x
💻 Local Express 1.010s (+3.7%) 1.584s (+42.0% 🔺) 0.574s 38 1.36x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 9.785s (-9.6% 🟢) 11.625s (-7.9% 🟢) 1.840s 6 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.739s 2.006s 0.267s 45 1.00x
🐘 Postgres Next.js (Turbopack) 1.889s 2.053s 0.164s 44 1.09x
🐘 Postgres Nitro 1.935s (-4.7%) 2.123s (-24.7% 🟢) 0.188s 43 1.11x
🐘 Postgres Express 2.107s (+6.7% 🔺) 2.976s (+28.6% 🔺) 0.869s 31 1.21x
💻 Local Next.js (Turbopack) 2.700s 3.041s 0.341s 30 1.55x
💻 Local Express 3.049s (+2.5%) 3.800s (+16.7% 🔺) 0.752s 24 1.75x
💻 Local Nitro 3.052s (-1.1%) 3.801s (-5.2% 🟢) 0.749s 24 1.76x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 30.218s (+1.4%) 32.174s (+2.0%) 1.956s 3 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 3.477s 4.008s 0.532s 30 1.00x
🐘 Postgres Next.js (Turbopack) 3.890s 4.076s 0.186s 30 1.12x
🐘 Postgres Nitro 4.026s (-3.6%) 4.566s (-8.9% 🟢) 0.540s 27 1.16x
🐘 Postgres Express 4.245s (+4.1%) 5.012s (+7.5% 🔺) 0.767s 24 1.22x
💻 Local Next.js (Turbopack) 8.645s 9.017s 0.372s 14 2.49x
💻 Local Express 9.006s (-0.6%) 9.478s (-0.8%) 0.472s 13 2.59x
💻 Local Nitro 9.320s (-1.2%) 10.019s (~) 0.699s 12 2.68x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 84.309s (+2.9%) 86.009s (+2.1%) 1.699s 2 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.261s 1.007s 0.746s 60 1.00x
🐘 Postgres Express 0.281s (+1.3%) 1.007s (~) 0.726s 60 1.08x
🌐 Redis Next.js (Turbopack) 0.288s 1.004s 0.716s 60 1.11x
🐘 Postgres Nitro 0.290s (+1.7%) 1.007s (~) 0.717s 60 1.11x
💻 Local Next.js (Turbopack) 0.545s 1.004s 0.460s 60 2.09x
💻 Local Express 0.580s (-2.7%) 1.004s (~) 0.424s 60 2.22x
💻 Local Nitro 0.598s (-4.0%) 1.005s (-1.7%) 0.407s 60 2.29x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.828s (-7.0% 🟢) 3.583s (-3.7%) 1.754s 18 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.478s 1.006s 0.529s 90 1.00x
🐘 Postgres Express 0.484s (~) 1.006s (~) 0.522s 90 1.01x
🐘 Postgres Nitro 0.504s (~) 1.007s (~) 0.503s 90 1.05x
🌐 Redis Next.js (Turbopack) 1.188s 2.006s 0.818s 45 2.49x
💻 Local Express 2.467s (-1.1%) 3.009s (~) 0.541s 30 5.16x
💻 Local Next.js (Turbopack) 2.541s 3.009s 0.468s 30 5.32x
💻 Local Nitro 2.560s (-1.3%) 3.009s (~) 0.449s 30 5.36x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.736s (+4.4%) 5.431s (+3.0%) 1.695s 17 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.773s 1.007s 0.234s 120 1.00x
🐘 Postgres Nitro 0.807s (+0.8%) 1.017s (~) 0.210s 118 1.04x
🐘 Postgres Express 0.821s (+2.3%) 1.009s (~) 0.189s 119 1.06x
🌐 Redis Next.js (Turbopack) 2.779s 3.007s 0.228s 40 3.60x
💻 Local Next.js (Turbopack) 10.622s 11.208s 0.586s 11 13.74x
💻 Local Express 10.785s (-2.3%) 11.118s (-3.2%) 0.334s 11 13.95x
💻 Local Nitro 11.062s (-4.2%) 11.847s (-1.5%) 0.785s 11 14.31x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 6.913s (+0.9%) 8.451s (~) 1.538s 15 1.00x
▲ Vercel Express ⚠️ missing - - - -
▲ Vercel Nitro ⚠️ missing - - - -

🔍 Observability: Next.js (Turbopack)

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 0.167s 1.003s 0.012s 1.018s 0.851s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.187s 1.001s 0.002s 1.008s 0.821s 10 1.12x
🐘 Postgres Next.js (Turbopack) 0.192s 1.001s 0.002s 1.011s 0.819s 10 1.15x
💻 Local Express 0.208s (+3.9%) 1.004s (~) 0.010s (-12.8% 🟢) 1.016s (~) 0.808s 10 1.25x
💻 Local Nitro 0.212s (-1.0%) 1.005s (~) 0.012s (-7.8% 🟢) 1.019s (~) 0.807s 10 1.27x
🐘 Postgres Nitro 0.215s (+6.9% 🔺) 0.995s (~) 0.002s (-11.8% 🟢) 1.012s (~) 0.797s 10 1.29x
🐘 Postgres Express 0.222s (+9.1% 🔺) 0.996s (~) 0.001s (~) 1.010s (~) 0.788s 10 1.33x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.832s (-43.4% 🟢) 3.075s (-36.9% 🟢) 0.484s (+27.3% 🔺) 4.005s (-29.3% 🟢) 2.174s 10 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 0.495s 1.002s 0.003s 1.011s 0.516s 60 1.00x
🐘 Postgres Nitro 0.616s (~) 1.004s (~) 0.004s (~) 1.022s (~) 0.406s 59 1.25x
🐘 Postgres Next.js (Turbopack) 0.619s 1.009s 0.005s 1.023s 0.405s 59 1.25x
🐘 Postgres Express 0.656s (~) 1.005s (~) 0.004s (-27.5% 🟢) 1.025s (~) 0.369s 59 1.33x
💻 Local Next.js (Turbopack) 0.658s 1.012s 0.009s 1.024s 0.366s 59 1.33x
💻 Local Nitro 0.728s (-4.9%) 1.011s (~) 0.010s (+0.8%) 1.023s (~) 0.295s 59 1.47x
💻 Local Express 0.763s (-5.3% 🟢) 1.012s (~) 0.010s (-1.0%) 1.024s (-8.2% 🟢) 0.261s 59 1.54x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 5.327s (+28.8% 🔺) 6.427s (+9.7% 🔺) 0.227s (-39.4% 🟢) 7.162s (+6.4% 🔺) 1.835s 9 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 0.916s 1.052s 0.000s 1.057s 0.141s 57 1.00x
🐘 Postgres Next.js (Turbopack) 0.941s 1.173s 0.000s 1.180s 0.240s 52 1.03x
🐘 Postgres Express 0.970s (+2.5%) 1.169s (-4.2%) 0.000s (+92.2% 🔺) 1.186s (-3.8%) 0.216s 51 1.06x
🐘 Postgres Nitro 0.976s (+2.8%) 1.220s (+4.8%) 0.000s (-78.8% 🟢) 1.232s (+4.1%) 0.256s 49 1.07x
💻 Local Nitro 1.237s (-5.3% 🟢) 2.022s (~) 0.000s (-50.0% 🟢) 2.024s (~) 0.786s 30 1.35x
💻 Local Next.js (Turbopack) 1.249s 2.019s 0.000s 2.022s 0.773s 30 1.36x
💻 Local Express 1.270s (-9.5% 🟢) 2.024s (~) 0.000s (+28.3% 🔺) 2.026s (-7.9% 🟢) 0.756s 30 1.39x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 3.175s (-5.3% 🟢) 4.517s (-8.1% 🟢) 0.000s (-100.0% 🟢) 4.938s (-8.0% 🟢) 1.763s 13 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.705s 2.035s 0.000s 2.039s 0.335s 30 1.00x
🐘 Postgres Express 1.764s (+1.2%) 2.142s (+1.9%) 0.000s (+55.4% 🔺) 2.154s (+1.9%) 0.390s 28 1.03x
🐘 Postgres Nitro 1.824s (+4.2%) 2.220s (+7.4% 🔺) 0.000s (-46.3% 🟢) 2.233s (+5.9% 🔺) 0.409s 27 1.07x
🐘 Postgres Next.js (Turbopack) 1.920s 2.181s 0.000s 2.189s 0.269s 28 1.13x
💻 Local Nitro 3.499s (-6.2% 🟢) 4.034s (-1.7%) 0.001s (+71.4% 🔺) 4.037s (-1.6%) 0.538s 15 2.05x
💻 Local Express 3.514s (+2.5%) 4.102s (+3.3%) 0.001s (+86.7% 🔺) 4.105s (+3.3%) 0.591s 15 2.06x
💻 Local Next.js (Turbopack) 3.700s 4.233s 0.001s 4.237s 0.537s 15 2.17x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 113.360s (+2538.4% 🔺) 114.539s (+1882.4% 🔺) 0.000s (-100.0% 🟢) 115.065s (+1728.4% 🔺) 1.705s 10 1.00x
▲ Vercel Express ⚠️ missing - - - - -
▲ Vercel Nitro ⚠️ missing - - - - -

🔍 Observability: Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 13/21
🐘 Postgres Next.js (Turbopack) 14/21
▲ Vercel Next.js (Turbopack) 21/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 18/21
Next.js (Turbopack) 🌐 Redis 8/21
Nitro 🐘 Postgres 18/21
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run


Some benchmark jobs failed:

  • Local: success
  • Postgres: success
  • Vercel: failure

Check the workflow run for details.

The previous approach (reverting to 2) broke E2E Local Dev/Prod/Postgres
tests because world-local also uses requiresNewerWorld() which rejects
specVersion > SPEC_VERSION_CURRENT.

Instead: keep SPEC_VERSION_CURRENT=3, add specVersion property to all
first-party worlds, and fall back to SPEC_VERSION_SUPPORTS_EVENT_SOURCING
(2) in start() when the world doesn't declare its version (community
worlds).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Member

@TooTallNate TooTallNate left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good fix for the community world breakage. The approach is sound: add specVersion to the World interface so worlds can declare their capability, and have start() use that instead of the global SPEC_VERSION_CURRENT constant.

What I verified

The core problem: Community worlds (Redis, MongoDB) depend on @workflow/world v4.1.0-beta.2 where SPEC_VERSION_CURRENT = 2. Their requiresNewerWorld(3) check returns true and rejects runs, causing 500s.

The fix: start() fallback chain is now opts.specVersion > world.specVersion > SPEC_VERSION_SUPPORTS_EVENT_SOURCING (2). Community worlds don't set world.specVersion, so they get the safe baseline (2). Our worlds explicitly declare their version:

  • world-vercel: SPEC_VERSION_SUPPORTS_CBOR_QUEUE_TRANSPORT (3) — enables CBOR transport + resilient start
  • world-local: SPEC_VERSION_CURRENT (3)
  • world-postgres: SPEC_VERSION_CURRENT (3)

Health check specVersion: Both handleHealthCheckMessage and withHealthCheck now pass through worldSpecVersion from getWorldHandlers(), so the health check response reflects the actual world's version rather than the global constant. This is correct — the health check is used by the CLI to determine which queue transport to use (#1629).

Event-level SPEC_VERSION_CURRENT usage: The many SPEC_VERSION_CURRENT references in step-handler.ts, runtime.ts, suspension-handler.ts, etc. are for event specVersions created during runtime execution (not run creation). These are fine — by the time the code runs, the deployment has already started and the world is the local instance.

Clarification on PR description: The description says "Reverts SPEC_VERSION_CURRENT to 2" but the constant is NOT changed — it's still 3. The change is that start() no longer defaults to SPEC_VERSION_CURRENT when the world doesn't declare its version. The description should be updated to avoid confusion.

Non-blocking

  1. The World.specVersion JSDoc says "When omitted, runs default to SPEC_VERSION_CURRENT (the lowest version all worlds are expected to support)" — but SPEC_VERSION_CURRENT is 3, and the actual fallback in start.ts is SPEC_VERSION_SUPPORTS_EVENT_SOURCING (2). The doc comment is misleading.

  2. world-local and world-postgres both set specVersion: SPEC_VERSION_CURRENT (3), which means they declare support for CBOR queue transport. This is fine since they don't use VQS and their queue implementations handle arbitrary payloads — but it's semantically a bit loose since CBOR transport is a VQS concept.

LGTM.

* features (e.g., CBOR queue transport) are enabled automatically.
* When omitted, runs default to `SPEC_VERSION_CURRENT` (the lowest
* version all worlds are expected to support).
*/
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocking: The JSDoc says "When omitted, runs default to SPEC_VERSION_CURRENT (the lowest version all worlds are expected to support)" — but SPEC_VERSION_CURRENT is 3, not 2. The actual fallback in start.ts is SPEC_VERSION_SUPPORTS_EVENT_SOURCING (2). This comment will confuse anyone reading the interface.

Suggested:

/**
 * The highest spec version this World supports.
 *
 * When set, `start()` creates runs at this version so world-specific
 * features (e.g., CBOR queue transport) are enabled automatically.
 * When omitted, runs default to `SPEC_VERSION_SUPPORTS_EVENT_SOURCING` (2),
 * the safe baseline that all worlds — including community worlds on
 * older @workflow/world versions — are expected to handle.
 */

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@VaguelySerious VaguelySerious merged commit a5c90ce into main Apr 8, 2026
99 of 102 checks passed
@VaguelySerious VaguelySerious deleted the peter/fix-community-world-spec-version branch April 8, 2026 20:15
@ghost ghost mentioned this pull request Apr 8, 2026
@VaguelySerious VaguelySerious added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 16, 2026
@ghost
Copy link
Copy Markdown

ghost commented Apr 16, 2026

Backported to stable (a5c90ce -> 2ece7ba).

ghost pushed a commit that referenced this pull request Apr 16, 2026
…mp (#1658)

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@ghost
Copy link
Copy Markdown

ghost commented Apr 16, 2026

Backport to stable failed — the cherry-pick could not be applied cleanly.

To resolve manually:

git fetch origin stable
git checkout stable
git cherry-pick a5c90cefba01070aa4bc12a696334ee4c1061f92
# Fix conflicts, then:
git cherry-pick --continue
git push origin stable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-stable Cherry-pick this PR to the stable branch when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants