Skip to content

fix(next): respect basePath for workflow URLs#2732

Draft
NathanColosimo wants to merge 2 commits into
mainfrom
nathanc/fix-next-base-path
Draft

fix(next): respect basePath for workflow URLs#2732
NathanColosimo wants to merge 2 commits into
mainfrom
nathanc/fix-next-base-path

Conversation

@NathanColosimo

Copy link
Copy Markdown
Contributor

Summary

  • propagate Next.js basePath through withWorkflow() as WORKFLOW_BASE_PATH
  • include the base path in workflow and step metadata URLs
  • route world-local queue deliveries under the configured base URL path

Fixes #1864.

This is separate from #2729; it addresses workflow runtime URL construction rather than project root discovery.

Tests

  • pnpm --filter @workflow/utils build
  • pnpm --filter @workflow/world-local build
  • pnpm --filter @workflow/core... build
  • pnpm --filter @workflow/next... build
  • pnpm vitest run src/base-path.test.ts from packages/utils
  • pnpm vitest run src/runtime/base-url.test.ts from packages/core
  • pnpm vitest run src/index.test.ts from packages/next
  • pnpm vitest run src/config.test.ts src/queue.test.ts from packages/world-local
  • pnpm changeset status --since=main

@changeset-bot

changeset-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 18dd2c5

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

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

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

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 Jul 1, 2026 12:03am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jul 1, 2026 12:03am
example-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-astro-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-express-workflow Building Building Preview, Comment Jul 1, 2026 12:03am
workbench-fastify-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-hono-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-nitro-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-nuxt-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-sveltekit-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workbench-vite-workflow Ready Ready Preview, Comment Jul 1, 2026 12:03am
workflow-docs Ready Ready Preview, Comment, Open in v0 Jul 1, 2026 12:03am
workflow-swc-playground Ready Ready Preview, Comment Jul 1, 2026 12:03am
workflow-tarballs Ready Ready Preview, Comment Jul 1, 2026 12:03am
workflow-web Ready Ready Preview, Comment Jul 1, 2026 12:03am

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

📊 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.045s (+2.0%) 1.006s (~) 0.961s 10 1.00x
💻 Local Express 0.046s (~) 1.006s (~) 0.960s 10 1.03x
💻 Local Next.js (Turbopack) 0.056s (+3.2%) 1.006s (~) 0.951s 10 1.23x
🐘 Postgres Next.js (Turbopack) 0.061s (-45.0% 🟢) 1.012s (-2.7%) 0.951s 10 1.35x
🐘 Postgres Nitro 0.064s (+2.4%) 1.012s (~) 0.948s 10 1.43x
🐘 Postgres Express 0.065s (-10.8% 🟢) 1.011s (~) 0.946s 10 1.45x
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.077s (~) 2.007s (~) 0.930s 10 1.00x
💻 Local Express 1.081s (~) 2.006s (~) 0.925s 10 1.00x
💻 Local Next.js (Turbopack) 1.089s (+0.7%) 2.007s (~) 0.918s 10 1.01x
🐘 Postgres Express 1.089s (-0.7%) 2.009s (~) 0.920s 10 1.01x
🐘 Postgres Nitro 1.095s (~) 2.011s (~) 0.916s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.100s (~) 2.010s (~) 0.910s 10 1.02x
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 10.424s (~) 11.022s (~) 0.597s 3 1.00x
💻 Local Express 10.451s (~) 11.022s (~) 0.571s 3 1.00x
🐘 Postgres Express 10.480s (~) 11.021s (~) 0.541s 3 1.01x
🐘 Postgres Nitro 10.487s (~) 11.020s (~) 0.534s 3 1.01x
🐘 Postgres Next.js (Turbopack) 10.505s (+1.0%) 11.015s (~) 0.510s 3 1.01x
💻 Local Next.js (Turbopack) 10.539s (+0.6%) 11.023s (~) 0.484s 3 1.01x
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 13.556s (-0.8%) 14.019s (~) 0.463s 5 1.00x
💻 Local Express 13.614s (-0.9%) 14.027s (~) 0.413s 5 1.00x
💻 Local Nitro 13.633s (~) 14.027s (~) 0.394s 5 1.01x
🐘 Postgres Express 13.677s (~) 14.020s (~) 0.343s 5 1.01x
💻 Local Next.js (Turbopack) 13.696s (~) 14.028s (~) 0.332s 5 1.01x
🐘 Postgres Next.js (Turbopack) 13.834s (+1.4%) 14.021s (~) 0.187s 5 1.02x
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 12.147s (~) 13.025s (~) 0.878s 7 1.00x
💻 Local Nitro 12.148s (~) 12.775s (-1.9%) 0.626s 8 1.00x
🐘 Postgres Nitro 12.156s (~) 13.021s (~) 0.864s 7 1.00x
🐘 Postgres Express 12.175s (-2.5%) 13.019s (~) 0.844s 7 1.00x
💻 Local Next.js (Turbopack) 12.266s (+0.7%) 13.025s (~) 0.759s 7 1.01x
🐘 Postgres Next.js (Turbopack) 12.475s (~) 13.017s (+0.8%) 0.542s 7 1.03x
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.178s (~) 2.007s (~) 0.829s 15 1.00x
🐘 Postgres Nitro 1.201s (~) 2.008s (~) 0.807s 15 1.02x
🐘 Postgres Next.js (Turbopack) 1.213s (-4.6%) 2.009s (-1.6%) 0.795s 15 1.03x
💻 Local Nitro 1.351s (-3.5%) 2.006s (~) 0.656s 15 1.15x
💻 Local Next.js (Turbopack) 1.372s (-3.6%) 2.007s (~) 0.635s 15 1.16x
💻 Local Express 1.385s (-0.5%) 2.007s (~) 0.622s 15 1.18x
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.306s (-3.6%) 2.675s (+15.5% 🔺) 1.369s 12 1.00x
🐘 Postgres Next.js (Turbopack) 1.329s (~) 3.010s (+21.4% 🔺) 1.681s 10 1.02x
🐘 Postgres Nitro 1.339s (+1.3%) 2.592s (-8.3% 🟢) 1.252s 12 1.03x
💻 Local Nitro 2.293s (-9.0% 🟢) 3.009s (-3.2%) 0.715s 10 1.76x
💻 Local Next.js (Turbopack) 2.408s (-12.2% 🟢) 3.010s (-3.2%) 0.602s 10 1.84x
💻 Local Express 2.417s (-6.4% 🟢) 3.009s (~) 0.592s 10 1.85x
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.594s (~) 4.010s (~) 2.416s 8 1.00x
🐘 Postgres Nitro 1.653s (+4.1%) 4.143s (+3.2%) 2.489s 8 1.04x
🐘 Postgres Next.js (Turbopack) 2.838s (+55.9% 🔺) 5.681s (+16.1% 🔺) 2.843s 6 1.78x
💻 Local Express 3.902s (-41.4% 🟢) 4.870s (-34.3% 🟢) 0.968s 7 2.45x
💻 Local Next.js (Turbopack) 4.458s (-43.1% 🟢) 5.013s (-37.5% 🟢) 0.555s 6 2.80x
💻 Local Nitro 4.591s (-25.3% 🟢) 5.012s (-26.5% 🟢) 0.421s 6 2.88x
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.193s (+0.9%) 2.007s (~) 0.814s 15 1.00x
🐘 Postgres Nitro 1.194s (+1.9%) 2.008s (~) 0.814s 15 1.00x
🐘 Postgres Express 1.200s (+1.7%) 2.006s (~) 0.807s 15 1.01x
💻 Local Nitro 1.398s (+2.0%) 2.007s (~) 0.608s 15 1.17x
💻 Local Next.js (Turbopack) 1.441s (+0.8%) 2.006s (~) 0.566s 15 1.21x
💻 Local Express 1.443s (~) 2.007s (~) 0.564s 15 1.21x
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 1.306s (-7.1% 🟢) 3.008s (+18.8% 🔺) 1.702s 10 1.00x
🐘 Postgres Express 1.334s (+2.0%) 2.392s (-3.2%) 1.059s 13 1.02x
🐘 Postgres Nitro 1.337s (+1.8%) 2.394s (-7.7% 🟢) 1.057s 13 1.02x
💻 Local Next.js (Turbopack) 2.362s (-11.5% 🟢) 3.009s (-6.3% 🟢) 0.647s 10 1.81x
💻 Local Nitro 2.436s (-11.0% 🟢) 3.009s (-10.0% 🟢) 0.572s 10 1.87x
💻 Local Express 2.448s (-7.2% 🟢) 3.009s (~) 0.561s 10 1.87x
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.595s (~) 4.136s (~) 2.541s 8 1.00x
🐘 Postgres Nitro 1.624s (-1.2%) 4.299s (~) 2.675s 7 1.02x
🐘 Postgres Next.js (Turbopack) 3.046s (+16.9% 🔺) 6.018s (+15.0% 🔺) 2.972s 5 1.91x
💻 Local Express 4.634s (-26.8% 🟢) 5.854s (-14.1% 🟢) 1.220s 6 2.90x
💻 Local Next.js (Turbopack) 5.336s (-16.2% 🟢) 6.016s (-16.7% 🟢) 0.680s 5 3.34x
💻 Local Nitro 5.526s (-14.2% 🟢) 6.215s (-16.2% 🟢) 0.689s 5 3.46x
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Next.js (Turbopack) 0.537s (-11.6% 🟢) 1.007s (-4.3%) 0.470s 60 1.00x
💻 Local Nitro 0.543s (-10.0% 🟢) 1.005s (-3.3%) 0.462s 60 1.01x
🐘 Postgres Express 0.561s (+1.6%) 1.023s (+1.6%) 0.462s 59 1.05x
🐘 Postgres Nitro 0.580s (+2.9%) 1.024s (~) 0.443s 59 1.08x
💻 Local Next.js (Turbopack) 0.595s (-10.1% 🟢) 1.005s (-5.0%) 0.411s 60 1.11x
💻 Local Express 0.611s (+10.6% 🔺) 1.022s (+1.7%) 0.412s 59 1.14x
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.262s (-6.6% 🟢) 2.007s (-1.1%) 0.745s 45 1.00x
🐘 Postgres Next.js (Turbopack) 1.310s (-12.0% 🟢) 2.007s (-6.1% 🟢) 0.698s 45 1.04x
🐘 Postgres Nitro 1.312s (~) 2.030s (-1.1%) 0.718s 45 1.04x
💻 Local Nitro 1.410s (-1.4%) 2.006s (~) 0.596s 45 1.12x
💻 Local Express 1.477s (+5.5% 🔺) 2.006s (~) 0.529s 45 1.17x
💻 Local Next.js (Turbopack) 1.523s (+2.3%) 2.028s (+1.1%) 0.505s 45 1.21x
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.549s (-3.1%) 3.085s (~) 0.536s 39 1.00x
🐘 Postgres Nitro 2.710s (+4.1%) 3.088s (+1.8%) 0.378s 39 1.06x
🐘 Postgres Next.js (Turbopack) 2.838s (-3.7%) 3.137s (-9.1% 🟢) 0.300s 39 1.11x
💻 Local Nitro 3.078s (-3.1%) 3.596s (-8.8% 🟢) 0.518s 34 1.21x
💻 Local Express 3.257s (+9.0% 🔺) 4.010s (+15.7% 🔺) 0.753s 30 1.28x
💻 Local Next.js (Turbopack) 3.313s (+3.5%) 4.009s (~) 0.697s 30 1.30x
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.173s (-25.3% 🟢) 1.006s (~) 0.833s 60 1.00x
🐘 Postgres Nitro 0.211s (-1.8%) 1.006s (~) 0.795s 60 1.22x
🐘 Postgres Express 0.215s (-3.3%) 1.006s (~) 0.791s 60 1.24x
💻 Local Express 0.527s (+17.2% 🔺) 1.005s (~) 0.478s 60 3.05x
💻 Local Nitro 0.542s (+26.1% 🔺) 1.022s (+1.7%) 0.480s 59 3.13x
💻 Local Next.js (Turbopack) 0.647s (+2.9%) 1.005s (~) 0.358s 60 3.74x
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.283s (-10.9% 🟢) 1.017s (~) 0.734s 89 1.00x
🐘 Postgres Nitro 0.321s (-4.6%) 1.006s (~) 0.685s 90 1.13x
🐘 Postgres Express 0.326s (-2.2%) 1.006s (~) 0.680s 90 1.15x
💻 Local Express 2.442s (+12.3% 🔺) 3.009s (+8.8% 🔺) 0.567s 30 8.62x
💻 Local Nitro 2.467s (+28.2% 🔺) 3.010s (+20.0% 🔺) 0.543s 30 8.71x
💻 Local Next.js (Turbopack) 2.555s (-12.7% 🟢) 3.009s (-10.9% 🟢) 0.454s 30 9.02x
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.518s (+3.5%) 3.167s (+25.9% 🔺) 2.649s 38 1.00x
🐘 Postgres Express 0.518s (-4.7%) 1.059s (-5.3% 🟢) 0.540s 114 1.00x
🐘 Postgres Nitro 0.522s (-4.9%) 1.069s (-5.3% 🟢) 0.546s 113 1.01x
💻 Local Nitro 5.741s (-40.5% 🟢) 8.894s (-17.5% 🟢) 3.153s 15 11.08x
💻 Local Express 5.823s (-37.0% 🟢) 8.760s (-16.1% 🟢) 2.937s 15 11.24x
💻 Local Next.js (Turbopack) 6.348s (-41.2% 🟢) 9.487s (-19.3% 🟢) 3.139s 13 12.26x
Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 1.138s (~) 1.967s (~) 0.012s (+0.8%) 2.020s (~) 0.881s 10 1.00x
💻 Local Nitro 1.148s (-0.7%) 2.004s (~) 0.010s (-9.3% 🟢) 2.017s (~) 0.869s 10 1.01x
🐘 Postgres Express 1.153s (~) 1.992s (~) 0.001s (-8.3% 🟢) 2.010s (~) 0.856s 10 1.01x
💻 Local Express 1.160s (+1.7%) 2.005s (~) 0.012s (+14.2% 🔺) 2.020s (~) 0.860s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.166s (-4.5%) 2.001s (+0.6%) 0.001s (+33.3% 🔺) 2.011s (~) 0.845s 10 1.02x
🐘 Postgres Nitro 1.174s (-1.1%) 1.999s (~) 0.001s (-16.7% 🟢) 2.010s (~) 0.836s 10 1.03x
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.540s (-2.9%) 2.004s (-1.6%) 0.005s (~) 2.026s (-1.6%) 0.486s 30 1.00x
💻 Local Nitro 1.554s (~) 2.011s (~) 0.013s (-4.5%) 2.027s (~) 0.473s 30 1.01x
💻 Local Express 1.560s (+1.3%) 2.010s (~) 0.012s (-8.9% 🟢) 2.025s (~) 0.465s 30 1.01x
🐘 Postgres Nitro 1.591s (+1.1%) 2.003s (~) 0.005s (-0.6%) 2.027s (~) 0.436s 30 1.03x
💻 Local Next.js (Turbopack) 1.595s (+1.0%) 1.971s (~) 0.011s (-3.7%) 2.025s (~) 0.430s 30 1.04x
🐘 Postgres Next.js (Turbopack) 1.596s (-15.6% 🟢) 2.010s (-11.2% 🟢) 0.005s (-36.0% 🟢) 2.025s (-12.1% 🟢) 0.429s 30 1.04x
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.753s (-2.3%) 1.067s (-3.5%) 0.000s (-80.4% 🟢) 1.101s (-1.5%) 0.349s 55 1.00x
🐘 Postgres Express 0.792s (+1.7%) 1.041s (-1.8%) 0.000s (+Infinity% 🔺) 1.059s (-1.8%) 0.267s 57 1.05x
🐘 Postgres Next.js (Turbopack) 1.017s (-26.2% 🟢) 1.450s (-26.0% 🟢) 0.000s (+Infinity% 🔺) 1.460s (-27.1% 🟢) 0.443s 42 1.35x
💻 Local Next.js (Turbopack) 1.299s (-6.0% 🟢) 1.977s (~) 0.001s (+50.0% 🔺) 2.016s (~) 0.718s 30 1.73x
💻 Local Nitro 1.330s (+2.5%) 2.014s (~) 0.001s (+128.6% 🔺) 2.017s (~) 0.686s 30 1.77x
💻 Local Express 1.365s (+7.2% 🔺) 1.980s (-1.6%) 0.000s (-43.5% 🟢) 1.983s (-1.6%) 0.619s 31 1.81x
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.554s (-10.2% 🟢) 2.170s (-5.2% 🟢) 0.000s (-100.0% 🟢) 2.186s (-5.2% 🟢) 0.633s 28 1.00x
🐘 Postgres Nitro 1.990s (+5.2% 🔺) 2.605s (+7.0% 🔺) 0.000s (-100.0% 🟢) 2.645s (+8.0% 🔺) 0.656s 23 1.28x
🐘 Postgres Next.js (Turbopack) 2.662s (-5.8% 🟢) 3.162s (-5.8% 🟢) 0.000s (+Infinity% 🔺) 3.177s (-6.3% 🟢) 0.515s 19 1.71x
💻 Local Nitro 3.152s (-14.5% 🟢) 3.839s (-11.0% 🟢) 0.000s (-31.9% 🟢) 3.842s (-11.0% 🟢) 0.689s 16 2.03x
💻 Local Next.js (Turbopack) 3.228s (-7.4% 🟢) 3.866s (-3.1%) 0.001s (-31.3% 🟢) 3.905s (-3.2%) 0.676s 16 2.08x
💻 Local Express 3.252s (-4.3%) 3.778s (-6.1% 🟢) 0.000s (-43.7% 🟢) 3.781s (-6.1% 🟢) 0.529s 16 2.09x

Summary

Fastest Framework by World

Winner determined by most benchmark wins

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

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 16/21
Next.js (Turbopack) 🐘 Postgres 15/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)
  • 🌐 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)
  • 🌐 Platformatic: 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

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 871 571 230 1672
✅ 💻 Local Development 1605 0 219 1824
✅ 📦 Local Production 1605 0 219 1824
✅ 🐘 Local Postgres 1593 0 231 1824
✅ 🪟 Windows 152 0 0 152
❌ 📋 Other 840 45 179 1064
Total 6666 616 1078 8360

❌ Failed Tests

▲ Vercel Production (571 failed)

astro (64 failed):

  • error handling not registered StepNotRegisteredError fails the step but workflow can catch it
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability
  • AbortController abortTimeoutWorkflow: timeout cancels long-running step
  • AbortController abortParallelWorkflow: abort cancels all parallel steps
  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step
  • AbortController abortAlreadyAbortedWorkflow: pre-aborted signal seen by step
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortViaHookWorkflow: external hook triggers abort on in-flight step
  • AbortController abortExternalSignalWorkflow: signal passed as workflow input
  • AbortController abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps
  • AbortController abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM
  • AbortController abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries
  • AbortController abortReasonTypesWorkflow: various abort reason types propagate correctly
  • AbortController abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries
  • AbortController abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works
  • AbortController abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires
  • AbortController abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step
  • AbortController abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort()
  • AbortController abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort()
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KWDG8Q32NYNH9ZDASJ9SPKWE | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWDG8SDFRDQYFGKAB2AEEDV4 | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWDG8Y835NT4A9S71230WMVY | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWDG9JFMK98YZK0DC8NZ3GXP | 🔍 observability
  • experimental_setAttributes experimentalSetAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • experimental_setAttributes experimentalSetAttributesInsideStepWorkflow: step-body calls append attributed native events
  • experimental_setAttributes fire-and-forget: void experimental_setAttributes lands without awaiting
  • experimental_setAttributes Promise.all of disjoint-key writes: every key lands

example (45 failed):

  • error handling retry behavior maxRetries=0 disables retries
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • error handling catchability step throw round-trips FatalError with cause chain to workflow catch
  • error handling catchability workflow throw round-trips FatalError + cause through run_failed event
  • error handling catchability workflow throw of a non-Error value round-trips verbatim as cause
  • error handling catchability step throw of a non-Error value preserves it as cause on the wrapping FatalError
  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • AbortController abortTimeoutWorkflow: timeout cancels long-running step
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortViaHookWorkflow: external hook triggers abort on in-flight step
  • AbortController abortExternalSignalWorkflow: signal passed as workflow input
  • AbortController abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps
  • AbortController abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM

express (76 failed):

  • error handling not registered StepNotRegisteredError fails the run when not caught in workflow
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability
  • AbortController abortTimeoutWorkflow: timeout cancels long-running step
  • AbortController abortParallelWorkflow: abort cancels all parallel steps
  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step
  • AbortController abortAlreadyAbortedWorkflow: pre-aborted signal seen by step
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortViaHookWorkflow: external hook triggers abort on in-flight step
  • AbortController abortExternalSignalWorkflow: signal passed as workflow input
  • AbortController abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps
  • AbortController abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM
  • AbortController abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries
  • AbortController abortReasonTypesWorkflow: various abort reason types propagate correctly
  • AbortController abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries
  • AbortController abortFetchInFlightWorkflow: aborting cancels an in-flight fetch
  • AbortController abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works
  • AbortController abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay
  • AbortController abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires
  • AbortController abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step
  • AbortController abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort()
  • AbortController abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort()
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KWDG8Q32NYNH9ZDASJ9SPKWE | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWDG8SDFRDQYFGKAB2AEEDV4 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWDG8VVG5SKK0GH43MDCZ1W6 | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWDG8Y835NT4A9S71230WMVY | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWDG94A4J8QYV6Z2CDC1ZEYP | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWDG9C68AQMXJYARSQQHAHYW | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWDG9JFMK98YZK0DC8NZ3GXP | 🔍 observability
  • experimental_setAttributes start: initial attributes are seeded on run creation
  • experimental_setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • experimental_setAttributes experimentalSetAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • experimental_setAttributes experimentalSetAttributesInsideStepWorkflow: step-body calls append attributed native events
  • experimental_setAttributes fire-and-forget: void experimental_setAttributes lands without awaiting
  • experimental_setAttributes Promise.all of disjoint-key writes: every key lands
  • experimental_setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • experimental_setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit

fastify (47 failed):

  • error handling not registered StepNotRegisteredError fails the run when not caught in workflow
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability
  • AbortController abortTimeoutWorkflow: timeout cancels long-running step
  • AbortController abortAlreadyAbortedWorkflow: pre-aborted signal seen by step
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortReasonTypesWorkflow: various abort reason types propagate correctly
  • AbortController abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries
  • AbortController abortFetchInFlightWorkflow: aborting cancels an in-flight fetch
  • AbortController abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires
  • AbortController abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step
  • AbortController abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort()
  • AbortController abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort()

hono (47 failed):

  • error handling catchability workflow throw round-trips FatalError + cause through run_failed event
  • error handling catchability workflow throw of a non-Error value round-trips verbatim as cause
  • error handling catchability step throw of a non-Error value preserves it as cause on the wrapping FatalError
  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability
  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries
  • AbortController abortReasonTypesWorkflow: various abort reason types propagate correctly
  • AbortController abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires

nextjs-turbopack (27 failed):

  • writableForwardedFromStepWorkflow | wrun_01KWDFX04CQDMR38MNTPAKE3B4 | 🔍 observability
  • fetchWorkflow | wrun_01KWDFX6SJXD6X0W0CNMNJQYV3 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWDFX978G1BV0C9CAP5YV9RS | 🔍 observability
  • 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 catchability FatalError can be caught and detected with FatalError.is()
  • error handling catchability step throw round-trips FatalError with cause chain to workflow catch
  • error handling catchability workflow throw round-trips FatalError + cause through run_failed event
  • error handling catchability workflow throw of a non-Error value round-trips verbatim as cause
  • error handling catchability step throw of a non-Error value preserves it as cause on the wrapping FatalError
  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability

nextjs-webpack (43 failed):

  • 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 catchability step throw round-trips FatalError with cause chain to workflow catch
  • error handling catchability workflow throw round-trips FatalError + cause through run_failed event
  • error handling catchability step throw of a non-Error value preserves it as cause on the wrapping FatalError
  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • pages router addTenWorkflow via pages router
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability

nitro (53 failed):

  • error handling not registered StepNotRegisteredError fails the step but workflow can catch it
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability
  • AbortController abortTimeoutWorkflow: timeout cancels long-running step
  • AbortController abortParallelWorkflow: abort cancels all parallel steps
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortViaHookWorkflow: external hook triggers abort on in-flight step
  • AbortController abortFetchInFlightWorkflow: aborting cancels an in-flight fetch
  • AbortController abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay
  • AbortController abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal
  • AbortController abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires
  • AbortController abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step
  • AbortController abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort()
  • AbortController abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort()
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KWDG8Q32NYNH9ZDASJ9SPKWE | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWDG8SDFRDQYFGKAB2AEEDV4 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWDG8VVG5SKK0GH43MDCZ1W6 | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWDG8Y835NT4A9S71230WMVY | 🔍 observability
  • experimental_setAttributes experimentalSetAttributesInsideStepWorkflow: step-body calls append attributed native events
  • experimental_setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run

nuxt (76 failed):

  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWDG3XQN5N59Q4VN17GJ9PYF | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22 | 🔍 observability
  • AbortController abortTimeoutWorkflow: timeout cancels long-running step
  • AbortController abortParallelWorkflow: abort cancels all parallel steps
  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step
  • AbortController abortAlreadyAbortedWorkflow: pre-aborted signal seen by step
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortViaHookWorkflow: external hook triggers abort on in-flight step
  • AbortController abortExternalSignalWorkflow: signal passed as workflow input
  • AbortController abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps
  • AbortController abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries
  • AbortController abortReasonTypesWorkflow: various abort reason types propagate correctly
  • AbortController abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries
  • AbortController abortFetchInFlightWorkflow: aborting cancels an in-flight fetch
  • AbortController abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works
  • AbortController abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay
  • AbortController abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal
  • AbortController abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires
  • AbortController abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step
  • AbortController abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort()
  • AbortController abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort()
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KWDG8Q32NYNH9ZDASJ9SPKWE | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWDG8SDFRDQYFGKAB2AEEDV4 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWDG8VVG5SKK0GH43MDCZ1W6 | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWDG8Y835NT4A9S71230WMVY | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWDG94A4J8QYV6Z2CDC1ZEYP | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWDG9JFMK98YZK0DC8NZ3GXP | 🔍 observability
  • experimental_setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • experimental_setAttributes experimentalSetAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • experimental_setAttributes experimentalSetAttributesInsideStepWorkflow: step-body calls append attributed native events
  • experimental_setAttributes fire-and-forget: void experimental_setAttributes lands without awaiting
  • experimental_setAttributes Promise.all of disjoint-key writes: every key lands
  • experimental_setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • experimental_setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit

sveltekit (61 failed):

  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9 | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
  • AbortController abortParallelWorkflow: abort cancels all parallel steps
  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step
  • AbortController abortAlreadyAbortedWorkflow: pre-aborted signal seen by step
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortExternalSignalWorkflow: signal passed as workflow input
  • AbortController abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps
  • AbortController abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM
  • AbortController abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries
  • AbortController abortReasonTypesWorkflow: various abort reason types propagate correctly
  • AbortController abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries
  • AbortController abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook
  • AbortController abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort()
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWDG8SDFRDQYFGKAB2AEEDV4 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWDG8VVG5SKK0GH43MDCZ1W6 | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWDG8Y835NT4A9S71230WMVY | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWDG94A4J8QYV6Z2CDC1ZEYP | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWDG9C68AQMXJYARSQQHAHYW | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWDG9JFMK98YZK0DC8NZ3GXP | 🔍 observability
  • experimental_setAttributes start: initial attributes are seeded on run creation
  • experimental_setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • experimental_setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run

vite (32 failed):

  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • error handling catchability step throw round-trips FatalError with cause chain to workflow catch
  • error handling catchability workflow throw round-trips FatalError + cause through run_failed event
  • error handling catchability workflow throw of a non-Error value round-trips verbatim as cause
  • error handling catchability step throw of a non-Error value preserves it as cause on the wrapping FatalError
  • 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_01KWDG09B2BQMJNGAYNJWX222P | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWDG0657Q1WV1V2J8K4Y91NA | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012 | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7 | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6 | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWDG2HTV2D3800RWTX715ZWW | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7 | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0 | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP | 🔍 observability
📋 Other (45 failed)

e2e-vercel-prod-tanstack-start (45 failed):

  • error handling catchability step throw of a non-Error value preserves it as cause on the wrapping FatalError
  • 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
  • hookCleanupTestWorkflow - hook token reuse after workflow completion | wrun_01KWDG09B2BQMJNGAYNJWX222P
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWDFZYKQBTNTY62APV403QSP
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWDG27MH40J32T22TFZ72EBH
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWDG00AKM091PB9AP2BAX012
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWDG0D0XNTR53ZNPKB7JZPA9
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWDG0HY5NYXQK97979Z09H8G
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWDG0KV89X06N9GQ7EX28QEJ
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWDG0NW809J4YV93J2V840D1
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWDG0R5T469DP5H5FP9WDYXZ
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWDG11K8G0RQTB2ERM8X98SB
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWDG0A7FMVAGB3T0JTYT59A7
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWDG0DZZB69R0141M3GZXDKT
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWDG14EEPCCA3BPJRHCXG2TB
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWDG16VBTCFCTPZD7R4CTX51
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWDG1EFY7RDQ78ZGCAC69YB0
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWDG1J5GT435E6ASYDYX2XJ9
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWDG1MGYX3AQ1WB7XMTNEY9B
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWDG1ZY0MY05XSM0AD0GDXWV
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWDG260Q6R6P20RFF2TQJV52
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWDG2C2PN3H1W064GY3KEAES
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWDG2ES6FJ6G52N9E63J8TJ6
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWDG2MKCDDX10YFTVDANY200
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWDG2TQVSXJ7W356KD2J1CBM
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWDG2XHPJB2P98Y6YFBMEXRA
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWDG33KR1KKMM3NZSNEN6XRY
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWDG3585B3KTRJSBHEKZC9SQ
  • cancelRun - cancelling a running workflow | wrun_01KWDG3B8MYN4MHF48P2CEWPD7
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWDG3H4RST6KNR5HY0CAA91G
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWDG3SEJMTF8AXJ5DN205JQ0
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWDG3VRTR4VX2V48EVQAM8FP
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWDG47CHRV7FB6MY0B83MD22
  • AbortController abortFromStepWorkflow: step abort cancels an in-flight sibling step
  • AbortController abortAlreadyAbortedWorkflow: pre-aborted signal seen by step
  • AbortController abortReasonWorkflow: abort reason preserved across boundaries
  • AbortController abortAfterCompletionWorkflow: abort after step completes is a no-op
  • AbortController abortViaHookWorkflow: external hook triggers abort on in-flight step
  • AbortController abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps
  • AbortController abortSurvivesReplayWorkflow: controller state consistent across replay
  • AbortController abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries
  • AbortController abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
❌ astro 61 64 27
❌ example 80 45 27
❌ express 49 76 27
❌ fastify 78 47 27
❌ hono 78 47 27
❌ nextjs-turbopack 122 27 3
❌ nextjs-webpack 106 43 3
❌ nitro 72 53 27
❌ nuxt 49 76 27
❌ sveltekit 83 61 8
❌ vite 93 32 27
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 127 0 25
✅ express-stable 127 0 25
✅ fastify-stable 127 0 25
✅ hono-stable 127 0 25
✅ nextjs-turbopack-canary 133 0 19
✅ nextjs-turbopack-stable 152 0 0
✅ nextjs-webpack-canary 133 0 19
✅ nextjs-webpack-stable 152 0 0
✅ nitro-stable 127 0 25
✅ nuxt-stable 127 0 25
✅ sveltekit-stable 146 0 6
✅ vite-stable 127 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 127 0 25
✅ express-stable 127 0 25
✅ fastify-stable 127 0 25
✅ hono-stable 127 0 25
✅ nextjs-turbopack-canary 133 0 19
✅ nextjs-turbopack-stable 152 0 0
✅ nextjs-webpack-canary 133 0 19
✅ nextjs-webpack-stable 152 0 0
✅ nitro-stable 127 0 25
✅ nuxt-stable 127 0 25
✅ sveltekit-stable 146 0 6
✅ vite-stable 127 0 25
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 126 0 26
✅ express-stable 126 0 26
✅ fastify-stable 126 0 26
✅ hono-stable 126 0 26
✅ nextjs-turbopack-canary 132 0 20
✅ nextjs-turbopack-stable 151 0 1
✅ nextjs-webpack-canary 132 0 20
✅ nextjs-webpack-stable 151 0 1
✅ nitro-stable 126 0 26
✅ nuxt-stable 126 0 26
✅ sveltekit-stable 145 0 7
✅ vite-stable 126 0 26
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 152 0 0
❌ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 127 0 25
✅ e2e-local-dev-tanstack-start- 127 0 25
✅ e2e-local-postgres-nest-stable 126 0 26
✅ e2e-local-postgres-tanstack-start- 126 0 26
✅ e2e-local-prod-nest-stable 127 0 25
✅ e2e-local-prod-tanstack-start- 127 0 25
❌ e2e-vercel-prod-tanstack-start 80 45 27

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

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.

Workflow does not work well/properly when using basePath on Nextjs app

1 participant