Skip to content

[cli] [world-local] Ensure update checks don't suggest upgrading from stable release to pre-releases#1490

Merged
VaguelySerious merged 5 commits intomainfrom
peter/fix-version-check-for-release
Mar 24, 2026
Merged

[cli] [world-local] Ensure update checks don't suggest upgrading from stable release to pre-releases#1490
VaguelySerious merged 5 commits intomainfrom
peter/fix-version-check-for-release

Conversation

@VaguelySerious
Copy link
Copy Markdown
Member

No description provided.

…able releases

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

changeset-bot bot commented Mar 23, 2026

🦋 Changeset detected

Latest commit: c33475c

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

This PR includes changesets to release 16 packages
Name Type
@workflow/cli Patch
workflow Patch
@workflow/world-testing Patch
@workflow/ai Patch
@workflow/core Patch
@workflow/builders Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/vitest Patch
@workflow/web-shared 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

@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Mar 23, 2026

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 23, 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.039s (+3.1%) 1.005s (~) 0.966s 10 1.00x
💻 Local Next.js (Turbopack) 0.047s 1.005s 0.958s 10 1.21x
🌐 Redis Next.js (Turbopack) 0.053s 1.006s 0.953s 10 1.34x
🐘 Postgres Next.js (Turbopack) 0.058s 1.010s 0.953s 10 1.46x
🐘 Postgres Express 0.065s (+16.4% 🔺) 1.012s (~) 0.947s 10 1.65x
🐘 Postgres Nitro 0.072s (+2.9%) 1.013s (~) 0.942s 10 1.82x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.509s (-12.7% 🟢) 2.981s (+40.0% 🔺) 2.471s 10 1.00x
▲ Vercel Next.js (Turbopack) 0.523s (-20.9% 🟢) 2.899s (+21.2% 🔺) 2.376s 10 1.03x
▲ Vercel Express 0.559s (-19.1% 🟢) 2.710s (-7.9% 🟢) 2.151s 10 1.10x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.099s (+0.6%) 2.006s (~) 0.906s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.105s 2.006s 0.901s 10 1.01x
💻 Local Next.js (Turbopack) 1.120s 2.006s 0.886s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.137s 2.011s 0.874s 10 1.03x
🐘 Postgres Express 1.143s (-0.9%) 2.011s (~) 0.868s 10 1.04x
🐘 Postgres Nitro 1.167s (~) 2.011s (~) 0.844s 10 1.06x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.248s (+7.7% 🔺) 4.040s (+19.9% 🔺) 1.793s 10 1.00x
▲ Vercel Next.js (Turbopack) 2.347s (+13.8% 🔺) 4.366s (+19.1% 🔺) 2.019s 10 1.04x
▲ Vercel Express 2.380s (+12.9% 🔺) 4.347s (+16.5% 🔺) 1.967s 10 1.06x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 10.595s 11.023s 0.428s 3 1.00x
💻 Local Nitro 10.640s (~) 11.022s (~) 0.381s 3 1.00x
💻 Local Next.js (Turbopack) 10.770s 11.024s 0.253s 3 1.02x
🐘 Postgres Next.js (Turbopack) 10.891s 11.025s 0.134s 3 1.03x
🐘 Postgres Nitro 10.941s (-1.8%) 11.026s (-8.5% 🟢) 0.085s 3 1.03x
🐘 Postgres Express 10.952s (~) 11.360s (+2.9%) 0.407s 3 1.03x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 18.008s (+4.6%) 19.577s (+2.8%) 1.570s 2 1.00x
▲ Vercel Express 18.631s (-3.9%) 20.488s (-3.4%) 1.857s 2 1.03x
▲ Vercel Nitro 19.164s (+7.1% 🔺) 22.464s (+14.4% 🔺) 3.300s 2 1.06x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 13.903s 14.028s 0.125s 5 1.00x
💻 Local Nitro 14.192s (~) 15.029s (~) 0.837s 4 1.02x
🐘 Postgres Next.js (Turbopack) 14.418s 15.025s 0.607s 4 1.04x
🐘 Postgres Express 14.558s (-1.8%) 15.024s (~) 0.466s 4 1.05x
💻 Local Next.js (Turbopack) 14.585s 15.028s 0.443s 4 1.05x
🐘 Postgres Nitro 14.648s (-1.6%) 15.028s (~) 0.380s 4 1.05x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 33.395s (+2.2%) 34.730s (+2.0%) 1.335s 2 1.00x
▲ Vercel Express 35.916s (+7.2% 🔺) 37.503s (+7.3% 🔺) 1.586s 2 1.08x
▲ Vercel Next.js (Turbopack) 36.660s (+9.0% 🔺) 38.516s (+10.6% 🔺) 1.856s 2 1.10x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 12.832s 13.168s 0.336s 7 1.00x
🐘 Postgres Next.js (Turbopack) 13.737s 14.025s 0.287s 7 1.07x
🐘 Postgres Express 13.984s (-3.1%) 14.454s (-3.9%) 0.470s 7 1.09x
🐘 Postgres Nitro 14.056s (-5.4% 🟢) 14.884s (-2.1%) 0.828s 7 1.10x
💻 Local Nitro 14.865s (~) 15.193s (+1.1%) 0.329s 6 1.16x
💻 Local Next.js (Turbopack) 16.157s 16.864s 0.707s 6 1.26x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 57.456s (-5.2% 🟢) 59.303s (-5.7% 🟢) 1.846s 2 1.00x
▲ Vercel Nitro 57.605s (-6.6% 🟢) 60.043s (-4.5%) 2.438s 2 1.00x
▲ Vercel Next.js (Turbopack) 61.632s (+0.7%) 63.877s (+2.1%) 2.245s 2 1.07x

🔍 Observability: Express | Nitro | 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.227s 2.011s 0.784s 15 1.00x
🌐 Redis Next.js (Turbopack) 1.256s 2.006s 0.750s 15 1.02x
🐘 Postgres Express 1.275s (-0.6%) 2.012s (~) 0.737s 15 1.04x
🐘 Postgres Nitro 1.289s (-0.9%) 2.013s (~) 0.725s 15 1.05x
💻 Local Next.js (Turbopack) 1.482s 2.005s 0.523s 15 1.21x
💻 Local Nitro 1.484s (+1.8%) 2.006s (~) 0.522s 15 1.21x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.632s (+4.2%) 4.983s (+29.8% 🔺) 2.351s 7 1.00x
▲ Vercel Express 3.127s (+10.0% 🔺) 4.830s (+9.2% 🔺) 1.702s 7 1.19x
▲ Vercel Next.js (Turbopack) 3.380s (+30.4% 🔺) 5.099s (+24.4% 🔺) 1.718s 6 1.28x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.326s (-4.7%) 3.010s (~) 0.684s 10 1.00x
🐘 Postgres Nitro 2.386s (-4.3%) 3.012s (~) 0.626s 10 1.03x
🐘 Postgres Next.js (Turbopack) 2.401s 3.011s 0.609s 10 1.03x
🌐 Redis Next.js (Turbopack) 2.446s 3.008s 0.562s 10 1.05x
💻 Local Next.js (Turbopack) 2.682s 3.108s 0.426s 10 1.15x
💻 Local Nitro 2.862s (+13.3% 🔺) 3.108s (+3.3%) 0.246s 10 1.23x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.929s (+12.4% 🔺) 4.630s (+26.2% 🔺) 1.701s 7 1.00x
▲ Vercel Express 2.941s (-10.0% 🟢) 4.604s (-10.9% 🟢) 1.663s 7 1.00x
▲ Vercel Next.js (Turbopack) 3.026s (+3.0%) 5.153s (+20.2% 🔺) 2.127s 6 1.03x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.450s (-3.4%) 4.010s (~) 0.560s 8 1.00x
🐘 Postgres Nitro 3.508s (-4.3%) 4.014s (~) 0.506s 8 1.02x
🐘 Postgres Next.js (Turbopack) 3.645s 4.012s 0.367s 8 1.06x
🌐 Redis Next.js (Turbopack) 3.927s 4.296s 0.368s 7 1.14x
💻 Local Nitro 6.926s (+3.6%) 7.414s (+5.7% 🔺) 0.487s 5 2.01x
💻 Local Next.js (Turbopack) 7.326s 8.018s 0.692s 4 2.12x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 3.340s (+6.0% 🔺) 5.083s (+4.3%) 1.744s 6 1.00x
▲ Vercel Nitro 3.491s (+3.0%) 6.053s (+26.3% 🔺) 2.562s 5 1.05x
▲ Vercel Next.js (Turbopack) 3.845s (-7.7% 🟢) 5.420s (-2.4%) 1.575s 6 1.15x

🔍 Observability: Express | Nitro | 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.214s 2.010s 0.796s 15 1.00x
🌐 Redis Next.js (Turbopack) 1.232s 2.006s 0.775s 15 1.01x
🐘 Postgres Express 1.252s (-3.0%) 2.009s (~) 0.757s 15 1.03x
🐘 Postgres Nitro 1.259s (-2.4%) 2.010s (~) 0.751s 15 1.04x
💻 Local Nitro 1.473s (+0.6%) 2.005s (~) 0.532s 15 1.21x
💻 Local Next.js (Turbopack) 1.565s 2.006s 0.441s 15 1.29x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.457s (-5.0%) 4.374s (+15.7% 🔺) 1.917s 8 1.00x
▲ Vercel Nitro 2.797s (+21.3% 🔺) 4.379s (+16.5% 🔺) 1.581s 7 1.14x
▲ Vercel Express 2.821s (+24.6% 🔺) 4.573s (+17.0% 🔺) 1.752s 7 1.15x

🔍 Observability: Next.js (Turbopack) | Nitro | Express

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.340s (-4.6%) 3.011s (~) 0.672s 10 1.00x
🐘 Postgres Nitro 2.352s (-5.7% 🟢) 3.012s (~) 0.660s 10 1.01x
🐘 Postgres Next.js (Turbopack) 2.398s 3.009s 0.610s 10 1.03x
🌐 Redis Next.js (Turbopack) 2.452s 3.008s 0.556s 10 1.05x
💻 Local Nitro 2.819s (-1.7%) 3.108s (~) 0.288s 10 1.21x
💻 Local Next.js (Turbopack) 3.045s 3.760s 0.715s 8 1.30x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.781s (-7.2% 🟢) 5.029s (+17.2% 🔺) 2.248s 6 1.00x
▲ Vercel Nitro 3.040s (+5.7% 🔺) 4.934s (+14.6% 🔺) 1.894s 7 1.09x
▲ Vercel Express 3.207s (+34.1% 🔺) 4.900s (+24.1% 🔺) 1.694s 7 1.15x

🔍 Observability: Next.js (Turbopack) | Nitro | Express

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.474s (-3.4%) 4.012s (~) 0.539s 8 1.00x
🐘 Postgres Nitro 3.522s (-3.5%) 4.015s (~) 0.493s 8 1.01x
🐘 Postgres Next.js (Turbopack) 3.631s 4.011s 0.380s 8 1.05x
🌐 Redis Next.js (Turbopack) 3.919s 4.296s 0.377s 7 1.13x
💻 Local Nitro 7.724s (+4.5%) 8.015s (~) 0.291s 4 2.22x
💻 Local Next.js (Turbopack) 8.690s 9.266s 0.576s 4 2.50x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.260s (+5.1% 🔺) 5.025s (+6.6% 🔺) 1.764s 6 1.00x
▲ Vercel Express 3.502s (+12.0% 🔺) 5.204s (+11.2% 🔺) 1.702s 6 1.07x
▲ Vercel Next.js (Turbopack) 3.668s (+2.3%) 5.536s (+12.4% 🔺) 1.868s 6 1.13x

🔍 Observability: Nitro | Express | 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.572s 1.004s 0.433s 60 1.00x
💻 Local Nitro 0.684s (+1.5%) 1.004s (~) 0.320s 60 1.20x
🐘 Postgres Next.js (Turbopack) 0.744s 1.007s 0.264s 60 1.30x
🐘 Postgres Express 0.817s (-10.7% 🟢) 1.008s (-6.6% 🟢) 0.191s 60 1.43x
🐘 Postgres Nitro 0.845s (-12.8% 🟢) 1.008s (-18.4% 🟢) 0.163s 60 1.48x
💻 Local Next.js (Turbopack) 0.850s 1.039s 0.189s 58 1.49x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 10.178s (+1.1%) 12.623s (+10.5% 🔺) 2.445s 5 1.00x
▲ Vercel Next.js (Turbopack) 10.632s (+7.0% 🔺) 13.163s (+6.5% 🔺) 2.531s 5 1.04x
▲ Vercel Express 10.765s (~) 18.663s (+51.5% 🔺) 7.898s 5 1.06x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

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.351s 2.006s 0.655s 45 1.00x
🐘 Postgres Next.js (Turbopack) 1.883s 2.077s 0.193s 44 1.39x
🐘 Postgres Express 1.929s (-13.3% 🟢) 2.125s (-29.5% 🟢) 0.196s 43 1.43x
🐘 Postgres Nitro 2.013s (-12.9% 🟢) 2.510s (-16.7% 🟢) 0.498s 36 1.49x
💻 Local Nitro 2.221s (+1.3%) 3.007s (~) 0.786s 30 1.64x
💻 Local Next.js (Turbopack) 2.606s 3.008s 0.402s 30 1.93x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 31.599s (+4.7%) 33.369s (+4.3%) 1.770s 3 1.00x
▲ Vercel Nitro 32.208s (+7.3% 🔺) 33.802s (+6.0% 🔺) 1.595s 3 1.02x
▲ Vercel Next.js (Turbopack) 33.366s (+2.9%) 35.577s (+5.7% 🔺) 2.211s 3 1.06x

🔍 Observability: Express | Nitro | 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) 2.732s 3.085s 0.352s 39 1.00x
🐘 Postgres Next.js (Turbopack) 3.802s 4.077s 0.276s 30 1.39x
🐘 Postgres Express 3.915s (-12.9% 🟢) 4.218s (-15.9% 🟢) 0.303s 29 1.43x
🐘 Postgres Nitro 4.232s (-11.6% 🟢) 5.014s (-1.7%) 0.782s 24 1.55x
💻 Local Nitro 7.292s (+0.7%) 8.015s (~) 0.723s 15 2.67x
💻 Local Next.js (Turbopack) 8.430s 9.017s 0.587s 14 3.09x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 85.132s (-1.2%) 101.929s (+16.8% 🔺) 16.796s 2 1.00x
▲ Vercel Express 85.478s (-4.9%) 87.510s (-4.6%) 2.033s 2 1.00x
▲ Vercel Next.js (Turbopack) 88.102s (+2.3%) 90.043s (+1.8%) 1.941s 2 1.03x

🔍 Observability: Nitro | Express | 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.246s 1.007s 0.761s 60 1.00x
🌐 Redis Next.js (Turbopack) 0.253s 1.004s 0.751s 60 1.03x
🐘 Postgres Express 0.275s (-7.3% 🟢) 1.008s (~) 0.733s 60 1.11x
🐘 Postgres Nitro 0.296s (-6.8% 🟢) 1.009s (~) 0.713s 60 1.20x
💻 Local Next.js (Turbopack) 0.547s 1.004s 0.457s 60 2.22x
💻 Local Nitro 0.580s (+3.4%) 1.004s (~) 0.424s 60 2.35x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.172s (+10.6% 🔺) 4.108s (+14.3% 🔺) 1.936s 16 1.00x
▲ Vercel Nitro 2.426s (+44.4% 🔺) 24.398s (+639.0% 🔺) 21.973s 3 1.12x
▲ Vercel Next.js (Turbopack) 2.446s (+29.3% 🔺) 12.841s (+242.3% 🔺) 10.395s 7 1.13x

🔍 Observability: Express | Nitro | 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.469s 1.007s 0.538s 90 1.00x
🐘 Postgres Express 0.502s (-8.4% 🟢) 1.008s (~) 0.506s 90 1.07x
🐘 Postgres Nitro 0.531s (-9.0% 🟢) 1.008s (~) 0.478s 90 1.13x
🌐 Redis Next.js (Turbopack) 1.112s 1.942s 0.830s 47 2.37x
💻 Local Nitro 2.395s (+2.2%) 3.008s (~) 0.613s 30 5.10x
💻 Local Next.js (Turbopack) 2.565s 3.008s 0.443s 30 5.46x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.911s (+3.9%) 7.095s (+51.5% 🔺) 4.184s 13 1.00x
▲ Vercel Nitro 3.229s (+7.5% 🔺) 7.163s (+61.0% 🔺) 3.934s 13 1.11x
▲ Vercel Next.js (Turbopack) 3.635s (+12.1% 🔺) 5.292s (+12.0% 🔺) 1.657s 18 1.25x

🔍 Observability: Express | Nitro | 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.729s 1.007s 0.278s 120 1.00x
🐘 Postgres Express 0.777s (-15.5% 🟢) 1.008s (-18.7% 🟢) 0.231s 120 1.07x
🐘 Postgres Nitro 0.830s (-14.2% 🟢) 1.011s (-27.7% 🟢) 0.181s 119 1.14x
🌐 Redis Next.js (Turbopack) 2.635s 3.007s 0.373s 40 3.62x
💻 Local Nitro 10.320s (+4.0%) 10.856s (+4.8%) 0.536s 12 14.16x
💻 Local Next.js (Turbopack) 10.600s 11.209s 0.609s 11 14.54x
💻 Local Express ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 6.600s (-79.4% 🟢) 8.387s (-75.2% 🟢) 1.786s 15 1.00x
▲ Vercel Express 6.661s (~) 8.339s (-4.8%) 1.679s 15 1.01x
▲ Vercel Nitro 7.491s (+3.6%) 9.347s (+7.8% 🔺) 1.855s 13 1.14x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

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.138s (-1.0%) 1.003s (~) 0.010s (+4.1%) 1.016s (~) 0.878s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.154s 1.001s 0.001s 1.008s 0.854s 10 1.12x
💻 Local Next.js (Turbopack) 0.171s 1.000s 0.012s 1.017s 0.846s 10 1.25x
🐘 Postgres Next.js (Turbopack) 0.189s 1.000s 0.001s 1.010s 0.822s 10 1.37x
🐘 Postgres Express 0.203s (-8.7% 🟢) 0.993s (~) 0.001s (~) 1.010s (~) 0.806s 10 1.48x
🐘 Postgres Nitro 0.228s (-5.3% 🟢) 0.992s (~) 0.001s (-22.2% 🟢) 1.013s (~) 0.785s 10 1.66x
💻 Local Express ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 1.708s (+4.4%) 3.249s (+11.3% 🔺) 0.735s (+84.2% 🔺) 5.069s (+30.8% 🔺) 3.361s 10 1.00x
▲ Vercel Express 1.772s (-17.2% 🟢) 2.747s (-18.0% 🟢) 0.608s (+438.2% 🔺) 4.033s (-3.4%) 2.261s 10 1.04x
▲ Vercel Nitro 1.865s (+20.7% 🔺) 3.063s (+17.2% 🔺) 0.640s (+39.9% 🔺) 4.406s (+22.6% 🔺) 2.541s 10 1.09x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

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.401s 1.000s 0.003s 1.011s 0.610s 60 1.00x
💻 Local Nitro 0.575s (+1.4%) 1.008s (~) 0.009s (-3.9%) 1.021s (~) 0.446s 59 1.44x
🐘 Postgres Next.js (Turbopack) 0.592s 1.008s 0.005s 1.024s 0.432s 59 1.48x
🐘 Postgres Express 0.595s (-15.4% 🟢) 1.004s (~) 0.004s (-36.5% 🟢) 1.024s (-0.9%) 0.429s 59 1.49x
🐘 Postgres Nitro 0.643s (-11.3% 🟢) 1.001s (~) 0.005s (-16.8% 🟢) 1.025s (~) 0.383s 59 1.60x
💻 Local Next.js (Turbopack) 0.656s 1.008s 0.010s 1.024s 0.368s 59 1.64x
💻 Local Express ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 4.356s (-18.4% 🟢) 5.555s (-9.6% 🟢) 0.339s (-46.1% 🟢) 6.575s (-12.8% 🟢) 2.219s 10 1.00x
▲ Vercel Express 4.688s (+3.2%) 5.849s (+4.5%) 0.224s (-5.3% 🟢) 6.887s (+2.2%) 2.199s 9 1.08x
▲ Vercel Next.js (Turbopack) 5.305s (+16.2% 🔺) 6.372s (+14.0% 🔺) 0.380s (+69.2% 🔺) 7.636s (+18.1% 🔺) 2.331s 8 1.22x

🔍 Observability: Nitro | Express | 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.871s 1.052s 0.000s 1.057s 0.186s 57 1.00x
🐘 Postgres Next.js (Turbopack) 0.937s 1.131s 0.000s 1.140s 0.204s 53 1.08x
🐘 Postgres Express 0.976s (-13.0% 🟢) 1.216s (-31.7% 🟢) 0.000s (+4.1%) 1.233s (-31.9% 🟢) 0.257s 49 1.12x
🐘 Postgres Nitro 1.021s (-12.7% 🟢) 1.387s (-30.5% 🟢) 0.000s (+4.7%) 1.405s (-30.5% 🟢) 0.384s 43 1.17x
💻 Local Nitro 1.169s (+3.1%) 2.018s (~) 0.000s (+62.5% 🔺) 2.021s (~) 0.851s 30 1.34x
💻 Local Next.js (Turbopack) 1.254s 2.020s 0.001s 2.025s 0.771s 30 1.44x
💻 Local Express ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 3.101s (+2.5%) 4.196s (+6.9% 🔺) 0.000s (-46.2% 🟢) 4.910s (+11.0% 🔺) 1.809s 13 1.00x
▲ Vercel Express 3.834s (+19.7% 🔺) 4.754s (+10.3% 🔺) 0.000s (-100.0% 🟢) 5.576s (+8.4% 🔺) 1.743s 11 1.24x
▲ Vercel Next.js (Turbopack) 4.069s (+15.6% 🔺) 11.276s (+142.4% 🔺) 0.000s (NaN%) 12.153s (+133.4% 🔺) 8.084s 5 1.31x

🔍 Observability: Nitro | Express | 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.622s 2.002s 0.000s 2.007s 0.384s 30 1.00x
🐘 Postgres Express 1.739s (-15.5% 🟢) 2.174s (-12.2% 🟢) 0.000s (+Infinity% 🔺) 2.190s (-12.4% 🟢) 0.451s 28 1.07x
🐘 Postgres Next.js (Turbopack) 1.809s 2.105s 0.000s 2.121s 0.313s 29 1.11x
🐘 Postgres Nitro 1.832s (-19.1% 🟢) 2.218s (-24.9% 🟢) 0.000s (-100.0% 🟢) 2.234s (-24.8% 🟢) 0.403s 27 1.13x
💻 Local Nitro 3.498s (+1.1%) 4.098s (+1.7%) 0.001s (-15.4% 🟢) 4.103s (+1.7%) 0.604s 15 2.16x
💻 Local Next.js (Turbopack) 3.744s 4.298s 0.000s 4.304s 0.560s 15 2.31x
💻 Local Express ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 4.151s (+5.2% 🔺) 5.395s (+8.2% 🔺) 0.000s (+Infinity% 🔺) 6.128s (+4.6%) 1.977s 10 1.00x
▲ Vercel Nitro 4.497s (+29.9% 🔺) 25.936s (+518.8% 🔺) 0.000s (NaN%) 26.614s (+460.7% 🔺) 22.117s 3 1.08x
▲ Vercel Next.js (Turbopack) 5.302s (+18.5% 🔺) 6.246s (+15.3% 🔺) 0.000s (-100.0% 🟢) 6.932s (+16.6% 🔺) 1.631s 9 1.28x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Nitro 18/21
🐘 Postgres Next.js (Turbopack) 16/21
▲ Vercel Nitro 10/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 20/21
Next.js (Turbopack) 🌐 Redis 11/21
Nitro 🐘 Postgres 12/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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 23, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 779 1 67 847
✅ 💻 Local Development 782 0 142 924
✅ 📦 Local Production 782 0 142 924
✅ 🐘 Local Postgres 782 0 142 924
✅ 🪟 Windows 72 0 5 77
❌ 🌍 Community Worlds 118 56 21 195
✅ 📋 Other 198 0 33 231
Total 3513 57 552 4122

❌ Failed Tests

▲ Vercel Production (1 failed)

astro (1 failed):

  • DurableAgent e2e experimental_onToolCallStart (GAP) completes but callbacks are not called (GAP)
🌍 Community Worlds (56 failed)

mongodb (3 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KMEM1Z5C1PHAZQX01BHWKAVY
  • webhookWorkflow | wrun_01KMEM27A9VEJTVR7TWVXYASEK
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KMEM8DKTSNRD5SVBA28561YT

redis (2 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KMEM1Z5C1PHAZQX01BHWKAVY
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KMEM8DKTSNRD5SVBA28561YT

turso (51 failed):

  • addTenWorkflow | wrun_01KMEM0R3GHM10FD986C8W8JNM
  • addTenWorkflow | wrun_01KMEM0R3GHM10FD986C8W8JNM
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KMEM1W0DGHJPDYH3P7GEYP8R
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KMEM104BA7H59CY03HQ36W1B
  • promiseRaceWorkflow | wrun_01KMEM15G25NRFZ4XJTQCNKJDK
  • promiseAnyWorkflow | wrun_01KMEM17CEBN5GP8KH4VDG71YK
  • importedStepOnlyWorkflow | wrun_01KMEM2A426WEE90JN5NXX2Y19
  • hookWorkflow | wrun_01KMEM1NCFWEXGJRBD3ZFANNFQ
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KMEM1Z5C1PHAZQX01BHWKAVY
  • webhookWorkflow | wrun_01KMEM27A9VEJTVR7TWVXYASEK
  • sleepingWorkflow | wrun_01KMEM2DVYC4408N6GW51G9RE9
  • parallelSleepWorkflow | wrun_01KMEM2SXGNJ0PP8TR04VGKTVJ
  • nullByteWorkflow | wrun_01KMEM2Y6MSC3A1XXDJ0B90PTB
  • workflowAndStepMetadataWorkflow | wrun_01KMEM302V52W68KD53WR43TFY
  • fetchWorkflow | wrun_01KMEM4Y9J47NXB808Y395GWE1
  • promiseRaceStressTestWorkflow | wrun_01KMEM51BGGXY49468XD3PD4Y1
  • 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()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KMEM7TSSZKE0Y59757QH8YNA
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KMEM8DKTSNRD5SVBA28561YT
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KMEM91QT30PB7MYPGSZ986BC
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KMEM9MQCRBRRY6SJQHSHG3C5
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KMEM9WKCR01CC99XADVMPZ9F
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KMEMA37PSN5X3Y31VHV3F2MK
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KMEMA566Q0EX945PDF53QPD1
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KMEMAN91E0A4CAXN81R2D89G
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KMEMATGYTFCS76P1RVQE1MJW
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KMEMB0C030BKEQT3F1MA3PZM
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KMEMB6AX9VBVC2MT1P38CW39
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KMEMBE2SZ29WACSNYX52Y48M
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KMEMBMJFK9YTDGNZZTNHFW62
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KMEMBVS1PQC63YQ983RZV48K
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KMEMC5M914WQW9JKJ71AVF9G
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KMEMCDPW8MKY0MVDVEWAX48G
  • cancelRun - cancelling a running workflow | wrun_01KMEMCKM5ZBKQE6KAHMWQAFM1
  • cancelRun via CLI - cancelling a running workflow | wrun_01KMEMCW8BFGWT39BR65GJ6J99
  • 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_01KMEMD74RQWWR5HKJATBJNANY
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KMEMDSSZ62P3ZAYMTJ8E9FYP
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KMEME9043WNWYHQR0405RJR7

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
❌ astro 69 1 7
✅ example 70 0 7
✅ express 70 0 7
✅ fastify 70 0 7
✅ hono 70 0 7
✅ nextjs-turbopack 75 0 2
✅ nextjs-webpack 75 0 2
✅ nitro 70 0 7
✅ nuxt 70 0 7
✅ sveltekit 70 0 7
✅ vite 70 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 66 0 11
✅ express-stable 66 0 11
✅ fastify-stable 66 0 11
✅ hono-stable 66 0 11
✅ nextjs-turbopack-canary 55 0 22
✅ nextjs-turbopack-stable 72 0 5
✅ nextjs-webpack-canary 55 0 22
✅ nextjs-webpack-stable 72 0 5
✅ nitro-stable 66 0 11
✅ nuxt-stable 66 0 11
✅ sveltekit-stable 66 0 11
✅ vite-stable 66 0 11
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 66 0 11
✅ express-stable 66 0 11
✅ fastify-stable 66 0 11
✅ hono-stable 66 0 11
✅ nextjs-turbopack-canary 55 0 22
✅ nextjs-turbopack-stable 72 0 5
✅ nextjs-webpack-canary 55 0 22
✅ nextjs-webpack-stable 72 0 5
✅ nitro-stable 66 0 11
✅ nuxt-stable 66 0 11
✅ sveltekit-stable 66 0 11
✅ vite-stable 66 0 11
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 66 0 11
✅ express-stable 66 0 11
✅ fastify-stable 66 0 11
✅ hono-stable 66 0 11
✅ nextjs-turbopack-canary 55 0 22
✅ nextjs-turbopack-stable 72 0 5
✅ nextjs-webpack-canary 55 0 22
✅ nextjs-webpack-stable 72 0 5
✅ nitro-stable 66 0 11
✅ nuxt-stable 66 0 11
✅ sveltekit-stable 66 0 11
✅ vite-stable 66 0 11
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 72 0 5
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 3 0 2
❌ mongodb 52 3 5
✅ redis-dev 3 0 2
❌ redis 53 2 5
✅ turso-dev 3 0 2
❌ turso 4 51 5
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 66 0 11
✅ e2e-local-postgres-nest-stable 66 0 11
✅ e2e-local-prod-nest-stable 66 0 11

📋 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.

Copy link
Copy Markdown
Collaborator

@karthikscale3 karthikscale3 left a comment

Choose a reason for hiding this comment

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

Looks good to me

Here's my review of PR #1490:

Note: This PR is still in Draft status.

Summary

A small, focused bug fix PR by @VaguelySerious that prevents two update-check mechanisms from incorrectly suggesting users upgrade to pre-release versions when they're on stable releases. It touches two packages:

  1. @workflow/cli (update-check.ts) - The CLI's "new version available" prompt
  2. @workflow/world-local (init.ts) - The data directory version migration logic

No Blockers

The code changes are correct and well-scoped. No regressions.

CI Status

CI is still running (most E2E/benchmark jobs are pending). What has completed so far:

Passing:

  • Build Packages passes
  • Unit Tests pass (ubuntu + windows)
  • Vitest Plugin Tests pass
  • All Vercel deployments succeed (all 13 projects)
  • Docs code samples and links pass
  • Community World (Turso) E2E passes
  • Socket Security passes

Pending:

  • All E2E suites (Vercel Prod, Local Dev/Prod/Postgres, Windows, MongoDB/Redis community worlds)
  • All benchmarks

No failures so far. Given the narrow scope of the changes (version-checking logic only, no runtime behavior changes), I'd expect all E2E/benchmarks to pass cleanly.

Code Review

1. CLI update check (packages/cli/src/lib/update-check.ts) - Correct

Two call sites are patched, both with the same pattern:

const isPrerelease = latestVersion.includes('-');
const needsUpdate = !isPrerelease && compareVersions(latestVersion, currentVersion);

This gates needsUpdate on the latest version not being a pre-release. The check is applied in both:

  • checkForUpdate() - the live npm registry check
  • checkForUpdateCached() - the cached version check path

Simple and effective. The includes('-') check works because semver pre-release tags always contain a hyphen (e.g., 5.0.0-beta.1).

2. world-local data dir init (packages/world-local/src/init.ts) - Correct

The guard prevents a pre-release version from triggering a data directory upgrade/migration when the stored version has a different base version:

if (
  currentVersion.prerelease &&
  (currentVersion.major !== oldVersion.major ||
    currentVersion.minor !== oldVersion.minor ||
    currentVersion.patch !== oldVersion.patch)
) {
  return;
}

This means: if you're running 5.1.0-beta.3 and the data dir was created by 4.2.0, don't attempt the migration. But if you're running 5.1.0-beta.3 and the data dir was from 5.1.0-beta.1 (same base), the upgrade proceeds normally. This is the right behavior - pre-releases shouldn't perform cross-version migrations.

3. Tests (packages/world-local/src/init.test.ts) - Thorough

  • Existing tests for "older version" and "newer version" upgrade scenarios are updated to be prerelease-aware, dynamically choosing stored versions that will trigger/bypass the guard appropriately
  • A new test 'should skip upgrade when current version is prerelease with different base' specifically validates the guard, and correctly uses if (!current.prerelease) return; to skip when the current package isn't a prerelease (since the test is only meaningful in that context)

4. Changeset - Present and correct

Includes @workflow/world-local and @workflow/cli as patch changes.

Minor Observations

  • The PR title says "don't suggest upgrading to pre-releases from stable releases" but the CLI fix actually prevents suggesting any upgrade when the latest is a pre-release (regardless of whether the user is on stable or pre-release). This seems intentional - if you're on a pre-release, you already know what you're doing, and if you're on stable, you definitely shouldn't be prompted to go to a pre-release.
  • The world-local fix is the inverse direction: it prevents a pre-release binary from upgrading data dirs created by a different-base stable version. So the two fixes complement each other nicely.

Verdict

No blockers or regressions. Clean, well-tested bug fix. Still in draft and CI is still running, but the changes are narrow and low-risk. Once CI completes and the PR is marked ready for review, it should be straightforward to merge.

@VaguelySerious VaguelySerious marked this pull request as ready for review March 23, 2026 23:09
@VaguelySerious VaguelySerious requested a review from a team as a code owner March 23, 2026 23:09
Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@VaguelySerious
Copy link
Copy Markdown
Member Author

@karthikscale3 I made some changes, please re-review

Copy link
Copy Markdown
Collaborator

@karthikscale3 karthikscale3 left a comment

Choose a reason for hiding this comment

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

A few issues to address:

  1. Changeset description is inverted — says "from pre-release to stable" but the code blocks "from stable to pre-release"
  2. @workflow/world-local in changeset has no corresponding code changes — will cause a spurious patch bump
  3. No test coverage for compareVersions or the new pre-release guard

"@workflow/cli": patch
---

Ensure update checks don't suggest upgrading from pre-release to stable releases
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Two issues here:

  1. Description is inverted: The code blocks updates when current=stable AND latest=prerelease (i.e. stable → prerelease). But this says "from pre-release to stable releases" which is the opposite direction. Should read something like: "Ensure update checks don't suggest upgrading to pre-release from stable releases"

  2. @workflow/world-local has no changes in this PR — there are no world-local files touched. This will cause a spurious patch version bump. Was there an init.ts change that was intended but dropped?

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

@pranaygp @karthikscale3 Please re-review. I updated the changset and PR title. Code is the same

Copy link
Copy Markdown
Collaborator

@pranaygp pranaygp left a comment

Choose a reason for hiding this comment

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

Looks good — all prior feedback has been addressed. The guard is now precise (currentIsStable && latestIsPrerelease), the changeset description is correct, world-local was properly reverted, and the scope is clean.

Two minor nits remaining (non-blocking):

  1. Line 140 comment// Always use 'latest' tag - even beta versions are published as latest is now misleading since it describes the root cause of the bug this PR fixes without noting the mitigation. @VaguelySerious posted a suggestion to delete it but it wasn't applied. Either remove it or update it to something like: // Always use 'latest' tag — beta versions may be published under this tag, so the caller filters out prerelease versions before prompting.

  2. Duplicated logic — the currentIsStable && latestIsPrerelease guard appears in both checkForUpdate() and checkForUpdateCached(). A small shouldSuggestUpdate() helper would keep them in sync. Not a blocker for this PR.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Suggested change

Signed-off-by: Peter Wielander <mittgfu@gmail.com>
@VaguelySerious VaguelySerious merged commit 5837d57 into main Mar 24, 2026
10 of 23 checks passed
@VaguelySerious VaguelySerious deleted the peter/fix-version-check-for-release branch March 24, 2026 00:29
pranaygp added a commit that referenced this pull request Mar 24, 2026
…naygp-db9e68c1

* 'main' of https://github.com/vercel/workflow: (32 commits)
  chore: bump @nestjs/* to ^11.1.17 (#1497)
  chore: bump hono to ^4.12.8 (#1495)
  Revert "Inline class serialization registration to fix 3rd-party package supp…" (#1493)
  [world] Add stream pagination and metadata endpoints (#1470)
  [cli] [world-local] Ensure update checks don't suggest upgrading from stable release to pre-releases (#1490)
  Remove NestJS Vercel integration while in experimental phase (#1485)
  feat: export semantic error types and add API reference docs (#1447)
  feat: enforce max queue deliveries in handlers with graceful failure (#1344)
  [world-postgres] Migrate client from `postgres.js` to `pg` (#1484)
  Inline class serialization registration to fix 3rd-party package support (#1480)
  [ai] Add experimental_context to DurableAgentOptions (#1489)
  [ai] Expose configured tools on DurableAgent instances (#1488)
  fix(builders): catch node builtin usage when entry fields diverge (#1455)
  [web-shared] Fix timeline duration format and precision (#1482)
  [cli] Add bulk cancel, --status filter, fix step JSON hydration (#1467)
  [utils] Re-export parseName utilities and add workflow/observability module (#1453)
  [o11y] Polish display when run data has expired (#1438)
  Add CommonJS `require()` support for class serialization detection in SWC plugin (#1144)
  fix(next): stabilize deferred canary e2e in nextjs workbenches (#1468)
  [web] Support legacy newline-delimited stream format in `useStreamReader` (#1473)
  ...
pranaygp added a commit that referenced this pull request Mar 24, 2026
…naygp-6fadd605

* 'main' of https://github.com/vercel/workflow: (73 commits)
  chore: bump next to 16.2.1 and fix deferred build (#1496)
  chore: bump nitropack to ^2.13.1 (#1501)
  chore: bump nuxt ecosystem dependencies (#1500)
  chore: bump sveltekit ecosystem (#1498)
  chore: bump express and fastify in workbenches (#1499)
  chore: bump @nestjs/* to ^11.1.17 (#1497)
  chore: bump hono to ^4.12.8 (#1495)
  Revert "Inline class serialization registration to fix 3rd-party package supp…" (#1493)
  [world] Add stream pagination and metadata endpoints (#1470)
  [cli] [world-local] Ensure update checks don't suggest upgrading from stable release to pre-releases (#1490)
  Remove NestJS Vercel integration while in experimental phase (#1485)
  feat: export semantic error types and add API reference docs (#1447)
  feat: enforce max queue deliveries in handlers with graceful failure (#1344)
  [world-postgres] Migrate client from `postgres.js` to `pg` (#1484)
  Inline class serialization registration to fix 3rd-party package support (#1480)
  [ai] Add experimental_context to DurableAgentOptions (#1489)
  [ai] Expose configured tools on DurableAgent instances (#1488)
  fix(builders): catch node builtin usage when entry fields diverge (#1455)
  [web-shared] Fix timeline duration format and precision (#1482)
  [cli] Add bulk cancel, --status filter, fix step JSON hydration (#1467)
  ...

# Conflicts:
#	packages/core/src/runtime/start.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants