Skip to content

fix(world-vercel): include runId in streams.get() request URL#1676

Merged
TooTallNate merged 2 commits into
mainfrom
fix/stream-get-runid
Apr 10, 2026
Merged

fix(world-vercel): include runId in streams.get() request URL#1676
TooTallNate merged 2 commits into
mainfrom
fix/stream-get-runid

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

Summary

  • Fix streams.get() in @workflow/world-vercel to pass runId through to getStreamUrl() instead of hardcoding undefined, which was causing all stream read requests to hit /api/v2/stream/:streamId instead of /api/v2/runs/:runId/stream/:streamId
  • Remove the fallback code path in getStreamUrl() that allowed omitting runId — the parameter is now required as string (was string | undefined)

The health check case is unaffected since it already generates a synthetic runId via generateHealthCheckRunId() — the bug was just that get() was discarding it.

Copilot AI review requested due to automatic review settings April 9, 2026 22:28
@TooTallNate TooTallNate requested a review from a team as a code owner April 9, 2026 22:28
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 9, 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 9, 2026 11:44pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 9, 2026 11:44pm
example-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-astro-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-express-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-fastify-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-hono-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-nitro-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workbench-vite-workflow Ready Ready Preview, Comment Apr 9, 2026 11:44pm
workflow-docs Ready Ready Preview, Comment, Open in v0 Apr 9, 2026 11:44pm
workflow-swc-playground Ready Ready Preview, Comment Apr 9, 2026 11:44pm

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 9, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 923 0 67 990
✅ 💻 Local Development 898 0 182 1080
✅ 📦 Local Production 898 0 182 1080
✅ 🐘 Local Postgres 898 0 182 1080
✅ 🪟 Windows 82 0 8 90
❌ 🌍 Community Worlds 133 74 24 231
✅ 📋 Other 228 0 42 270
Total 4060 74 687 4821

❌ Failed Tests

🌍 Community Worlds (74 failed)

mongodb (7 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNTA4PKZYG4N1251Y6S71D6M
  • webhookWorkflow | wrun_01KNTA5015KPX230FHJAQM4WV3
  • fetchWorkflow | wrun_01KNTA8MMM0WJ2WNFVY0EQTZ74
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNTAD1RQJF8SQN2WCZGBVDMW
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNTAMB9PZ8XHPWE76RJ3DY0H

redis (7 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNTA4PKZYG4N1251Y6S71D6M
  • webhookWorkflow | wrun_01KNTA5015KPX230FHJAQM4WV3
  • fetchWorkflow | wrun_01KNTA8MMM0WJ2WNFVY0EQTZ74
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNTAD1RQJF8SQN2WCZGBVDMW
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNTAMB9PZ8XHPWE76RJ3DY0H

turso (60 failed):

  • addTenWorkflow | wrun_01KNTA3FYJFG1NHVFKDVJXC04N
  • addTenWorkflow | wrun_01KNTA3FYJFG1NHVFKDVJXC04N
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KNTA5NH00QTWJWV6ZJDVBMHN
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KNTA3R3X9QTX85H2731MZWNT
  • promiseRaceWorkflow | wrun_01KNTA3WCJC5V0GPRJM7A65DGZ
  • promiseAnyWorkflow | wrun_01KNTA3YNDGV4KMNSM17J7NE11
  • importedStepOnlyWorkflow | wrun_01KNTA60Z6DMGTEG23HV6R8MBV
  • hookWorkflow | wrun_01KNTA4AR4AEFFWEHG71KZ7T17
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KNTA4PKZYG4N1251Y6S71D6M
  • webhookWorkflow | wrun_01KNTA5015KPX230FHJAQM4WV3
  • sleepingWorkflow | wrun_01KNTA56GV5Y3SHV4RAJQYA9SW
  • parallelSleepWorkflow | wrun_01KNTA5KV543XRHY4CQ82P0D35
  • nullByteWorkflow | wrun_01KNTA5QQVR6XAHEMJAMRBEVBW
  • workflowAndStepMetadataWorkflow | wrun_01KNTA5T1ZSWRMTY0QKN9PZMXV
  • fetchWorkflow | wrun_01KNTA8MMM0WJ2WNFVY0EQTZ74
  • promiseRaceStressTestWorkflow | wrun_01KNTA8R7MQWR6P8072F7EDEHH
  • 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_01KNTACCSGK9D7W1B06794X8WC
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KNTAD1RQJF8SQN2WCZGBVDMW
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KNTADQXC9HPY87E5XZGG0H0D
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KNTAECCHXTK520P2Z0QG9DNE
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KNTAENWAHX7VTBXHN533VSXS
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KNTAEY1YHBRHZHWWC5BX95WC
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KNTAF0C2F0KSGM3AKZDPG4KW
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KNTAFBTEQFTMD4K32SDW97VQ
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KNTAFV65AZS4WSHDGRK97WHB
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KNTAG116N27FV05KPVKPVP1H
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KNTAG8AB55F3Z6ZC0275RWSS
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KNTAGPDDR47GJVQYW6HTG17C
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KNTAGXPRRX0JS0XSQXWQZN3X
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KNTAH4JKNVAEM1E7ZK7SPXZN
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KNTAHBKY906ETP9F0DQEW95N
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KNTAHQJM1E550YWTB21G8RVH
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KNTAHZ59ZYB36SCN6MNCSSH9
  • cancelRun - cancelling a running workflow | wrun_01KNTAJ61NAN401E3HVCQTA023
  • cancelRun via CLI - cancelling a running workflow | wrun_01KNTAJFGW9RF21X89P0CGE77Z
  • 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_01KNTAJVS2757P94RSA05QGB5N
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KNTAKJFM2VGBVEGXMYWFZDBD
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KNTAKY9BZ5SNJ4JY8QWE7Q6C
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KNTAM5QFHYE69C1QCWFZRKWG
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KNTAM8KR0AT97WTPP447V2GP
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KNTAMB9PZ8XHPWE76RJ3DY0H
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KNTAMEPZB3206M692NTYHWEG

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 83 0 7
✅ example 83 0 7
✅ express 83 0 7
✅ fastify 83 0 7
✅ hono 83 0 7
✅ nextjs-turbopack 88 0 2
✅ nextjs-webpack 88 0 2
✅ nitro 83 0 7
✅ nuxt 83 0 7
✅ sveltekit 83 0 7
✅ vite 83 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 76 0 14
✅ express-stable 76 0 14
✅ fastify-stable 76 0 14
✅ hono-stable 76 0 14
✅ nextjs-turbopack-canary 63 0 27
✅ nextjs-turbopack-stable 82 0 8
✅ nextjs-webpack-canary 63 0 27
✅ nextjs-webpack-stable 82 0 8
✅ nitro-stable 76 0 14
✅ nuxt-stable 76 0 14
✅ sveltekit-stable 76 0 14
✅ vite-stable 76 0 14
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 76 0 14
✅ express-stable 76 0 14
✅ fastify-stable 76 0 14
✅ hono-stable 76 0 14
✅ nextjs-turbopack-canary 63 0 27
✅ nextjs-turbopack-stable 82 0 8
✅ nextjs-webpack-canary 63 0 27
✅ nextjs-webpack-stable 82 0 8
✅ nitro-stable 76 0 14
✅ nuxt-stable 76 0 14
✅ sveltekit-stable 76 0 14
✅ vite-stable 76 0 14
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 76 0 14
✅ express-stable 76 0 14
✅ fastify-stable 76 0 14
✅ hono-stable 76 0 14
✅ nextjs-turbopack-canary 63 0 27
✅ nextjs-turbopack-stable 82 0 8
✅ nextjs-webpack-canary 63 0 27
✅ nextjs-webpack-stable 82 0 8
✅ nitro-stable 76 0 14
✅ nuxt-stable 76 0 14
✅ sveltekit-stable 76 0 14
✅ vite-stable 76 0 14
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 82 0 8
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 6 0 0
❌ mongodb 56 7 8
✅ redis-dev 6 0 0
❌ redis 56 7 8
✅ turso-dev 6 0 0
❌ turso 3 60 8
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 76 0 14
✅ e2e-local-postgres-nest-stable 76 0 14
✅ e2e-local-prod-nest-stable 76 0 14

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 9, 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 🥇 Nitro 0.036s (+0.8%) 1.005s (~) 0.968s 10 1.00x
💻 Local Express 0.051s (+44.6% 🔺) 1.005s (~) 0.954s 10 1.39x
🐘 Postgres Express 0.058s (-19.6% 🟢) 1.010s (-1.0%) 0.952s 10 1.60x
🐘 Postgres Nitro 0.062s (+1.5%) 1.010s (~) 0.948s 10 1.70x
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.094s (-0.6%) 2.005s (~) 0.911s 10 1.00x
💻 Local Express 1.126s (+2.5%) 2.006s (~) 0.880s 10 1.03x
🐘 Postgres Nitro 1.142s (~) 2.010s (~) 0.867s 10 1.04x
🐘 Postgres Express 1.151s (~) 2.009s (~) 0.858s 10 1.05x
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.630s (~) 11.022s (~) 0.391s 3 1.00x
🐘 Postgres Express 10.906s (-0.7%) 11.023s (-2.9%) 0.118s 3 1.03x
💻 Local Express 10.927s (+2.5%) 11.023s (~) 0.096s 3 1.03x
🐘 Postgres Nitro 10.932s (+0.6%) 11.021s (~) 0.088s 3 1.03x
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 14.241s (~) 15.028s (~) 0.788s 4 1.00x
🐘 Postgres Express 14.480s (-0.9%) 15.026s (~) 0.546s 4 1.02x
🐘 Postgres Nitro 14.550s (~) 15.023s (~) 0.472s 4 1.02x
💻 Local Express 14.973s (+5.1% 🔺) 15.278s (+1.7%) 0.306s 4 1.05x
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.862s (-3.3%) 14.163s (-5.8% 🟢) 0.301s 7 1.00x
🐘 Postgres Nitro 13.959s (~) 14.163s (+1.0%) 0.204s 7 1.01x
💻 Local Nitro 14.934s (~) 15.195s (-1.1%) 0.261s 6 1.08x
💻 Local Express 16.532s (+10.9% 🔺) 17.030s (+13.3% 🔺) 0.497s 6 1.19x
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.254s (-3.0%) 2.009s (~) 0.755s 15 1.00x
🐘 Postgres Nitro 1.266s (~) 2.011s (~) 0.745s 15 1.01x
💻 Local Nitro 1.455s (-1.4%) 2.005s (~) 0.549s 15 1.16x
💻 Local Express 1.514s (+3.8%) 2.006s (~) 0.492s 15 1.21x
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.330s (~) 3.009s (~) 0.679s 10 1.00x
🐘 Postgres Express 2.355s (~) 3.010s (~) 0.655s 10 1.01x
💻 Local Nitro 2.507s (-2.1%) 3.007s (~) 0.500s 10 1.08x
💻 Local Express 2.910s (+2.4%) 3.208s (+3.2%) 0.298s 10 1.25x
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.476s (~) 4.010s (~) 0.534s 8 1.00x
🐘 Postgres Nitro 3.481s (+0.8%) 4.011s (~) 0.530s 8 1.00x
💻 Local Nitro 6.687s (-3.7%) 7.016s (-6.6% 🟢) 0.329s 5 1.92x
💻 Local Express 8.174s (+15.3% 🔺) 9.019s (+12.5% 🔺) 0.845s 4 2.35x
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.247s (-0.7%) 2.007s (~) 0.760s 15 1.00x
🐘 Postgres Nitro 1.256s (~) 2.009s (~) 0.753s 15 1.01x
💻 Local Nitro 1.481s (-2.4%) 2.005s (~) 0.524s 15 1.19x
💻 Local Express 1.537s (+4.4%) 2.006s (~) 0.469s 15 1.23x
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.344s (~) 3.010s (~) 0.667s 10 1.00x
🐘 Postgres Nitro 2.352s (+0.9%) 3.010s (~) 0.658s 10 1.00x
💻 Local Nitro 2.673s (-3.4%) 3.007s (-3.3%) 0.335s 10 1.14x
💻 Local Express 3.125s (+15.9% 🔺) 4.010s (+33.4% 🔺) 0.885s 8 1.33x
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.474s (~) 4.009s (~) 0.535s 8 1.00x
🐘 Postgres Nitro 3.494s (~) 4.011s (~) 0.517s 8 1.01x
💻 Local Nitro 7.321s (-1.7%) 8.017s (~) 0.696s 4 2.11x
💻 Local Express 8.747s (+14.4% 🔺) 9.021s (+12.5% 🔺) 0.274s 4 2.52x
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.686s (-1.3%) 1.004s (~) 0.318s 60 1.00x
🐘 Postgres Express 0.795s (-6.1% 🟢) 1.006s (-1.7%) 0.211s 60 1.16x
🐘 Postgres Nitro 0.827s (+1.4%) 1.023s (~) 0.196s 59 1.21x
💻 Local Express 0.981s (+37.9% 🔺) 1.158s (+13.4% 🔺) 0.177s 52 1.43x
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.874s (-10.1% 🟢) 2.029s (-31.1% 🟢) 0.156s 45 1.00x
🐘 Postgres Nitro 1.955s (+1.3%) 2.258s (+7.5% 🔺) 0.302s 40 1.04x
💻 Local Nitro 2.233s (-1.2%) 3.008s (~) 0.775s 30 1.19x
💻 Local Express 3.042s (+34.7% 🔺) 3.586s (+19.2% 🔺) 0.544s 26 1.62x
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.821s (-7.2% 🟢) 4.043s (-17.4% 🟢) 0.222s 30 1.00x
🐘 Postgres Nitro 4.048s (+4.4%) 4.403s (+7.1% 🔺) 0.355s 28 1.06x
💻 Local Nitro 7.287s (-0.9%) 8.014s (~) 0.727s 15 1.91x
💻 Local Express 9.357s (+27.7% 🔺) 9.941s (+24.0% 🔺) 0.584s 13 2.45x
workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.280s (-2.7%) 1.007s (~) 0.727s 60 1.00x
🐘 Postgres Express 0.286s (~) 1.007s (~) 0.721s 60 1.02x
💻 Local Nitro 0.564s (~) 1.021s (+1.7%) 0.457s 59 2.02x
💻 Local Express 0.592s (-0.9%) 1.005s (-1.6%) 0.412s 60 2.12x
workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.486s (-1.6%) 1.006s (~) 0.520s 90 1.00x
🐘 Postgres Nitro 0.495s (-1.9%) 1.006s (~) 0.511s 90 1.02x
💻 Local Nitro 2.333s (-4.0%) 3.007s (~) 0.674s 30 4.80x
💻 Local Express 2.586s (+5.0% 🔺) 3.009s (~) 0.423s 30 5.32x
workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.780s (-2.7%) 1.007s (~) 0.227s 120 1.00x
🐘 Postgres Express 0.783s (-3.6%) 1.016s (~) 0.233s 119 1.00x
💻 Local Nitro 9.939s (-3.7%) 10.691s (-2.2%) 0.752s 12 12.74x
💻 Local Express 11.201s (+5.8% 🔺) 11.845s (+7.5% 🔺) 0.644s 11 14.35x
Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.142s (~) 1.004s (~) 0.010s (-4.0%) 1.015s (~) 0.873s 10 1.00x
🐘 Postgres Express 0.199s (-7.8% 🟢) 0.994s (~) 0.002s (-6.3% 🟢) 1.009s (~) 0.811s 10 1.40x
💻 Local Express 0.203s (+43.8% 🔺) 1.004s (~) 0.012s (+24.5% 🔺) 1.018s (~) 0.815s 10 1.43x
🐘 Postgres Nitro 0.214s (~) 0.992s (~) 0.001s (~) 1.011s (~) 0.797s 10 1.51x
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.567s (-1.9%) 1.012s (~) 0.008s (-14.9% 🟢) 1.022s (~) 0.455s 59 1.00x
🐘 Postgres Express 0.589s (-8.2% 🟢) 1.004s (~) 0.004s (-2.4%) 1.022s (~) 0.433s 59 1.04x
🐘 Postgres Nitro 0.618s (~) 1.004s (~) 0.004s (+0.9%) 1.022s (~) 0.404s 59 1.09x
💻 Local Express 0.787s (+18.0% 🔺) 1.013s (~) 0.011s (+14.3% 🔺) 1.025s (-8.0% 🟢) 0.238s 59 1.39x
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.922s (-5.9% 🟢) 1.171s (-2.3%) 0.000s (+292.2% 🔺) 1.184s (-2.7%) 0.262s 51 1.00x
🐘 Postgres Nitro 0.951s (-2.9%) 1.127s (-11.7% 🟢) 0.000s (+30.2% 🔺) 1.140s (-12.8% 🟢) 0.189s 53 1.03x
💻 Local Nitro 1.141s (-3.4%) 2.019s (~) 0.000s (-20.0% 🟢) 2.021s (~) 0.880s 30 1.24x
💻 Local Express 1.251s (+6.0% 🔺) 2.022s (~) 0.001s (+88.9% 🔺) 2.024s (~) 0.773s 30 1.36x
fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.716s (-1.3%) 2.102s (-1.8%) 0.000s (-3.4%) 2.129s (-1.1%) 0.413s 29 1.00x
🐘 Postgres Express 1.792s (+1.4%) 2.173s (+1.6%) 0.000s (+3.6%) 2.206s (+2.7%) 0.415s 28 1.04x
💻 Local Nitro 3.470s (-7.7% 🟢) 4.099s (-1.6%) 0.001s (+40.0% 🔺) 4.102s (-1.6%) 0.632s 15 2.02x
💻 Local Express 3.525s (~) 4.101s (+1.7%) 0.001s (+166.7% 🔺) 4.103s (+1.8%) 0.578s 15 2.05x

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Nitro 21/21
🐘 Postgres Express 16/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 19/21
Nitro 🐘 Postgres 14/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.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 9, 2026

🦋 Changeset detected

Latest commit: 221e1b0

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

This PR includes changesets to release 17 packages
Name Type
@workflow/world-vercel Patch
@workflow/cli Patch
@workflow/core Patch
workflow Patch
@workflow/world-testing Patch
@workflow/builders Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/vitest Patch
@workflow/web-shared Patch
@workflow/ai Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
@workflow/nuxt 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

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Fixes @workflow/world-vercel stream reads by ensuring streams.get() includes the runId in the generated request URL, aligning the client with the /v2/runs/:runId/stream/:streamId endpoint shape.

Changes:

  • Make getStreamUrl() require runId: string and remove the no-runId fallback URL shape.
  • Fix streams.get() to pass through its runId parameter instead of discarding it.
  • Add a changeset for a patch release of @workflow/world-vercel.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
packages/world-vercel/src/streamer.ts Corrects stream read URL construction to include runId and removes legacy fallback path.
.changeset/fix-stream-get-runid.md Announces a patch release documenting the bug fix.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/world-vercel/src/streamer.ts
streams.get() was ignoring the runId parameter and hardcoding undefined,
causing requests to hit /api/v2/stream/:streamId instead of the correct
/api/v2/runs/:runId/stream/:streamId. Also removes the fallback path in
getStreamUrl() that allowed omitting runId.
@TooTallNate TooTallNate force-pushed the fix/stream-get-runid branch from 3a747ef to 221e1b0 Compare April 9, 2026 23:42
@TooTallNate TooTallNate enabled auto-merge (squash) April 10, 2026 00:33
@TooTallNate TooTallNate merged commit 68cf25e into main Apr 10, 2026
160 of 166 checks passed
@TooTallNate TooTallNate deleted the fix/stream-get-runid branch April 10, 2026 00:39
@ghost ghost mentioned this pull request Apr 10, 2026
@TooTallNate TooTallNate added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 10, 2026
@ghost
Copy link
Copy Markdown

ghost commented Apr 10, 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 68cf25e83bdc8bf912fb30cb8f9ba4cb9a30f087
# Fix conflicts, then:
git cherry-pick --continue
git push origin stable

@VaguelySerious VaguelySerious added backport-stable Cherry-pick this PR to the stable branch when merged and removed backport-stable Cherry-pick this PR to the stable branch when merged labels Apr 15, 2026
@ghost
Copy link
Copy Markdown

ghost commented Apr 15, 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 68cf25e83bdc8bf912fb30cb8f9ba4cb9a30f087
# Fix conflicts, then:
git cherry-pick --continue
git push origin stable

ghost pushed a commit that referenced this pull request Apr 15, 2026
* fix(world-vercel): include runId in streams.get() request URL

streams.get() was ignoring the runId parameter and hardcoding undefined,
causing requests to hit /api/v2/stream/:streamId instead of the correct
/api/v2/runs/:runId/stream/:streamId. Also removes the fallback path in
getStreamUrl() that allowed omitting runId.

* test(world-vercel): add regression test for streams.get() runId in URL
@ghost
Copy link
Copy Markdown

ghost commented Apr 15, 2026

Cherry-pick to stable had conflicts that were resolved by AI. Please review the backport PR: #1757

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.

3 participants