Skip to content

Guard fibonacciWorkflow against non-finite numbers#1814

Merged
TooTallNate merged 1 commit into
mainfrom
guard-fibonacci-workflow
Apr 21, 2026
Merged

Guard fibonacciWorkflow against non-finite numbers#1814
TooTallNate merged 1 commit into
mainfrom
guard-fibonacci-workflow

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

Summary

Throw a FatalError at the top of fibonacciWorkflow if n is not a finite number.

The workflow recurses via start(fibonacciWorkflow, [n - 1]) / start(fibonacciWorkflow, [n - 2]) with a base case of if (n <= 1) return n. If n is ever undefined / NaN, that base case never fires (NaN <= 1 === false), and every descendant does the same — spawning two more children. This is a defensive guard that fails the run immediately instead of amplifying.

Change

export async function fibonacciWorkflow(n: number): Promise<number> {
  'use workflow';
  if (!Number.isFinite(n)) {
    throw new FatalError(`fibonacciWorkflow requires a finite number for n`);
  }
  if (n <= 1) return n;
  // …
}

Only touches workbench/example/workflows/99_e2e.ts. No changeset needed (workbench files aren't published).

Throw a FatalError at the top of fibonacciWorkflow if n is not a finite
number. Prevents a runaway recursion if the workflow is ever invoked
without its numeric argument — NaN - 1 === NaN, NaN <= 1 === false, so
the base case would never fire and every descendant would spawn two
more children.
Copilot AI review requested due to automatic review settings April 20, 2026 19:55
@TooTallNate TooTallNate requested a review from a team as a code owner April 20, 2026 19:55
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 20, 2026

⚠️ No Changeset found

Latest commit: 7ec56ba

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

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

@vercel vercel Bot temporarily deployed to Preview – workflow-docs April 20, 2026 19:55 Inactive
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 20, 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 20, 2026 7:58pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 20, 2026 7:58pm
example-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-astro-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-express-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-fastify-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-hono-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-nitro-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workbench-vite-workflow Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workflow-swc-playground Ready Ready Preview, Comment Apr 20, 2026 7:58pm
workflow-web Ready Ready Preview, Comment Apr 20, 2026 7:58pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
workflow-docs Skipped Skipped Apr 20, 2026 7:58pm

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 20, 2026

🧪 E2E Test Results

All tests passed

Summary

Passed Failed Skipped Total
✅ 💻 Local Development 1018 0 86 1104
✅ 📦 Local Production 1018 0 86 1104
✅ 🐘 Local Postgres 1018 0 86 1104
✅ 🪟 Windows 92 0 0 92
✅ 📋 Other 258 0 18 276
Total 3404 0 276 3680

Details by Category

✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 86 0 6
✅ express-stable 86 0 6
✅ fastify-stable 86 0 6
✅ hono-stable 86 0 6
✅ nextjs-turbopack-canary 73 0 19
✅ nextjs-turbopack-stable 92 0 0
✅ nextjs-webpack-canary 73 0 19
✅ nextjs-webpack-stable 92 0 0
✅ nitro-stable 86 0 6
✅ nuxt-stable 86 0 6
✅ sveltekit-stable 86 0 6
✅ vite-stable 86 0 6
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 86 0 6
✅ express-stable 86 0 6
✅ fastify-stable 86 0 6
✅ hono-stable 86 0 6
✅ nextjs-turbopack-canary 73 0 19
✅ nextjs-turbopack-stable 92 0 0
✅ nextjs-webpack-canary 73 0 19
✅ nextjs-webpack-stable 92 0 0
✅ nitro-stable 86 0 6
✅ nuxt-stable 86 0 6
✅ sveltekit-stable 86 0 6
✅ vite-stable 86 0 6
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 86 0 6
✅ express-stable 86 0 6
✅ fastify-stable 86 0 6
✅ hono-stable 86 0 6
✅ nextjs-turbopack-canary 73 0 19
✅ nextjs-turbopack-stable 92 0 0
✅ nextjs-webpack-canary 73 0 19
✅ nextjs-webpack-stable 92 0 0
✅ nitro-stable 86 0 6
✅ nuxt-stable 86 0 6
✅ sveltekit-stable 86 0 6
✅ vite-stable 86 0 6
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 92 0 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 86 0 6
✅ e2e-local-postgres-nest-stable 86 0 6
✅ e2e-local-prod-nest-stable 86 0 6

📋 View full workflow run


Some E2E test jobs failed:

  • Vercel Prod: failure
  • Local Dev: success
  • Local Prod: success
  • Local Postgres: success
  • Windows: success

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 20, 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.034s (-20.4% 🟢) 1.005s (~) 0.970s 10 1.00x
💻 Local Express 0.043s (-2.7%) 1.005s (~) 0.962s 10 1.26x
💻 Local Next.js (Turbopack) 0.051s 1.006s 0.955s 10 1.48x
🐘 Postgres Next.js (Turbopack) 0.056s 1.010s 0.955s 10 1.62x
🐘 Postgres Express 0.060s (+2.9%) 1.010s (~) 0.950s 10 1.74x
🐘 Postgres Nitro 0.061s (-36.1% 🟢) 1.009s (-3.2%) 0.949s 10 1.77x
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.098s (-2.9%) 2.007s (~) 0.909s 10 1.00x
💻 Local Next.js (Turbopack) 1.115s 2.006s 0.891s 10 1.02x
💻 Local Express 1.125s (~) 2.005s (~) 0.881s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.132s 2.009s 0.877s 10 1.03x
🐘 Postgres Express 1.137s (-0.8%) 2.009s (~) 0.872s 10 1.04x
🐘 Postgres Nitro 1.139s (~) 2.009s (~) 0.870s 10 1.04x
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.673s (-2.5%) 11.023s (~) 0.350s 3 1.00x
💻 Local Next.js (Turbopack) 10.832s 11.025s 0.193s 3 1.01x
🐘 Postgres Nitro 10.852s (~) 11.016s (~) 0.165s 3 1.02x
🐘 Postgres Next.js (Turbopack) 10.869s 11.024s 0.155s 3 1.02x
🐘 Postgres Express 10.870s (-0.9%) 11.023s (~) 0.153s 3 1.02x
💻 Local Express 10.946s (~) 11.024s (~) 0.078s 3 1.03x
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 14.255s (-5.4% 🟢) 15.030s (-6.2% 🟢) 0.775s 4 1.00x
🐘 Postgres Next.js (Turbopack) 14.467s 15.024s 0.557s 4 1.01x
🐘 Postgres Nitro 14.469s (-0.9%) 15.021s (~) 0.552s 4 1.02x
🐘 Postgres Express 14.478s (-0.7%) 15.018s (~) 0.540s 4 1.02x
💻 Local Next.js (Turbopack) 14.649s 15.032s 0.382s 4 1.03x
💻 Local Express 14.982s (~) 15.031s (~) 0.049s 4 1.05x
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 13.813s 14.023s 0.210s 7 1.00x
🐘 Postgres Nitro 13.837s (-0.9%) 14.019s (-2.0%) 0.182s 7 1.00x
🐘 Postgres Express 14.009s (~) 14.595s (~) 0.586s 7 1.01x
💻 Local Nitro 14.840s (-11.6% 🟢) 15.027s (-11.8% 🟢) 0.187s 6 1.07x
💻 Local Next.js (Turbopack) 16.146s 16.865s 0.718s 6 1.17x
💻 Local Express 16.448s (-0.9%) 17.032s (~) 0.584s 6 1.19x
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.239s 2.009s 0.771s 15 1.00x
🐘 Postgres Express 1.258s (~) 2.010s (~) 0.753s 15 1.02x
🐘 Postgres Nitro 1.263s (-0.9%) 2.010s (~) 0.746s 15 1.02x
💻 Local Nitro 1.463s (-10.3% 🟢) 2.005s (-3.3%) 0.542s 15 1.18x
💻 Local Express 1.497s (+0.6%) 2.006s (~) 0.509s 15 1.21x
💻 Local Next.js (Turbopack) 1.533s 2.006s 0.473s 15 1.24x
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.331s (-0.9%) 3.009s (~) 0.678s 10 1.00x
🐘 Postgres Express 2.333s (-1.2%) 3.011s (~) 0.677s 10 1.00x
🐘 Postgres Next.js (Turbopack) 2.415s 3.009s 0.595s 10 1.04x
💻 Local Nitro 2.703s (-14.0% 🟢) 3.108s (-20.0% 🟢) 0.406s 10 1.16x
💻 Local Next.js (Turbopack) 2.888s 3.453s 0.566s 9 1.24x
💻 Local Express 2.893s (-2.0%) 3.308s (-4.2%) 0.415s 10 1.24x
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.465s (-0.6%) 4.012s (~) 0.547s 8 1.00x
🐘 Postgres Nitro 3.512s (+0.9%) 4.008s (~) 0.496s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.724s 4.016s 0.292s 8 1.07x
💻 Local Nitro 7.101s (-14.9% 🟢) 7.515s (-16.7% 🟢) 0.414s 4 2.05x
💻 Local Express 7.600s (-8.9% 🟢) 8.023s (-11.1% 🟢) 0.423s 4 2.19x
💻 Local Next.js (Turbopack) 8.201s 9.019s 0.818s 4 2.37x
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.232s 2.009s 0.777s 15 1.00x
🐘 Postgres Express 1.260s (~) 2.009s (~) 0.749s 15 1.02x
🐘 Postgres Nitro 1.263s (~) 2.008s (~) 0.745s 15 1.03x
💻 Local Nitro 1.484s (-20.5% 🟢) 2.006s (-14.3% 🟢) 0.522s 15 1.20x
💻 Local Next.js (Turbopack) 1.511s 2.006s 0.495s 15 1.23x
💻 Local Express 1.550s (-18.2% 🟢) 2.006s (-15.1% 🟢) 0.456s 15 1.26x
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.318s (-1.0%) 3.010s (~) 0.692s 10 1.00x
🐘 Postgres Nitro 2.352s (+0.5%) 3.010s (~) 0.657s 10 1.01x
🐘 Postgres Next.js (Turbopack) 2.406s 3.008s 0.602s 10 1.04x
💻 Local Nitro 2.668s (-12.9% 🟢) 3.008s (-22.6% 🟢) 0.340s 10 1.15x
💻 Local Next.js (Turbopack) 2.853s 3.453s 0.601s 9 1.23x
💻 Local Express 2.918s (-6.8% 🟢) 3.565s (-5.2% 🟢) 0.647s 9 1.26x
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.439s (-1.7%) 4.009s (~) 0.569s 8 1.00x
🐘 Postgres Nitro 3.479s (~) 4.011s (~) 0.531s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.626s 4.009s 0.383s 8 1.05x
💻 Local Nitro 7.668s (-16.1% 🟢) 8.269s (-17.5% 🟢) 0.601s 4 2.23x
💻 Local Next.js (Turbopack) 8.096s 8.769s 0.673s 4 2.35x
💻 Local Express 8.917s (+1.3%) 9.274s (~) 0.356s 4 2.59x
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.773s (-21.2% 🟢) 1.088s (-0.6%) 0.315s 60 1.00x
🐘 Postgres Next.js (Turbopack) 0.775s 1.023s 0.248s 59 1.00x
🐘 Postgres Express 0.806s (-3.9%) 1.023s (~) 0.217s 59 1.04x
🐘 Postgres Nitro 0.806s (-1.7%) 1.022s (+1.6%) 0.216s 59 1.04x
💻 Local Next.js (Turbopack) 0.882s 1.057s 0.175s 57 1.14x
💻 Local Express 1.106s (+12.4% 🔺) 2.006s (+86.5% 🔺) 0.900s 30 1.43x
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.864s 2.053s 0.189s 44 1.00x
🐘 Postgres Nitro 1.879s (-2.5%) 2.029s (-3.4%) 0.150s 45 1.01x
🐘 Postgres Express 1.961s (-0.8%) 2.377s (+5.3% 🔺) 0.416s 38 1.05x
💻 Local Nitro 2.237s (-26.3% 🟢) 3.008s (-20.0% 🟢) 0.771s 30 1.20x
💻 Local Next.js (Turbopack) 2.702s 3.041s 0.339s 30 1.45x
💻 Local Express 3.070s (+1.8%) 3.923s (+9.4% 🔺) 0.853s 23 1.65x
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 3.814s 4.043s 0.229s 30 1.00x
🐘 Postgres Nitro 3.835s (-6.5% 🟢) 4.009s (-12.9% 🟢) 0.174s 30 1.01x
🐘 Postgres Express 3.896s (-2.4%) 4.110s (-5.9% 🟢) 0.214s 30 1.02x
💻 Local Nitro 7.403s (-20.4% 🟢) 8.015s (-20.0% 🟢) 0.612s 15 1.94x
💻 Local Next.js (Turbopack) 8.644s 9.017s 0.374s 14 2.27x
💻 Local Express 8.942s (-2.9%) 9.325s (-6.9% 🟢) 0.383s 13 2.34x
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.259s 1.007s 0.748s 60 1.00x
🐘 Postgres Express 0.279s (-1.1%) 1.007s (~) 0.727s 60 1.08x
🐘 Postgres Nitro 0.287s (+1.5%) 1.007s (~) 0.720s 60 1.11x
💻 Local Next.js (Turbopack) 0.557s 1.004s 0.447s 60 2.15x
💻 Local Nitro 0.573s (-5.2% 🟢) 1.021s (~) 0.448s 59 2.21x
💻 Local Express 0.603s (+7.6% 🔺) 1.021s (+1.7%) 0.418s 59 2.33x
workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.490s (-1.3%) 1.006s (~) 0.516s 90 1.00x
🐘 Postgres Next.js (Turbopack) 0.496s 1.007s 0.511s 90 1.01x
🐘 Postgres Express 0.507s (~) 1.007s (~) 0.499s 90 1.04x
💻 Local Nitro 2.363s (-6.9% 🟢) 3.008s (~) 0.645s 30 4.82x
💻 Local Express 2.383s (-5.2% 🟢) 3.008s (~) 0.625s 30 4.86x
💻 Local Next.js (Turbopack) 2.600s 3.009s 0.409s 30 5.31x
workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.782s (-1.1%) 1.015s (+0.8%) 0.234s 119 1.00x
🐘 Postgres Express 0.788s (-3.8%) 1.008s (-0.9%) 0.220s 120 1.01x
🐘 Postgres Next.js (Turbopack) 0.798s 1.007s 0.209s 120 1.02x
💻 Local Nitro 10.096s (-9.8% 🟢) 10.609s (-9.0% 🟢) 0.513s 12 12.91x
💻 Local Express 10.484s (-6.3% 🟢) 11.029s (-7.6% 🟢) 0.545s 11 13.41x
💻 Local Next.js (Turbopack) 10.720s 11.300s 0.581s 11 13.71x
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.140s (-34.5% 🟢) 1.004s (~) 0.010s (-20.0% 🟢) 1.016s (~) 0.876s 10 1.00x
💻 Local Next.js (Turbopack) 0.174s 1.003s 0.012s 1.019s 0.845s 10 1.24x
🐘 Postgres Next.js (Turbopack) 0.194s 1.001s 0.002s 1.010s 0.816s 10 1.39x
🐘 Postgres Nitro 0.201s (-2.0%) 0.995s (~) 0.002s (~) 1.009s (~) 0.808s 10 1.44x
🐘 Postgres Express 0.203s (-1.1%) 0.997s (~) 0.001s (-18.8% 🟢) 1.009s (~) 0.806s 10 1.45x
💻 Local Express 0.213s (+6.8% 🔺) 1.004s (~) 0.010s (-17.4% 🟢) 1.016s (~) 0.803s 10 1.52x
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.583s (-30.5% 🟢) 1.011s (~) 0.009s (-0.7%) 1.022s (-8.4% 🟢) 0.440s 59 1.00x
🐘 Postgres Nitro 0.604s (-3.3%) 1.003s (~) 0.005s (+25.4% 🔺) 1.026s (~) 0.422s 59 1.04x
🐘 Postgres Express 0.609s (-3.4%) 1.023s (+1.7%) 0.004s (+4.0%) 1.039s (+1.6%) 0.431s 58 1.05x
🐘 Postgres Next.js (Turbopack) 0.613s 1.014s 0.004s 1.029s 0.417s 59 1.05x
💻 Local Next.js (Turbopack) 0.754s 1.011s 0.010s 1.117s 0.362s 54 1.29x
💻 Local Express 0.856s (+13.1% 🔺) 1.012s (-1.6%) 0.012s (+23.3% 🔺) 1.119s (+7.6% 🔺) 0.263s 54 1.47x
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.950s 1.225s 0.000s 1.233s 0.282s 49 1.00x
🐘 Postgres Express 0.959s (~) 1.244s (-2.6%) 0.000s (-52.1% 🟢) 1.264s (-3.2%) 0.305s 48 1.01x
🐘 Postgres Nitro 0.963s (-0.6%) 1.216s (-2.5%) 0.000s (-51.0% 🟢) 1.231s (-2.1%) 0.268s 49 1.01x
💻 Local Nitro 1.155s (-5.5% 🟢) 2.018s (~) 0.000s (+233.3% 🔺) 2.020s (~) 0.865s 30 1.22x
💻 Local Express 1.221s (~) 2.021s (~) 0.000s (-40.0% 🟢) 2.023s (~) 0.801s 30 1.29x
💻 Local Next.js (Turbopack) 1.267s 2.020s 0.000s 2.023s 0.756s 30 1.33x
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.737s (-3.0%) 2.100s (-1.9%) 0.000s (-100.0% 🟢) 2.113s (-2.8%) 0.375s 29 1.00x
🐘 Postgres Express 1.754s (-1.0%) 2.105s (-3.3%) 0.000s (NaN%) 2.136s (-2.8%) 0.383s 29 1.01x
🐘 Postgres Next.js (Turbopack) 1.847s 2.072s 0.000s 2.111s 0.263s 29 1.06x
💻 Local Express 3.405s (-1.8%) 4.035s (~) 0.001s (-25.0% 🟢) 4.038s (~) 0.632s 15 1.96x
💻 Local Nitro 3.497s (+3.2%) 4.099s (+1.7%) 0.001s (+150.0% 🔺) 4.103s (+1.6%) 0.606s 15 2.01x
💻 Local Next.js (Turbopack) 3.722s 4.166s 0.000s 4.170s 0.447s 15 2.14x

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Nitro 19/21
🐘 Postgres Next.js (Turbopack) 12/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 19/21
Next.js (Turbopack) 🐘 Postgres 17/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.

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

Adds a defensive runtime guard to the recursive fibonacciWorkflow workbench example to prevent runaway recursion/fan-out when n is NaN/undefined/Infinity, failing the run immediately with a FatalError.

Changes:

  • Add Number.isFinite(n) validation at the top of fibonacciWorkflow.
  • Throw FatalError when n is not finite to avoid infinite recursive spawning.

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

@TooTallNate TooTallNate changed the title Guard fibonacciWorkflow against non-finite n Guard fibonacciWorkflow against non-finite numbers Apr 20, 2026
@TooTallNate TooTallNate merged commit b163860 into main Apr 21, 2026
90 of 108 checks passed
@TooTallNate TooTallNate deleted the guard-fibonacci-workflow branch April 21, 2026 07:44
@TooTallNate TooTallNate added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 21, 2026
@vercel vercel deleted a comment Apr 21, 2026
@TooTallNate TooTallNate removed the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 21, 2026
@karthikscale3 karthikscale3 added the backport-stable Cherry-pick this PR to the stable branch when merged label Apr 22, 2026
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.

4 participants