Skip to content

Add workflow versioning docs#2010

Merged
pranaygp merged 10 commits into
mainfrom
pranaygp/codex/docs-versioning-page
May 18, 2026
Merged

Add workflow versioning docs#2010
pranaygp merged 10 commits into
mainfrom
pranaygp/codex/docs-versioning-page

Conversation

@pranaygp
Copy link
Copy Markdown
Contributor

@pranaygp pranaygp commented May 18, 2026

Summary

Adds a new Foundations page explaining Workflow SDK versioning semantics for both v5 and v4 docs.

The page covers:

  • default run pinning to the deployment that started the run
  • canceling and rerunning affected in-flight runs on the latest deployment
  • explicit self-upgrade patterns using deploymentId: "latest"
  • carrying serializable context such as streams and abort signals across child runs

This also links existing versioning and deploymentId: "latest" mentions back to the new Foundations page, and calls out that deploymentId is currently a Vercelism that may become a more generic version concept in the World spec later.

Follow-up cookbook pass added targeted callouts for long-lived or multi-turn patterns:

  • scheduled workflows
  • DurableAgent
  • AI SDK multi-turn sessions
  • Chat SDK sessions
  • Sandbox sessions

The docs now also distinguish v5 from v4 for child-run starts. Native start() from workflow context was added by e295bae41 / #1491, which is on main but not stable, so v5 examples encourage direct workflow-context start() and v4 keeps the step-wrapped pattern.

Validation

  • git diff --check
  • Parsed the updated v4/v5 Foundations meta.json files as JSON
  • Verified v4/v5 copies of the touched cookbook pages match before the v5-only native-start pass
  • Searched docs/content for stale v5 step-wrapped start() guidance and v4 direct-start guidance
  • Confirmed origin/stable lacks the 'use step' directive in packages/core/src/runtime/start.ts, while main has it via e295bae41 / feat: allow start() to be called directly inside workflow functions #1491

Full docs lint/typecheck were not run because this checkout does not have node_modules installed, so biome, vitest, and changeset are unavailable locally.

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 18, 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 May 18, 2026 10:49pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment May 18, 2026 10:49pm
example-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-astro-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-express-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-fastify-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-hono-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-nitro-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-nuxt-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-sveltekit-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-tanstack-start-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workbench-vite-workflow Ready Ready Preview, Comment May 18, 2026 10:49pm
workflow-docs Ready Ready Preview, ✅ 11 resolved, Open in v0 May 18, 2026 10:49pm
workflow-swc-playground Ready Ready Preview, Comment May 18, 2026 10:49pm
workflow-tarballs Ready Ready Preview, Comment May 18, 2026 10:49pm
workflow-web Ready Ready Preview, Comment May 18, 2026 10:49pm

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 18, 2026

🦋 Changeset detected

Latest commit: 7eff96c

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

This PR includes changesets to release 0 packages

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

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 May 18, 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.031s (-28.3% 🟢) 1.005s (~) 0.974s 10 1.00x
💻 Local Express 0.036s (-19.6% 🟢) 1.005s (~) 0.970s 10 1.15x
🐘 Postgres Express 0.045s (-21.9% 🟢) 1.011s (~) 0.966s 10 1.47x
🐘 Postgres Nitro 0.046s (-51.3% 🟢) 1.013s (-2.9%) 0.967s 10 1.50x
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.070s (-4.9%) 2.006s (~) 0.936s 10 1.00x
💻 Local Nitro 1.071s (-5.3% 🟢) 2.006s (~) 0.935s 10 1.00x
🐘 Postgres Express 1.079s (-5.9% 🟢) 2.009s (~) 0.930s 10 1.01x
🐘 Postgres Nitro 1.081s (-5.2% 🟢) 2.010s (~) 0.929s 10 1.01x
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 10.396s (-4.4%) 11.018s (~) 0.622s 3 1.00x
🐘 Postgres Express 10.402s (-5.1% 🟢) 11.016s (~) 0.614s 3 1.00x
💻 Local Express 10.411s (-4.7%) 11.023s (~) 0.612s 3 1.00x
💻 Local Nitro 10.412s (-4.9%) 11.022s (~) 0.610s 3 1.00x
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 13.432s (-10.3% 🟢) 14.027s (-6.7% 🟢) 0.595s 5 1.00x
🐘 Postgres Express 13.435s (-7.9% 🟢) 14.017s (-6.7% 🟢) 0.581s 5 1.00x
🐘 Postgres Nitro 13.484s (-7.6% 🟢) 14.017s (-6.7% 🟢) 0.533s 5 1.00x
💻 Local Nitro 13.489s (-10.4% 🟢) 14.027s (-12.5% 🟢) 0.538s 5 1.00x
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 11.875s (-29.2% 🟢) 12.022s (-29.4% 🟢) 0.147s 8 1.00x
💻 Local Express 11.890s (-28.4% 🟢) 12.022s (-29.4% 🟢) 0.132s 8 1.00x
🐘 Postgres Express 11.941s (-14.7% 🟢) 12.391s (-15.1% 🟢) 0.450s 8 1.01x
🐘 Postgres Nitro 11.944s (-14.5% 🟢) 12.266s (-14.3% 🟢) 0.321s 8 1.01x
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.136s (-9.8% 🟢) 2.007s (~) 0.870s 15 1.00x
🐘 Postgres Nitro 1.137s (-10.8% 🟢) 2.007s (~) 0.870s 15 1.00x
💻 Local Nitro 1.172s (-28.2% 🟢) 2.006s (-3.3%) 0.834s 15 1.03x
💻 Local Express 1.183s (-20.6% 🟢) 2.006s (~) 0.823s 15 1.04x
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.192s (-49.3% 🟢) 2.007s (-33.3% 🟢) 0.815s 15 1.00x
🐘 Postgres Express 1.224s (-48.2% 🟢) 2.007s (-33.3% 🟢) 0.783s 15 1.03x
💻 Local Express 1.703s (-42.3% 🟢) 2.005s (-41.9% 🟢) 0.303s 15 1.43x
💻 Local Nitro 1.704s (-45.8% 🟢) 2.005s (-48.4% 🟢) 0.302s 15 1.43x
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.305s (-62.5% 🟢) 2.008s (-49.9% 🟢) 0.702s 15 1.00x
🐘 Postgres Express 1.324s (-62.0% 🟢) 2.008s (-49.9% 🟢) 0.684s 15 1.01x
💻 Local Express 4.638s (-44.4% 🟢) 5.179s (-42.6% 🟢) 0.541s 6 3.55x
💻 Local Nitro 4.910s (-41.2% 🟢) 5.511s (-38.9% 🟢) 0.601s 6 3.76x
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.155s (-8.1% 🟢) 2.009s (~) 0.854s 15 1.00x
🐘 Postgres Nitro 1.163s (-7.5% 🟢) 2.010s (~) 0.847s 15 1.01x
💻 Local Express 1.386s (-26.8% 🟢) 2.006s (-15.2% 🟢) 0.620s 15 1.20x
💻 Local Nitro 1.388s (-25.6% 🟢) 2.006s (-14.3% 🟢) 0.618s 15 1.20x
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.199s (-48.8% 🟢) 2.008s (-33.3% 🟢) 0.810s 15 1.00x
🐘 Postgres Nitro 1.199s (-48.7% 🟢) 2.007s (-33.3% 🟢) 0.808s 15 1.00x
💻 Local Express 1.828s (-41.6% 🟢) 2.222s (-40.9% 🟢) 0.394s 14 1.53x
💻 Local Nitro 1.935s (-36.9% 🟢) 2.316s (-40.4% 🟢) 0.381s 13 1.61x
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.305s (-62.7% 🟢) 2.008s (-49.9% 🟢) 0.702s 15 1.00x
🐘 Postgres Nitro 1.309s (-62.4% 🟢) 2.009s (-49.9% 🟢) 0.700s 15 1.00x
💻 Local Express 5.446s (-38.1% 🟢) 5.849s (-36.9% 🟢) 0.403s 6 4.17x
💻 Local Nitro 5.557s (-39.2% 🟢) 6.179s (-38.4% 🟢) 0.622s 6 4.26x
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.418s (-50.1% 🟢) 1.006s (-1.6%) 0.588s 60 1.00x
🐘 Postgres Nitro 0.459s (-44.0% 🟢) 1.006s (~) 0.547s 60 1.10x
💻 Local Nitro 0.468s (-52.2% 🟢) 1.004s (-8.2% 🟢) 0.535s 60 1.12x
💻 Local Express 0.469s (-52.4% 🟢) 1.004s (-6.7% 🟢) 0.535s 60 1.12x
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.047s (-47.0% 🟢) 1.705s (-24.5% 🟢) 0.659s 53 1.00x
🐘 Postgres Nitro 1.066s (-44.7% 🟢) 1.576s (-25.0% 🟢) 0.510s 58 1.02x
💻 Local Nitro 1.185s (-61.0% 🟢) 2.006s (-46.6% 🟢) 0.821s 45 1.13x
💻 Local Express 1.191s (-60.5% 🟢) 2.005s (-44.1% 🟢) 0.815s 45 1.14x
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.030s (-49.1% 🟢) 2.427s (-44.4% 🟢) 0.397s 50 1.00x
🐘 Postgres Nitro 2.128s (-48.2% 🟢) 2.660s (-42.2% 🟢) 0.532s 46 1.05x
💻 Local Nitro 2.704s (-70.9% 🟢) 3.032s (-69.7% 🟢) 0.328s 40 1.33x
💻 Local Express 2.719s (-70.5% 🟢) 3.057s (-69.5% 🟢) 0.338s 40 1.34x
workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.163s (-42.4% 🟢) 1.005s (~) 0.843s 60 1.00x
🐘 Postgres Nitro 0.178s (-37.0% 🟢) 1.006s (~) 0.827s 60 1.10x
💻 Local Express 0.455s (-18.8% 🟢) 1.004s (~) 0.550s 60 2.80x
💻 Local Nitro 0.469s (-22.4% 🟢) 1.004s (-1.7%) 0.535s 60 2.89x
workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.286s (-43.9% 🟢) 1.006s (~) 0.720s 90 1.00x
🐘 Postgres Nitro 0.295s (-40.5% 🟢) 1.006s (~) 0.711s 90 1.03x
💻 Local Nitro 2.205s (-13.1% 🟢) 2.944s (-2.2%) 0.738s 31 7.71x
💻 Local Express 2.226s (-11.4% 🟢) 2.943s (-2.2%) 0.717s 31 7.78x
workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.582s (-28.9% 🟢) 1.007s (-1.0%) 0.425s 120 1.00x
🐘 Postgres Nitro 0.634s (-19.7% 🟢) 1.006s (~) 0.372s 120 1.09x
💻 Local Nitro 10.021s (-10.5% 🟢) 10.611s (-9.0% 🟢) 0.590s 12 17.21x
💻 Local Express 10.042s (-10.3% 🟢) 10.694s (-10.4% 🟢) 0.652s 12 17.25x
Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.132s (+468.5% 🔺) 2.005s (+99.6% 🔺) 0.011s (-13.2% 🟢) 2.018s (+98.2% 🔺) 0.886s 10 1.00x
💻 Local Nitro 1.133s (+430.4% 🔺) 2.005s (+99.6% 🔺) 0.011s (-15.2% 🟢) 2.018s (+98.1% 🔺) 0.885s 10 1.00x
🐘 Postgres Nitro 1.135s (+453.6% 🔺) 2.001s (+100.2% 🔺) 0.001s (-20.0% 🟢) 2.010s (+98.7% 🔺) 0.875s 10 1.00x
🐘 Postgres Express 1.135s (+453.5% 🔺) 1.999s (+100.2% 🔺) 0.001s (-25.0% 🟢) 2.010s (+98.7% 🔺) 0.875s 10 1.00x
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.492s (+136.8% 🔺) 2.002s (+98.9% 🔺) 0.003s (-30.4% 🟢) 2.023s (+97.8% 🔺) 0.531s 30 1.00x
🐘 Postgres Nitro 1.519s (+143.4% 🔺) 2.004s (+99.0% 🔺) 0.004s (-2.5%) 2.027s (+98.2% 🔺) 0.507s 30 1.02x
💻 Local Nitro 1.707s (+103.5% 🔺) 2.013s (+98.9% 🔺) 0.009s (-4.3%) 2.203s (+97.4% 🔺) 0.496s 28 1.14x
💻 Local Express 1.923s (+154.0% 🔺) 2.011s (+95.4% 🔺) 0.009s (-8.2% 🟢) 2.422s (+132.9% 🔺) 0.499s 25 1.29x
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.627s (-34.7% 🟢) 1.033s (-19.2% 🟢) 0.000s (-20.7% 🟢) 1.045s (-20.0% 🟢) 0.418s 58 1.00x
🐘 Postgres Nitro 0.662s (-31.7% 🟢) 1.029s (-17.5% 🟢) 0.000s (-17.2% 🟢) 1.049s (-16.6% 🟢) 0.387s 58 1.05x
💻 Local Express 1.365s (+11.5% 🔺) 2.015s (~) 0.000s (+40.0% 🔺) 2.018s (~) 0.652s 30 2.18x
💻 Local Nitro 1.561s (+27.6% 🔺) 2.016s (~) 0.000s (+364.3% 🔺) 2.197s (+8.7% 🔺) 0.636s 28 2.49x
fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.228s (-30.7% 🟢) 1.869s (-14.2% 🟢) 0.000s (NaN%) 1.900s (-13.6% 🟢) 0.673s 32 1.00x
🐘 Postgres Nitro 1.325s (-26.1% 🟢) 1.997s (-6.7% 🟢) 0.000s (+86.7% 🔺) 2.019s (-7.2% 🟢) 0.694s 30 1.08x
💻 Local Express 3.158s (-8.9% 🟢) 4.028s (~) 0.001s (-33.3% 🟢) 4.030s (~) 0.873s 15 2.57x
💻 Local Nitro 3.187s (-5.9% 🟢) 4.029s (~) 0.000s (-75.0% 🟢) 4.031s (~) 0.844s 15 2.60x

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 12/21
🐘 Postgres Express 17/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 16/21
Nitro 🐘 Postgres 17/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)
  • 🌐 Redis: Community world (local development)
  • 🌐 Redis + BullMQ: Community world (local development)
  • 🌐 Cloudflare: Community world (local development)
  • 🌐 MySQL: Community world (local development)
  • 🌐 Azure: Community world (local development)
  • 🌐 NATS JetStream: Community world (local development)
  • 🌐 Upstash: Community world (local development)

📋 View full workflow run


Some benchmark jobs failed:

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

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 18, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 1196 4 219 1419
✅ 💻 Local Development 1587 0 219 1806
✅ 📦 Local Production 1458 0 219 1677
❌ 🐘 Local Postgres 1585 2 219 1806
✅ 🪟 Windows 129 0 0 129
✅ 📋 Other 727 0 176 903
Total 6682 6 1052 7740

❌ Failed Tests

▲ Vercel Production (4 failed)

astro (1 failed):

  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step

hono (2 failed):

  • outputStreamWorkflow no startIndex (reads all chunks)
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KRYMPWTNKF0CE4BP27X7R946 | 🔍 observability

nextjs-webpack (1 failed):

🐘 Local Postgres (2 failed)

nextjs-webpack-stable-lazy-discovery-disabled (1 failed):

  • DurableAgent e2e core basic text response

nextjs-webpack-stable-lazy-discovery-enabled (1 failed):

  • addTenWorkflow | wrun_01KRYMBT8QHFK9EZ9FDY03D9G0

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
❌ astro 102 1 26
✅ example 103 0 26
✅ express 103 0 26
✅ fastify 103 0 26
❌ hono 101 2 26
✅ nextjs-turbopack 127 0 2
❌ nextjs-webpack 126 1 2
✅ nitro 103 0 26
✅ nuxt 103 0 26
✅ sveltekit 122 0 7
✅ vite 103 0 26
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 104 0 25
✅ express-stable 104 0 25
✅ fastify-stable 104 0 25
✅ hono-stable 104 0 25
✅ nextjs-turbopack-canary 110 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 129 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 129 0 0
✅ nextjs-webpack-canary 110 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 129 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 129 0 0
✅ nitro-stable 104 0 25
✅ nuxt-stable 104 0 25
✅ sveltekit-stable 123 0 6
✅ vite-stable 104 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 104 0 25
✅ express-stable 104 0 25
✅ fastify-stable 104 0 25
✅ hono-stable 104 0 25
✅ nextjs-turbopack-canary 110 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 129 0 0
✅ nextjs-webpack-canary 110 0 19
✅ nextjs-webpack-stable-lazy-discovery-disabled 129 0 0
✅ nextjs-webpack-stable-lazy-discovery-enabled 129 0 0
✅ nitro-stable 104 0 25
✅ nuxt-stable 104 0 25
✅ sveltekit-stable 123 0 6
✅ vite-stable 104 0 25
❌ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 104 0 25
✅ express-stable 104 0 25
✅ fastify-stable 104 0 25
✅ hono-stable 104 0 25
✅ nextjs-turbopack-canary 110 0 19
✅ nextjs-turbopack-stable-lazy-discovery-disabled 129 0 0
✅ nextjs-turbopack-stable-lazy-discovery-enabled 129 0 0
✅ nextjs-webpack-canary 110 0 19
❌ nextjs-webpack-stable-lazy-discovery-disabled 128 1 0
❌ nextjs-webpack-stable-lazy-discovery-enabled 128 1 0
✅ nitro-stable 104 0 25
✅ nuxt-stable 104 0 25
✅ sveltekit-stable 123 0 6
✅ vite-stable 104 0 25
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 129 0 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 104 0 25
✅ e2e-local-dev-tanstack-start- 104 0 25
✅ e2e-local-postgres-nest-stable 104 0 25
✅ e2e-local-postgres-tanstack-start- 104 0 25
✅ e2e-local-prod-nest-stable 104 0 25
✅ e2e-local-prod-tanstack-start- 104 0 25
✅ e2e-vercel-prod-tanstack-start 103 0 26

📋 View full workflow run


Some E2E test jobs failed:

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

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 new "Versioning" Foundations page (v4 and v5) explaining default run pinning to deployments, recovery via cancel + rerun, opting into newer code with deploymentId: "latest", and carrying serializable state/streams across child-run continuations. Existing references to deploymentId: "latest" and versioning behavior are linked back to the new page. Cookbook pages also pick up callouts about long-lived / multi-turn patterns and, on v5 only, are updated to reflect that start() can now be called directly inside "use workflow" functions (via #1491), while v4 retains the step-wrapped pattern.

Changes:

  • New foundations/versioning.mdx for both v4 and v5, plus meta.json + index.mdx + linkbacks from vercel-world, start.mdx, and code-transform.mdx.
  • v5 cookbook + migration guides updated to drop "use step" wrappers around start() in favor of calling start() directly from the workflow function; v4 keeps the step-wrapped pattern.
  • Added "Versioning" callouts to scheduling, durable-agent, ai-sdk, chat-sdk, and sandbox cookbooks; fixed a few small wording/grammar issues in code-transform.mdx.

Reviewed changes

Copilot reviewed 32 out of 32 changed files in this pull request and generated no comments.

Show a summary per file
File Description
docs/content/docs/v5/foundations/versioning.mdx New Foundations page explaining run pinning, recovery, and explicit upgrade boundaries.
docs/content/docs/v4/foundations/versioning.mdx v4 counterpart; uses step-wrapped continueDigest/continueExportOnLatest helpers.
docs/content/docs/v{4,5}/foundations/{meta.json,index.mdx} Surface the new Versioning page in nav and the foundations index.
docs/content/docs/v{4,5}/deploying/world/vercel-world.mdx Link the deployment-pinning section to the new Versioning page.
docs/content/docs/v{4,5}/how-it-works/code-transform.mdx Link "atomic versioning" reference; fix "function assume" / "from being upgraded" wording.
docs/content/docs/v{4,5}/api-reference/workflow-api/start.mdx Soften "Vercel-specific" to "Vercelism", mention possible version rename, link Versioning. v5 also notes native workflow-context start().
docs/content/docs/v5/foundations/starting-workflows.mdx Note v5 can call start() from workflows; link Composition + Versioning.
docs/content/docs/v5/cookbook/common-patterns/workflow-composition.mdx Replace step-wrapped child spawn with direct start() call.
docs/content/docs/v5/cookbook/advanced/child-workflows.mdx Inline batched start() calls; rename spawnReportChunkstartReportChunk; update tips.
docs/content/docs/v{4,5}/cookbook/common-patterns/scheduling.mdx Callout linking to Versioning for long-lived schedules.
docs/content/docs/v{4,5}/cookbook/agent-patterns/durable-agent.mdx Callout linking to Versioning for multi-turn agents.
docs/content/docs/v{4,5}/cookbook/integrations/{ai-sdk,chat-sdk,sandbox}.mdx Callouts linking to Versioning for long-lived sessions.
docs/content/docs/v4/cookbook/common-patterns/workflow-composition.mdx Update deploymentId: "latest" callout wording + link to Versioning.
docs/content/docs/v4/cookbook/advanced/child-workflows.mdx Link Versioning from the deploymentId: "latest" tip.
docs/content/docs/v4/changelog/eager-processing.mdx Reword to "step-wrapped start() helper" to match v4 phrasing.
docs/content/docs/v5/migration-guides/{migrating-from-trigger-dev,migrating-from-temporal,migrating-from-inngest,migrating-from-aws-step-functions}.mdx Update to v5 native workflow-context start(); only collect step retains "use step".

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

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.

Comment-only review

The new versioning foundations page is a useful addition — the four sections (default pinning → recovery → self-upgrade via start({ deploymentId: "latest" }) → carrying serializable context forward) cover the model clearly, and the v4-vs-v5 differentiation (step-wrapped start() vs direct start() from workflow context, gated on whether PR #1491 has landed on the target branch) is correctly handled. The cross-links from cookbook patterns to the new foundations page tie everything together nicely.

Three observations — see inline.

Inline comments

  1. Wording: this PR introduces "Vercelism" as a new term and uses it 6 times across the diff, including replacing existing "Vercel-specific feature" wording in two <Callout>s. "Vercelism" reads as informal slang and isn't part of the established docs vocabulary. The existing tone uses "Vercel-specific", "Vercel deployments", "Vercel World", "non-Vercel" — all precise. Suggested restoring the prior phrasing. This is the only thing I'd consider blocking.
  2. Broken link in v4: versioning.mdx references /docs/foundations/cancellation in its related frontmatter, but that page is v5-only. Easy fix.
  3. Missing changeset: convention for docs-only PRs is an empty ---\n--- file.

A few small things I noticed

  • The pre-emptively check for a conflict with getHookByToken() example (line 96 of versioning.mdx) — nice that you noted the race window in a later doc (#2011 callout), but this page doesn't have that warning. Worth a cross-link or <Callout type="warn"> here too, since the recovery pattern uses both start() and deploymentId: "latest" together.
  • The _idempotency / using syntax is great. Worth confirming the docs site's syntax highlighter renders it — I noticed #1988 recently fixed a homepage link lint regression, and the using syntax is TypeScript 5.2+ specific.
  • dailyDigest example (line 137-152): the state parameter is DigestState but the workflow doesn't actually use state.userId after the first sendDigest call — pattern is fine, just noting if you wanted to make the example illustrate state evolution more vividly, having sendDigest read state.lastSentAt (e.g. to avoid sending duplicates) would make the carry-forward intent clearer.

Overall the page reads well — once the Vercelism wording is restored and the v4 link is fixed, this should be good to go.

Comment thread docs/content/docs/v5/api-reference/workflow-api/start.mdx Outdated
Comment thread docs/content/docs/v4/foundations/versioning.mdx
Comment thread docs/content/docs/v5/foundations/versioning.mdx
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.

All three review comments addressed in 7eff96c — Vercelism wording reverted, v4 broken cancellation link fixed, empty changeset added. LGTM, approving.

@github-actions
Copy link
Copy Markdown
Contributor

Backport PR opened against stable: #2014. Merge conflicts were resolved by AI — please review carefully.

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