Skip to content

Support framework base paths outside Next.js#2771

Draft
NathanColosimo wants to merge 1 commit into
nathanc/fix-next-base-pathfrom
nathanc/fix-framework-base-path
Draft

Support framework base paths outside Next.js#2771
NathanColosimo wants to merge 1 commit into
nathanc/fix-next-base-pathfrom
nathanc/fix-framework-base-path

Conversation

@NathanColosimo

Copy link
Copy Markdown
Contributor

Description

Depends on #2732.

Adds non-Next base path support using framework-native config only. There is no WORKFLOW_BASE_PATH env var and no new user-facing Workflow option.

  • Adds shared base-path conversion helpers and teaches the Vercel Build Output builder to prefix public route src patterns while keeping function/static destinations internal.
  • SvelteKit reads kit.paths.base, passes it through the builder, preserves generated health method aliases after adapter processing, and lets SvelteKit mount static manifest assets under the configured base.
  • Astro reads config.base, prefixes Vercel route regexes, and guards generated handlers so the root workflow endpoints do not succeed when a base path is configured.
  • Nitro reads baseURL or Nuxt-style app.baseURL, passes it into Workflow URL generation and legacy BOA output, and keeps Nitro internal routes/function rules unprefixed because Nitro applies baseURL when serving and generating Vercel output.
  • Nuxt propagates app.baseURL into Nitro when Nitro has not already configured baseURL.
  • Workbenches can opt into base-path E2E with WORKFLOW_E2E_BASE_PATH=/app across SvelteKit, Astro, Nitro v2/v3, Nuxt, Vite, TanStack Start, Express, Fastify, and Hono.

How did you test your changes?

  • PATH=/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:/Users/nathancolosimo/.cache/codex-runtimes/codex-primary-runtime/dependencies/bin:$PATH HUSKY=0 pnpm dlx pnpm@10.20.0 --filter @workflow/builders... --filter @workflow/nitro... --filter @workflow/nuxt --filter @workflow/sveltekit... --filter @workflow/astro... build
  • Focused unit tests for builders, Nitro, Astro, SvelteKit, and E2E URL helpers.
  • WORKFLOW_E2E_BASE_PATH=/app WORKFLOW_PUBLIC_MANIFEST=1 ... build for SvelteKit, Astro, Nitro v2, Nitro v3, Nuxt, Vite, and TanStack Start workbenches.
  • Local HTTP probes against built Nitro v3, SvelteKit, and Astro apps verified base-prefixed health endpoints, root endpoint behavior, and public manifest serving.
  • Focused local Nitro v3 E2E covered base path health, workflow start, and webhook resume paths.
  • biome check over touched files passed with warnings only.
  • pnpm dlx pnpm@10.20.0 changeset status --since=origin/nathanc/fix-next-base-path passed.

Ad-hoc Vercel preview deployment was not run from this machine because the Vercel CLI and required auth/OIDC environment variables were not available. The PR is draft so CI and preview deployments can validate the Vercel side.

PR Checklist - Required to merge

  • 📦 pnpm changeset was run to create a changelog for this PR
  • 🔒 DCO sign-off passes (run git commit --signoff on your commits)
  • 📝 Ping @vercel/workflow in a comment once the PR is ready, and the above checklist is complete

Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com>
@changeset-bot

changeset-bot Bot commented Jul 3, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 61407e9

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

This PR includes changesets to release 16 packages
Name Type
@workflow/builders Patch
@workflow/astro Patch
@workflow/nitro Patch
@workflow/nuxt Patch
@workflow/sveltekit Patch
workflow Patch
@workflow/cli Patch
@workflow/nest Patch
@workflow/next Patch
@workflow/rollup Patch
@workflow/vite Patch
@workflow/vitest Patch
@workflow/world-testing Patch
@workflow/core Patch
@workflow/web-shared Patch
@workflow/web 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 Jul 3, 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 3, 2026 5:00am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jul 3, 2026 5:00am
example-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-astro-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-express-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-fastify-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-hono-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-nitro-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-nuxt-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-sveltekit-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workbench-vite-workflow Ready Ready Preview, Comment Jul 3, 2026 5:00am
workflow-docs Ready Ready Preview, Comment, Open in v0 Jul 3, 2026 5:00am
workflow-swc-playground Ready Ready Preview, Comment Jul 3, 2026 5:00am
workflow-tarballs Ready Ready Preview, Comment Jul 3, 2026 5:00am
workflow-web Ready Ready Preview, Comment Jul 3, 2026 5:00am

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 703 739 241 1683
✅ 💻 Local Development 1472 0 211 1683
✅ 📦 Local Production 1605 0 231 1836
✅ 🐘 Local Postgres 1593 0 243 1836
✅ 🪟 Windows 152 0 1 153
✅ 📋 Other 885 0 186 1071
Total 6410 739 1113 8262

❌ Failed Tests

▲ Vercel Production (739 failed)

express (120 failed):

  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • promiseAllWorkflow | wrun_01KWK5GR4C1G34ZYYAQJ13M0P9 | 🔍 observability
  • promiseRaceWorkflow | wrun_01KWK5GWC93TFKXNRR24YYZW1P | 🔍 observability
  • promiseAnyWorkflow | wrun_01KWK5HHCDVHT7Q102FTQ0QCKK | 🔍 observability
  • readableStreamWorkflow | wrun_01KWK5HRVHSH8GKKJP08QC5GY1 | 🔍 observability
  • hookWorkflow | wrun_01KWK5J29FRYGCQX46RQ4C6PXJ | 🔍 observability
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KWK5J8FD02SBV3NS3WM9G483 | 🔍 observability
  • webhookWorkflow | wrun_01KWK5JC80FD3HGAKS4MFKAXET | 🔍 observability
  • parallelStepsThenWebhookWorkflow - no hook_conflict from same-tick replay race | wrun_01KWK5JJR9HX01F9NYJFVTYS6C | 🔍 observability
  • sleepingWorkflow | wrun_01KWK5K8FXQSZJN355351G3DYV | 🔍 observability
  • parallelSleepWorkflow | wrun_01KWK5KMWVWJ0SP67VW78NDS3M | 🔍 observability
  • sleepWinsRaceWorkflow | wrun_01KWK5KS161NSJ3VR7SBRH35NG | 🔍 observability
  • stepWinsRaceWorkflow | wrun_01KWK5KW520ZQHR1J4Y6379DNX | 🔍 observability
  • nullByteWorkflow | wrun_01KWK5KZ43QECK3APMACCSDS7P | 🔍 observability
  • workflowAndStepMetadataWorkflow | wrun_01KWK5M16E7SFCEVPWYNWCAP9H | 🔍 observability
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getChunks getChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KWK5NW7PX95YX6Y2SHEH95B1 | 🔍 observability
  • utf8StreamWorkflow | wrun_01KWK5P76MJSR5FCJ71X4AD1F5 | 🔍 observability
  • writableForwardedFromWorkflowWorkflow | wrun_01KWK5PC1EV10WZ8ST01JE25S2 | 🔍 observability
  • writableForwardedFromStepWorkflow | wrun_01KWK5PF8GVCV40CDSA9X5HEX0 | 🔍 observability
  • fetchWorkflow | wrun_01KWK5PH5N6WKMMY3E5ATRPWQ4 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWK5PJZPKNTN3PFEDF1WCG76 | 🔍 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 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 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 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_01KWK5T3WPZK1WVVCBQ7GRWRX0 | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWK5TE22YEZ9A1XVAK529G1M | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWK5TR8DWFR1NFCNCSVE0SJD | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWK5TTB8E8FGHP3YKNYA4AHD | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_01KWK5TWAX0HEBGK0JHWQB9KWX | 🔍 observability
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_01KWK5TYAHJTD6CACWAJQJCXZQ | 🔍 observability
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWK5VBCW23D3DACV5NV812CM | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWK5W302ET084XJ8NPEQ9NS0 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWK5W64QVBB3QXK6Q56BS2F0 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWK5WANE4PE8XDA4WVHCNZ5S | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWK5WE6HW9XEFQFZ3ZCESM31 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWK5WMX2XPZHCD5QTW6TAMT6 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWK5WVCDRF7SQKFF6C7H3VRE | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWK5X8M4QXV6FV3ZWYQWEY4Y | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWK5XG89HT65D3HZ5FP9BR7H | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWK5XMSY7SYDEEDBHNFGJ90W | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWK5XPNSC827Y8A791XNTSVR | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWK5XZASQ16MN2EPADEGJPHQ | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWK5Y8DF851QM2BCYQKM1T9N | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWK5YABDNXYJN148XHQ12CMM | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWK5YS2PWANJYHP3NMBCPGHW | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWK5YXTZFKANGWKXHGZMAPVX | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWK5Z2QGEJQB5FAQZ9G07CPW | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWK5Z7BDQMNHHGKT2HS5HQJB | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWK5ZC19TY56YT2WKRY5Y19C | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWK5ZGQHV54H505RP9F1R542 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWK5ZNCSHHQP0E00Q2G2R5D4 | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWK5ZY1GFZ4K9MXMXNJ78NEH | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWK602RVFPA0CWEDSVV2AQKH | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWK604MXA3Z89H8991DKZX6J | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWK609C1W655D91NZ2V763VQ | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWK60DA48Q2JP9PBER3WV2HM | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWK60KPP32STPAHT088PQSEG | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWK60XCJ9CVE6WZ9F56BQ4WA | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWK614TBHGX69AVZ8G2H7X6B | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWK61DDZFS19Q0EWXVM7PF7G | 🔍 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 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_01KWK65CDNZK86XTV93VH3H4P7 | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWK65E9H0BE4WMEAZ7FHWNT2 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWK65G51YMTQJXHT2VAC0ZZR | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWK65HZWJCABA7QNMPTYA5RB | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWK65PJVMSBPVMCS4K88NNR4 | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWK65S9PT5AWQMYT27K4ND1M | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWK65XSYW2HTAW3F5TMRQ3PV | 🔍 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
  • experimental_setAttributes start: invalid initial attributes are rejected before a run is created

hono (120 failed):

  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • promiseAllWorkflow | wrun_01KWK5GR4C1G34ZYYAQJ13M0P9 | 🔍 observability
  • promiseRaceWorkflow | wrun_01KWK5GWC93TFKXNRR24YYZW1P | 🔍 observability
  • promiseAnyWorkflow | wrun_01KWK5HHCDVHT7Q102FTQ0QCKK | 🔍 observability
  • readableStreamWorkflow | wrun_01KWK5HRVHSH8GKKJP08QC5GY1 | 🔍 observability
  • hookWorkflow | wrun_01KWK5J29FRYGCQX46RQ4C6PXJ | 🔍 observability
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KWK5J8FD02SBV3NS3WM9G483 | 🔍 observability
  • webhookWorkflow | wrun_01KWK5JC80FD3HGAKS4MFKAXET | 🔍 observability
  • parallelStepsThenWebhookWorkflow - no hook_conflict from same-tick replay race | wrun_01KWK5JJR9HX01F9NYJFVTYS6C | 🔍 observability
  • sleepingWorkflow | wrun_01KWK5K8FXQSZJN355351G3DYV | 🔍 observability
  • parallelSleepWorkflow | wrun_01KWK5KMWVWJ0SP67VW78NDS3M | 🔍 observability
  • sleepWinsRaceWorkflow | wrun_01KWK5KS161NSJ3VR7SBRH35NG | 🔍 observability
  • stepWinsRaceWorkflow | wrun_01KWK5KW520ZQHR1J4Y6379DNX | 🔍 observability
  • nullByteWorkflow | wrun_01KWK5KZ43QECK3APMACCSDS7P | 🔍 observability
  • workflowAndStepMetadataWorkflow | wrun_01KWK5M16E7SFCEVPWYNWCAP9H | 🔍 observability
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getChunks getChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KWK5NW7PX95YX6Y2SHEH95B1 | 🔍 observability
  • utf8StreamWorkflow | wrun_01KWK5P76MJSR5FCJ71X4AD1F5 | 🔍 observability
  • writableForwardedFromWorkflowWorkflow | wrun_01KWK5PC1EV10WZ8ST01JE25S2 | 🔍 observability
  • writableForwardedFromStepWorkflow | wrun_01KWK5PF8GVCV40CDSA9X5HEX0 | 🔍 observability
  • fetchWorkflow | wrun_01KWK5PH5N6WKMMY3E5ATRPWQ4 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWK5PJZPKNTN3PFEDF1WCG76 | 🔍 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 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 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 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_01KWK5T3WPZK1WVVCBQ7GRWRX0 | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWK5TE22YEZ9A1XVAK529G1M | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWK5TR8DWFR1NFCNCSVE0SJD | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWK5TTB8E8FGHP3YKNYA4AHD | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_01KWK5TWAX0HEBGK0JHWQB9KWX | 🔍 observability
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_01KWK5TYAHJTD6CACWAJQJCXZQ | 🔍 observability
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWK5VBCW23D3DACV5NV812CM | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWK5W302ET084XJ8NPEQ9NS0 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWK5W64QVBB3QXK6Q56BS2F0 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWK5WANE4PE8XDA4WVHCNZ5S | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWK5WE6HW9XEFQFZ3ZCESM31 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWK5WMX2XPZHCD5QTW6TAMT6 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWK5WVCDRF7SQKFF6C7H3VRE | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWK5X8M4QXV6FV3ZWYQWEY4Y | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWK5XG89HT65D3HZ5FP9BR7H | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWK5XMSY7SYDEEDBHNFGJ90W | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWK5XPNSC827Y8A791XNTSVR | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWK5XZASQ16MN2EPADEGJPHQ | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWK5Y8DF851QM2BCYQKM1T9N | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWK5YABDNXYJN148XHQ12CMM | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWK5YS2PWANJYHP3NMBCPGHW | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWK5YXTZFKANGWKXHGZMAPVX | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWK5Z2QGEJQB5FAQZ9G07CPW | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWK5Z7BDQMNHHGKT2HS5HQJB | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWK5ZC19TY56YT2WKRY5Y19C | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWK5ZGQHV54H505RP9F1R542 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWK5ZNCSHHQP0E00Q2G2R5D4 | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWK5ZY1GFZ4K9MXMXNJ78NEH | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWK602RVFPA0CWEDSVV2AQKH | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWK604MXA3Z89H8991DKZX6J | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWK609C1W655D91NZ2V763VQ | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWK60DA48Q2JP9PBER3WV2HM | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWK60KPP32STPAHT088PQSEG | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWK60XCJ9CVE6WZ9F56BQ4WA | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWK614TBHGX69AVZ8G2H7X6B | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWK61DDZFS19Q0EWXVM7PF7G | 🔍 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 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_01KWK65CDNZK86XTV93VH3H4P7 | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWK65E9H0BE4WMEAZ7FHWNT2 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWK65G51YMTQJXHT2VAC0ZZR | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWK65HZWJCABA7QNMPTYA5RB | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWK65PJVMSBPVMCS4K88NNR4 | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWK65S9PT5AWQMYT27K4ND1M | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWK65XSYW2HTAW3F5TMRQ3PV | 🔍 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
  • experimental_setAttributes start: invalid initial attributes are rejected before a run is created

nitro (120 failed):

  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • promiseAllWorkflow | wrun_01KWK5GR4C1G34ZYYAQJ13M0P9 | 🔍 observability
  • promiseRaceWorkflow | wrun_01KWK5GWC93TFKXNRR24YYZW1P | 🔍 observability
  • promiseAnyWorkflow | wrun_01KWK5HHCDVHT7Q102FTQ0QCKK | 🔍 observability
  • readableStreamWorkflow | wrun_01KWK5HRVHSH8GKKJP08QC5GY1 | 🔍 observability
  • hookWorkflow | wrun_01KWK5J29FRYGCQX46RQ4C6PXJ | 🔍 observability
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KWK5J8FD02SBV3NS3WM9G483 | 🔍 observability
  • webhookWorkflow | wrun_01KWK5JC80FD3HGAKS4MFKAXET | 🔍 observability
  • parallelStepsThenWebhookWorkflow - no hook_conflict from same-tick replay race | wrun_01KWK5JJR9HX01F9NYJFVTYS6C | 🔍 observability
  • sleepingWorkflow | wrun_01KWK5K8FXQSZJN355351G3DYV | 🔍 observability
  • parallelSleepWorkflow | wrun_01KWK5KMWVWJ0SP67VW78NDS3M | 🔍 observability
  • sleepWinsRaceWorkflow | wrun_01KWK5KS161NSJ3VR7SBRH35NG | 🔍 observability
  • stepWinsRaceWorkflow | wrun_01KWK5KW520ZQHR1J4Y6379DNX | 🔍 observability
  • nullByteWorkflow | wrun_01KWK5KZ43QECK3APMACCSDS7P | 🔍 observability
  • workflowAndStepMetadataWorkflow | wrun_01KWK5M16E7SFCEVPWYNWCAP9H | 🔍 observability
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getChunks getChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KWK5NW7PX95YX6Y2SHEH95B1 | 🔍 observability
  • utf8StreamWorkflow | wrun_01KWK5P76MJSR5FCJ71X4AD1F5 | 🔍 observability
  • writableForwardedFromWorkflowWorkflow | wrun_01KWK5PC1EV10WZ8ST01JE25S2 | 🔍 observability
  • writableForwardedFromStepWorkflow | wrun_01KWK5PF8GVCV40CDSA9X5HEX0 | 🔍 observability
  • fetchWorkflow | wrun_01KWK5PH5N6WKMMY3E5ATRPWQ4 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWK5PJZPKNTN3PFEDF1WCG76 | 🔍 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 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 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 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_01KWK5T3WPZK1WVVCBQ7GRWRX0 | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWK5TE22YEZ9A1XVAK529G1M | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWK5TR8DWFR1NFCNCSVE0SJD | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWK5TTB8E8FGHP3YKNYA4AHD | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_01KWK5TWAX0HEBGK0JHWQB9KWX | 🔍 observability
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_01KWK5TYAHJTD6CACWAJQJCXZQ | 🔍 observability
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWK5VBCW23D3DACV5NV812CM | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWK5W302ET084XJ8NPEQ9NS0 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWK5W64QVBB3QXK6Q56BS2F0 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWK5WANE4PE8XDA4WVHCNZ5S | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWK5WE6HW9XEFQFZ3ZCESM31 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWK5WMX2XPZHCD5QTW6TAMT6 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWK5WVCDRF7SQKFF6C7H3VRE | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWK5X8M4QXV6FV3ZWYQWEY4Y | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWK5XG89HT65D3HZ5FP9BR7H | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWK5XMSY7SYDEEDBHNFGJ90W | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWK5XPNSC827Y8A791XNTSVR | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWK5XZASQ16MN2EPADEGJPHQ | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWK5Y8DF851QM2BCYQKM1T9N | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWK5YABDNXYJN148XHQ12CMM | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWK5YS2PWANJYHP3NMBCPGHW | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWK5YXTZFKANGWKXHGZMAPVX | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWK5Z2QGEJQB5FAQZ9G07CPW | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWK5Z7BDQMNHHGKT2HS5HQJB | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWK5ZC19TY56YT2WKRY5Y19C | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWK5ZGQHV54H505RP9F1R542 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWK5ZNCSHHQP0E00Q2G2R5D4 | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWK5ZY1GFZ4K9MXMXNJ78NEH | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWK602RVFPA0CWEDSVV2AQKH | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWK604MXA3Z89H8991DKZX6J | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWK609C1W655D91NZ2V763VQ | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWK60DA48Q2JP9PBER3WV2HM | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWK60KPP32STPAHT088PQSEG | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWK60XCJ9CVE6WZ9F56BQ4WA | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWK614TBHGX69AVZ8G2H7X6B | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWK61DDZFS19Q0EWXVM7PF7G | 🔍 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 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_01KWK65CDNZK86XTV93VH3H4P7 | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWK65E9H0BE4WMEAZ7FHWNT2 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWK65G51YMTQJXHT2VAC0ZZR | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWK65HZWJCABA7QNMPTYA5RB | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWK65PJVMSBPVMCS4K88NNR4 | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWK65S9PT5AWQMYT27K4ND1M | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWK65XSYW2HTAW3F5TMRQ3PV | 🔍 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
  • experimental_setAttributes start: invalid initial attributes are rejected before a run is created

nuxt (120 failed):

  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • promiseAllWorkflow | wrun_01KWK5GR4C1G34ZYYAQJ13M0P9 | 🔍 observability
  • promiseRaceWorkflow | wrun_01KWK5GWC93TFKXNRR24YYZW1P | 🔍 observability
  • promiseAnyWorkflow | wrun_01KWK5HHCDVHT7Q102FTQ0QCKK | 🔍 observability
  • readableStreamWorkflow | wrun_01KWK5HRVHSH8GKKJP08QC5GY1 | 🔍 observability
  • hookWorkflow | wrun_01KWK5J29FRYGCQX46RQ4C6PXJ | 🔍 observability
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KWK5J8FD02SBV3NS3WM9G483 | 🔍 observability
  • webhookWorkflow | wrun_01KWK5JC80FD3HGAKS4MFKAXET | 🔍 observability
  • parallelStepsThenWebhookWorkflow - no hook_conflict from same-tick replay race | wrun_01KWK5JJR9HX01F9NYJFVTYS6C | 🔍 observability
  • sleepingWorkflow | wrun_01KWK5K8FXQSZJN355351G3DYV | 🔍 observability
  • parallelSleepWorkflow | wrun_01KWK5KMWVWJ0SP67VW78NDS3M | 🔍 observability
  • sleepWinsRaceWorkflow | wrun_01KWK5KS161NSJ3VR7SBRH35NG | 🔍 observability
  • stepWinsRaceWorkflow | wrun_01KWK5KW520ZQHR1J4Y6379DNX | 🔍 observability
  • nullByteWorkflow | wrun_01KWK5KZ43QECK3APMACCSDS7P | 🔍 observability
  • workflowAndStepMetadataWorkflow | wrun_01KWK5M16E7SFCEVPWYNWCAP9H | 🔍 observability
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getChunks getChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KWK5NW7PX95YX6Y2SHEH95B1 | 🔍 observability
  • utf8StreamWorkflow | wrun_01KWK5P76MJSR5FCJ71X4AD1F5 | 🔍 observability
  • writableForwardedFromWorkflowWorkflow | wrun_01KWK5PC1EV10WZ8ST01JE25S2 | 🔍 observability
  • writableForwardedFromStepWorkflow | wrun_01KWK5PF8GVCV40CDSA9X5HEX0 | 🔍 observability
  • fetchWorkflow | wrun_01KWK5PH5N6WKMMY3E5ATRPWQ4 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWK5PJZPKNTN3PFEDF1WCG76 | 🔍 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 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 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 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_01KWK5T3WPZK1WVVCBQ7GRWRX0 | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWK5TE22YEZ9A1XVAK529G1M | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWK5TR8DWFR1NFCNCSVE0SJD | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWK5TTB8E8FGHP3YKNYA4AHD | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_01KWK5TWAX0HEBGK0JHWQB9KWX | 🔍 observability
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_01KWK5TYAHJTD6CACWAJQJCXZQ | 🔍 observability
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWK5VBCW23D3DACV5NV812CM | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWK5W302ET084XJ8NPEQ9NS0 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWK5W64QVBB3QXK6Q56BS2F0 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWK5WANE4PE8XDA4WVHCNZ5S | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWK5WE6HW9XEFQFZ3ZCESM31 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWK5WMX2XPZHCD5QTW6TAMT6 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWK5WVCDRF7SQKFF6C7H3VRE | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWK5X8M4QXV6FV3ZWYQWEY4Y | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWK5XG89HT65D3HZ5FP9BR7H | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWK5XMSY7SYDEEDBHNFGJ90W | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWK5XPNSC827Y8A791XNTSVR | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWK5XZASQ16MN2EPADEGJPHQ | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWK5Y8DF851QM2BCYQKM1T9N | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWK5YABDNXYJN148XHQ12CMM | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWK5YS2PWANJYHP3NMBCPGHW | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWK5YXTZFKANGWKXHGZMAPVX | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWK5Z2QGEJQB5FAQZ9G07CPW | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWK5Z7BDQMNHHGKT2HS5HQJB | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWK5ZC19TY56YT2WKRY5Y19C | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWK5ZGQHV54H505RP9F1R542 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWK5ZNCSHHQP0E00Q2G2R5D4 | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWK5ZY1GFZ4K9MXMXNJ78NEH | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWK602RVFPA0CWEDSVV2AQKH | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWK604MXA3Z89H8991DKZX6J | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWK609C1W655D91NZ2V763VQ | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWK60DA48Q2JP9PBER3WV2HM | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWK60KPP32STPAHT088PQSEG | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWK60XCJ9CVE6WZ9F56BQ4WA | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWK614TBHGX69AVZ8G2H7X6B | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWK61DDZFS19Q0EWXVM7PF7G | 🔍 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 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_01KWK65CDNZK86XTV93VH3H4P7 | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWK65E9H0BE4WMEAZ7FHWNT2 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWK65G51YMTQJXHT2VAC0ZZR | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWK65HZWJCABA7QNMPTYA5RB | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWK65PJVMSBPVMCS4K88NNR4 | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWK65S9PT5AWQMYT27K4ND1M | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWK65XSYW2HTAW3F5TMRQ3PV | 🔍 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
  • experimental_setAttributes start: invalid initial attributes are rejected before a run is created

sveltekit (139 failed):

  • DurableAgent e2e core basic text response
  • DurableAgent e2e core single tool call
  • DurableAgent e2e core multiple sequential tool calls
  • DurableAgent e2e core tool error recovery
  • DurableAgent e2e onStepFinish fires constructor + stream callbacks in order with step data
  • DurableAgent e2e onFinish fires constructor + stream callbacks in order with event data
  • DurableAgent e2e provider tools provider tool identity preserved across step boundaries
  • DurableAgent e2e provider tools mixed provider and function tools
  • DurableAgent e2e instructions string instructions are passed to the model
  • DurableAgent e2e timeout completes within timeout
  • DurableAgent e2e experimental_onStart (GAP) completes but callbacks are not called (GAP)
  • DurableAgent e2e experimental_onStepStart (GAP) completes but callbacks are not called (GAP)
  • DurableAgent e2e experimental_onToolCallStart (GAP) completes but callbacks are not called (GAP)
  • DurableAgent e2e experimental_onToolCallFinish (GAP) completes but callbacks are not called (GAP)
  • DurableAgent e2e prepareCall (GAP) completes but prepareCall is not applied (GAP)
  • DurableAgent e2e prepareStep on constructor agent-level prepareStep is called for each LLM step
  • DurableAgent e2e prepareStep on constructor stream-level prepareStep overrides constructor-level
  • DurableAgent e2e multimodal tool results passes through LanguageModelV3ToolResultOutput from tools
  • DurableAgent e2e tool approval (GAP) completes but needsApproval is not checked (GAP)
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • promiseAllWorkflow | wrun_01KWK5GR4C1G34ZYYAQJ13M0P9 | 🔍 observability
  • promiseRaceWorkflow | wrun_01KWK5GWC93TFKXNRR24YYZW1P | 🔍 observability
  • promiseAnyWorkflow | wrun_01KWK5HHCDVHT7Q102FTQ0QCKK | 🔍 observability
  • readableStreamWorkflow | wrun_01KWK5HRVHSH8GKKJP08QC5GY1 | 🔍 observability
  • hookWorkflow | wrun_01KWK5J29FRYGCQX46RQ4C6PXJ | 🔍 observability
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KWK5J8FD02SBV3NS3WM9G483 | 🔍 observability
  • webhookWorkflow | wrun_01KWK5JC80FD3HGAKS4MFKAXET | 🔍 observability
  • parallelStepsThenWebhookWorkflow - no hook_conflict from same-tick replay race | wrun_01KWK5JJR9HX01F9NYJFVTYS6C | 🔍 observability
  • sleepingWorkflow | wrun_01KWK5K8FXQSZJN355351G3DYV | 🔍 observability
  • parallelSleepWorkflow | wrun_01KWK5KMWVWJ0SP67VW78NDS3M | 🔍 observability
  • sleepWinsRaceWorkflow | wrun_01KWK5KS161NSJ3VR7SBRH35NG | 🔍 observability
  • stepWinsRaceWorkflow | wrun_01KWK5KW520ZQHR1J4Y6379DNX | 🔍 observability
  • nullByteWorkflow | wrun_01KWK5KZ43QECK3APMACCSDS7P | 🔍 observability
  • workflowAndStepMetadataWorkflow | wrun_01KWK5M16E7SFCEVPWYNWCAP9H | 🔍 observability
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getChunks getChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KWK5NW7PX95YX6Y2SHEH95B1 | 🔍 observability
  • utf8StreamWorkflow | wrun_01KWK5P76MJSR5FCJ71X4AD1F5 | 🔍 observability
  • writableForwardedFromWorkflowWorkflow | wrun_01KWK5PC1EV10WZ8ST01JE25S2 | 🔍 observability
  • writableForwardedFromStepWorkflow | wrun_01KWK5PF8GVCV40CDSA9X5HEX0 | 🔍 observability
  • fetchWorkflow | wrun_01KWK5PH5N6WKMMY3E5ATRPWQ4 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWK5PJZPKNTN3PFEDF1WCG76 | 🔍 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 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 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 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_01KWK5T3WPZK1WVVCBQ7GRWRX0 | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWK5TE22YEZ9A1XVAK529G1M | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWK5TR8DWFR1NFCNCSVE0SJD | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWK5TTB8E8FGHP3YKNYA4AHD | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_01KWK5TWAX0HEBGK0JHWQB9KWX | 🔍 observability
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_01KWK5TYAHJTD6CACWAJQJCXZQ | 🔍 observability
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWK5VBCW23D3DACV5NV812CM | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWK5W302ET084XJ8NPEQ9NS0 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWK5W64QVBB3QXK6Q56BS2F0 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWK5WANE4PE8XDA4WVHCNZ5S | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWK5WE6HW9XEFQFZ3ZCESM31 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWK5WMX2XPZHCD5QTW6TAMT6 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWK5WVCDRF7SQKFF6C7H3VRE | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWK5X8M4QXV6FV3ZWYQWEY4Y | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWK5XG89HT65D3HZ5FP9BR7H | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWK5XMSY7SYDEEDBHNFGJ90W | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWK5XPNSC827Y8A791XNTSVR | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWK5XZASQ16MN2EPADEGJPHQ | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWK5Y8DF851QM2BCYQKM1T9N | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWK5YABDNXYJN148XHQ12CMM | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWK5YS2PWANJYHP3NMBCPGHW | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWK5YXTZFKANGWKXHGZMAPVX | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWK5Z2QGEJQB5FAQZ9G07CPW | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWK5Z7BDQMNHHGKT2HS5HQJB | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWK5ZC19TY56YT2WKRY5Y19C | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWK5ZGQHV54H505RP9F1R542 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWK5ZNCSHHQP0E00Q2G2R5D4 | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWK5ZY1GFZ4K9MXMXNJ78NEH | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWK602RVFPA0CWEDSVV2AQKH | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWK604MXA3Z89H8991DKZX6J | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWK609C1W655D91NZ2V763VQ | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWK60DA48Q2JP9PBER3WV2HM | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWK60KPP32STPAHT088PQSEG | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWK60XCJ9CVE6WZ9F56BQ4WA | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWK614TBHGX69AVZ8G2H7X6B | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWK61DDZFS19Q0EWXVM7PF7G | 🔍 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 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_01KWK65CDNZK86XTV93VH3H4P7 | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWK65E9H0BE4WMEAZ7FHWNT2 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWK65G51YMTQJXHT2VAC0ZZR | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWK65HZWJCABA7QNMPTYA5RB | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWK65PJVMSBPVMCS4K88NNR4 | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWK65S9PT5AWQMYT27K4ND1M | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWK65XSYW2HTAW3F5TMRQ3PV | 🔍 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
  • experimental_setAttributes start: invalid initial attributes are rejected before a run is created

vite (120 failed):

  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • addTenWorkflow | wrun_01KWK5GKJBV7XZ0K3SHA6A1R9C | 🔍 observability
  • promiseAllWorkflow | wrun_01KWK5GR4C1G34ZYYAQJ13M0P9 | 🔍 observability
  • promiseRaceWorkflow | wrun_01KWK5GWC93TFKXNRR24YYZW1P | 🔍 observability
  • promiseAnyWorkflow | wrun_01KWK5HHCDVHT7Q102FTQ0QCKK | 🔍 observability
  • readableStreamWorkflow | wrun_01KWK5HRVHSH8GKKJP08QC5GY1 | 🔍 observability
  • hookWorkflow | wrun_01KWK5J29FRYGCQX46RQ4C6PXJ | 🔍 observability
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KWK5J8FD02SBV3NS3WM9G483 | 🔍 observability
  • webhookWorkflow | wrun_01KWK5JC80FD3HGAKS4MFKAXET | 🔍 observability
  • parallelStepsThenWebhookWorkflow - no hook_conflict from same-tick replay race | wrun_01KWK5JJR9HX01F9NYJFVTYS6C | 🔍 observability
  • sleepingWorkflow | wrun_01KWK5K8FXQSZJN355351G3DYV | 🔍 observability
  • parallelSleepWorkflow | wrun_01KWK5KMWVWJ0SP67VW78NDS3M | 🔍 observability
  • sleepWinsRaceWorkflow | wrun_01KWK5KS161NSJ3VR7SBRH35NG | 🔍 observability
  • stepWinsRaceWorkflow | wrun_01KWK5KW520ZQHR1J4Y6379DNX | 🔍 observability
  • nullByteWorkflow | wrun_01KWK5KZ43QECK3APMACCSDS7P | 🔍 observability
  • workflowAndStepMetadataWorkflow | wrun_01KWK5M16E7SFCEVPWYNWCAP9H | 🔍 observability
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getChunks getChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KWK5NW7PX95YX6Y2SHEH95B1 | 🔍 observability
  • utf8StreamWorkflow | wrun_01KWK5P76MJSR5FCJ71X4AD1F5 | 🔍 observability
  • writableForwardedFromWorkflowWorkflow | wrun_01KWK5PC1EV10WZ8ST01JE25S2 | 🔍 observability
  • writableForwardedFromStepWorkflow | wrun_01KWK5PF8GVCV40CDSA9X5HEX0 | 🔍 observability
  • fetchWorkflow | wrun_01KWK5PH5N6WKMMY3E5ATRPWQ4 | 🔍 observability
  • promiseRaceStressTestWorkflow | wrun_01KWK5PJZPKNTN3PFEDF1WCG76 | 🔍 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 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 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 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_01KWK5T3WPZK1WVVCBQ7GRWRX0 | 🔍 observability
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KWK5TE22YEZ9A1XVAK529G1M | 🔍 observability
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_01KWK5TR8DWFR1NFCNCSVE0SJD | 🔍 observability
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_01KWK5TTB8E8FGHP3YKNYA4AHD | 🔍 observability
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_01KWK5TWAX0HEBGK0JHWQB9KWX | 🔍 observability
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_01KWK5TYAHJTD6CACWAJQJCXZQ | 🔍 observability
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_01KWK5VBCW23D3DACV5NV812CM | 🔍 observability
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KWK5W302ET084XJ8NPEQ9NS0 | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KWK5W64QVBB3QXK6Q56BS2F0 | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KWK5WANE4PE8XDA4WVHCNZ5S | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KWK5WE6HW9XEFQFZ3ZCESM31 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KWK5WMX2XPZHCD5QTW6TAMT6 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KWK5WVCDRF7SQKFF6C7H3VRE | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KWK5X8M4QXV6FV3ZWYQWEY4Y | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KWK5XG89HT65D3HZ5FP9BR7H | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KWK5XMSY7SYDEEDBHNFGJ90W | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KWK5XPNSC827Y8A791XNTSVR | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KWK5XZASQ16MN2EPADEGJPHQ | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KWK5Y8DF851QM2BCYQKM1T9N | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KWK5YABDNXYJN148XHQ12CMM | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KWK5YS2PWANJYHP3NMBCPGHW | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KWK5YXTZFKANGWKXHGZMAPVX | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KWK5Z2QGEJQB5FAQZ9G07CPW | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KWK5Z7BDQMNHHGKT2HS5HQJB | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KWK5ZC19TY56YT2WKRY5Y19C | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KWK5ZGQHV54H505RP9F1R542 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KWK5ZNCSHHQP0E00Q2G2R5D4 | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KWK5ZY1GFZ4K9MXMXNJ78NEH | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KWK602RVFPA0CWEDSVV2AQKH | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KWK604MXA3Z89H8991DKZX6J | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KWK609C1W655D91NZ2V763VQ | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KWK60DA48Q2JP9PBER3WV2HM | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KWK60KPP32STPAHT088PQSEG | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KWK60XCJ9CVE6WZ9F56BQ4WA | 🔍 observability
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KWK614TBHGX69AVZ8G2H7X6B | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KWK61DDZFS19Q0EWXVM7PF7G | 🔍 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 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_01KWK65CDNZK86XTV93VH3H4P7 | 🔍 observability
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KWK65E9H0BE4WMEAZ7FHWNT2 | 🔍 observability
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KWK65G51YMTQJXHT2VAC0ZZR | 🔍 observability
  • getterStepWorkflow - getter functions with "use step" directive | wrun_01KWK65HZWJCABA7QNMPTYA5RB | 🔍 observability
  • distributedAbortController - manual abort triggers signal | wrun_01KWK65PJVMSBPVMCS4K88NNR4 | 🔍 observability
  • distributedAbortController - TTL expiration triggers signal | wrun_01KWK65S9PT5AWQMYT27K4ND1M | 🔍 observability
  • distributedAbortController - reconnect to existing controller | wrun_01KWK65XSYW2HTAW3F5TMRQ3PV | 🔍 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
  • experimental_setAttributes start: invalid initial attributes are rejected before a run is created

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 125 0 28
✅ example 125 0 28
❌ express 5 120 28
✅ fastify 125 0 28
❌ hono 5 120 28
✅ nextjs-turbopack 149 0 4
✅ nextjs-webpack 149 0 4
❌ nitro 5 120 28
❌ nuxt 5 120 28
❌ sveltekit 5 139 9
❌ vite 5 120 28
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 127 0 26
✅ express-stable 127 0 26
✅ fastify-stable 127 0 26
✅ hono-stable 127 0 26
✅ nextjs-turbopack-canary 133 0 20
✅ nextjs-turbopack-stable 152 0 1
✅ nextjs-webpack-stable 152 0 1
✅ nitro-stable 127 0 26
✅ nuxt-stable 127 0 26
✅ sveltekit-stable 146 0 7
✅ vite-stable 127 0 26
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 127 0 26
✅ express-stable 127 0 26
✅ fastify-stable 127 0 26
✅ hono-stable 127 0 26
✅ nextjs-turbopack-canary 133 0 20
✅ nextjs-turbopack-stable 152 0 1
✅ nextjs-webpack-canary 133 0 20
✅ nextjs-webpack-stable 152 0 1
✅ nitro-stable 127 0 26
✅ nuxt-stable 127 0 26
✅ sveltekit-stable 146 0 7
✅ vite-stable 127 0 26
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 126 0 27
✅ express-stable 126 0 27
✅ fastify-stable 126 0 27
✅ hono-stable 126 0 27
✅ nextjs-turbopack-canary 132 0 21
✅ nextjs-turbopack-stable 151 0 2
✅ nextjs-webpack-canary 132 0 21
✅ nextjs-webpack-stable 151 0 2
✅ nitro-stable 126 0 27
✅ nuxt-stable 126 0 27
✅ sveltekit-stable 145 0 8
✅ vite-stable 126 0 27
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 152 0 1
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 127 0 26
✅ e2e-local-dev-tanstack-start- 127 0 26
✅ e2e-local-postgres-nest-stable 126 0 27
✅ e2e-local-postgres-tanstack-start- 126 0 27
✅ e2e-local-prod-nest-stable 127 0 26
✅ e2e-local-prod-tanstack-start- 127 0 26
✅ e2e-vercel-prod-tanstack-start 125 0 28

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.


// Insert workflow routes right after
config.routes.splice(insertIndex + 1, 0, ...WORKFLOW_ROUTES);
config.routes.splice(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

On a Vercel Astro deploy with a framework base path set, the workflow flow/webhook endpoints stay reachable at the un-prefixed ROOT path (returning 200) because the base-path protection applied in the local build is never enforced on the Vercel build.

Fix on Vercel

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.

1 participant