Skip to content

[TESTING] Combined #2177 + #2193 for event-log-race-repro#2197

Draft
VaguelySerious wants to merge 23 commits into
stablefrom
peter/repro-combined-2177-2193
Draft

[TESTING] Combined #2177 + #2193 for event-log-race-repro#2197
VaguelySerious wants to merge 23 commits into
stablefrom
peter/repro-combined-2177-2193

Conversation

@VaguelySerious
Copy link
Copy Markdown
Member

Testing-only PR — do not merge. Combines all commits from #2177 (fix(core): wait_completed.resumeAt replay fix) and #2193 (ENFORCE_STRICT_CONCURRENCY) so the event-log-race-repro job runs against both changes together, on top of the full CI-harness improvements (actionable summary, slow≠stuck grace, fetch retries, and structured-error failure classification).

Goal: see whether the combination reproduces the CORRUPTED_EVENT_LOG observed on #2193 (now correctly classified rather than masked as other), and whether the two fixes interact.

Sources:

🤖 Generated with Claude Code

TooTallNate and others added 23 commits May 30, 2026 08:30
…rded value

A reused/duration sleep races a `wait_completed` replay against a
non-deterministic, wall-clock-derived expected value, producing a false
CorruptedEventLogError on a perfectly consistent event log.

`sleep(<ms|string>)` computes its resumeAt as `Date.now() + duration` (see
parseDurationToDate). The original run records that absolute timestamp into
both wait_created and wait_completed. During replay the VM clock advances to
each event's createdAt, so a freshly-created sleep recomputes a *different*
absolute resumeAt. Normally harmless: the wait_created consumer overwrites the
queue item's resumeAt with the recorded (authoritative) value before
wait_completed is validated.

The bug: when a wait_completed is consumed by a sleep consumer that never
applied a wait_created (hasCreatedEvent=false), the queue item still holds the
freshly-recomputed value, and the resumeAt comparison fails — even though the
event log is internally consistent and the recorded resumeAt is the source of
truth. Captured in production stress runs: hasCreatedEvent=false with ~18-42s
deltas between the recomputed and recorded resumeAt.

Fix: only validate resumeAt when an authoritative recorded value is available
(hasCreatedEvent=true). When it is not, the correlationId match already
establishes the wait's identity, so skip the check rather than fail. Extracted
the validation into `detectResumeAtMismatch`, which also lowers the consumer
callback's cognitive-complexity warning (33 -> 21).

Adds a regression test that advances the replay clock (via updateTimestamp)
and asserts a consistent wait_completed with hasCreatedEvent=false no longer
raises CorruptedEventLogError. Pre-existing stable bug; independent of the
hook-vs-sleep race fix (#2171) and of the server-side work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the missing patch changeset for the `@workflow/core` wait_completed
resumeAt replay fix so it gets a version bump and changelog entry.

Also remove the fixed 250ms grace timer from the new regression test: it
now races the error-vs-resolve outcomes directly, so a regression surfaces
deterministically (error branch, or a hang caught by the test timeout)
rather than via a flaky race against a wall-clock guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The hasCreatedEvent gate that skips the resumeAt equality check (to avoid a
false mismatch against a non-deterministic recomputed value) also skipped the
malformed-value check. A non-finite / unparseable resumeAt is corrupt data
regardless of whether an authoritative recorded value exists — the original
run always records a valid parseDurationToDate(...) Date, so a consistent log
never produces one. Flag it unconditionally, before the hasCreatedEvent gate;
finite-value equality stays gated as before.

Adds a regression test asserting an Invalid Date resumeAt raises even with
hasCreatedEvent=false (the counterpart to the consistent-replay test, which
must keep resolving).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit ae3c833)
(cherry picked from commit c1d7bab)
…ist + infra breakdown

Rework the PR-comment renderer so a human can immediately see what gates the
job and inspect every failing run:

- 🚨 Event-Log Regressions table lists *every* gating run in full (never
  truncated), each with its duration, a synthesised detail line, and a direct
  dashboard link. Stuck runs render "no terminal state after <ms>".
- Infra (non-gating) section groups harness noise by error code with a
  plain-language explanation and example run links, instead of flooding one
  table with thousands of rows.
- Headline names the regression count and digests the infra noise
  (e.g. "904 HOOK_RESUME_FAILED, 61 NO_WAKE_BRANCH").

Adds unit coverage for the breakdown, message synthesis and the
never-truncate-regressions guarantee.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Wielander <peter.wielander@vercel.com>
Forces ENFORCE_STRICT_CONCURRENCY behaviour on regardless of the env var so
all CI e2e jobs exercise per-run flow topics + maxConcurrency:1. Skips the
three off-by-default unit assertions. Drop this commit before merge.
On run-poll timeout, fetch the run's event log and record the latest event
(type, step name, elapsed) as the stuck run's errorMessage. The summary's
regression table then shows "stuck after N events; latest step_started (foo)
at +12.3s" with a dashboard link, instead of only a duration — so a human can
see where the run wedged without opening every link. Best-effort; falls back
to the duration-only note if the event fetch fails.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ep-resumeat-replay

# Conflicts:
#	.github/scripts/render-event-log-race-repro-results.js
#	.github/scripts/render-event-log-race-repro-results.test.js
A run flagged at the 150s poll budget can simply be slow on a loaded preview
deployment — observed wrun_…EFDZ9 completed shortly after the harness gave up
and was wrongly gated as `stuck`.

Add a generous post-budget grace window: a run that reaches a terminal state
during grace is classified by its real outcome (completed → non-gating
`SLOW_COMPLETION` infra, surfaced for visibility; failed → its error class).
Only a run still non-terminal after budget + grace is a genuine wedge (gating
`stuck`). Renderer gains notes for SLOW_COMPLETION/CANCELLED and singular/plural
agreement fixes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e they occur

Investigating HARNESS_ERRORs on a repro run: a `fetch failed` and a `Hook not
found`. Both came from harness-side network calls to the deployment, not the
SDK. A single dropped connection should never abort tracking an otherwise
healthy run.

- Add `withRetry` (linear backoff, transient-network detection) and apply it to
  the harness network calls: getWorkflowMetadata, start, resumeHook, and the
  run-status poll. On final failure the error is prefixed with the call site
  (e.g. "start: fetch failed", "poll runs.get: fetch failed"), so the infra
  breakdown says *where* it happened.
- pollTerminalRun no longer aborts on a flaky GET: a transient error just
  retries/continues until the deadline.
- waitForHook labels its surfaced error ("waitForHook: Hook not found") so the
  hook-propagation timeout is identifiable in the summary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ist + infra breakdown

Rework the PR-comment renderer so a human can immediately see what gates the
job and inspect every failing run:

- 🚨 Event-Log Regressions table lists *every* gating run in full (never
  truncated), each with its duration, a synthesised detail line, and a direct
  dashboard link. Stuck runs render "no terminal state after <ms>".
- Infra (non-gating) section groups harness noise by error code with a
  plain-language explanation and example run links, instead of flooding one
  table with thousands of rows.
- Headline names the regression count and digests the infra noise
  (e.g. "904 HOOK_RESUME_FAILED, 61 NO_WAKE_BRANCH").

Adds unit coverage for the breakdown, message synthesis and the
never-truncate-regressions guarantee.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 8f41186)
On run-poll timeout, fetch the run's event log and record the latest event
(type, step name, elapsed) as the stuck run's errorMessage. The summary's
regression table then shows "stuck after N events; latest step_started (foo)
at +12.3s" with a dashboard link, instead of only a duration — so a human can
see where the run wedged without opening every link. Best-effort; falls back
to the duration-only note if the event fetch fails.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit dee4370)
A run flagged at the 150s poll budget can simply be slow on a loaded preview
deployment — observed wrun_…EFDZ9 completed shortly after the harness gave up
and was wrongly gated as `stuck`.

Add a generous post-budget grace window: a run that reaches a terminal state
during grace is classified by its real outcome (completed → non-gating
`SLOW_COMPLETION` infra, surfaced for visibility; failed → its error class).
Only a run still non-terminal after budget + grace is a genuine wedge (gating
`stuck`). Renderer gains notes for SLOW_COMPLETION/CANCELLED and singular/plural
agreement fixes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 31d5b99)
…e they occur

Investigating HARNESS_ERRORs on a repro run: a `fetch failed` and a `Hook not
found`. Both came from harness-side network calls to the deployment, not the
SDK. A single dropped connection should never abort tracking an otherwise
healthy run.

- Add `withRetry` (linear backoff, transient-network detection) and apply it to
  the harness network calls: getWorkflowMetadata, start, resumeHook, and the
  run-status poll. On final failure the error is prefixed with the call site
  (e.g. "start: fetch failed", "poll runs.get: fetch failed"), so the infra
  breakdown says *where* it happened.
- pollTerminalRun no longer aborts on a flaky GET: a transient error just
  retries/continues until the deadline.
- waitForHook labels its surfaced error ("waitForHook: Hook not found") so the
  hook-propagation timeout is identifiable in the summary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit a9b68c0)
…issing field

A failed WorkflowRun exposes its reason as `error: { code, message }` and has no
top-level `errorCode`, so the poller's `classifyFailure(runData.errorCode)` was
always passing `undefined` — collapsing every polled failure to an
uncategorised, detail-less `other`. Read `runData.error.code`/`.message` so
USER_ERROR/RUNTIME_ERROR/CORRUPTED_EVENT_LOG are classified correctly and the
regression row shows why the run failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit d2a59d4)
…issing field

A failed WorkflowRun exposes its reason as `error: { code, message }` and has no
top-level `errorCode`, so the poller's `classifyFailure(runData.errorCode)` was
always passing `undefined` — collapsing every polled failure to an
uncategorised, detail-less `other`. Read `runData.error.code`/`.message` so
USER_ERROR/RUNTIME_ERROR/CORRUPTED_EVENT_LOG are classified correctly and the
regression row shows why the run failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit d2a59d4)
…t-concurrency

# Conflicts:
#	packages/core/e2e/event-log-race-repro.test.ts
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Jun 1, 2026

🦋 Changeset detected

Latest commit: 72540fe

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

This PR includes changesets to release 17 packages
Name Type
@workflow/world-vercel Minor
@workflow/builders Minor
@workflow/next Minor
@workflow/sveltekit Patch
@workflow/core Patch
@workflow/cli Patch
@workflow/web Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/nitro Patch
@workflow/rollup Patch
@workflow/vite Patch
@workflow/vitest Patch
workflow Patch
@workflow/web-shared Patch
@workflow/world-testing Patch
@workflow/nuxt Patch

Not sure what this means? Click here to learn what changesets are.

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

@VaguelySerious VaguelySerious added the event-log-race-repro Run the event log race reproduction job label Jun 1, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 899 2 67 968
✅ 💻 Local Development 970 0 86 1056
✅ 📦 Local Production 970 0 86 1056
✅ 🐘 Local Postgres 970 0 86 1056
✅ 🪟 Windows 88 0 0 88
❌ 🌍 Community Worlds 135 87 0 222
✅ 📋 Other 492 0 36 528
Total 4524 89 361 4974

❌ Failed Tests

▲ Vercel Production (2 failed)

hono (1 failed):

  • DurableAgent e2e tool approval (GAP) completes but needsApproval is not checked (GAP)

nuxt (1 failed):

  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KT1ERK4911DGDKW22WAF5356 | 🔍 observability
🌍 Community Worlds (87 failed)

mongodb (11 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KT1EAAGZNWS5QC9B7AXGG3SV
  • sleepingWorkflow | wrun_01KT1EANMNBG6GND4FHP0EQXV1
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getStreamChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getStreamChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getStreamChunks getStreamChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KT1EE1XPC7V601T2Z4KSPWER
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KT1EJPEXYN3VR622Q5DV0FFW
  • pages router sleepingWorkflow via pages router
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KT1ERZ95YMAMXMQJ7FZJ3F2D

redis (9 failed):

  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KT1EAAGZNWS5QC9B7AXGG3SV
  • sleepingWorkflow | wrun_01KT1EANMNBG6GND4FHP0EQXV1
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getStreamChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getStreamChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getStreamChunks getStreamChunks returns same content as reading the stream
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KT1EJPEXYN3VR622Q5DV0FFW
  • pages router sleepingWorkflow via pages router
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KT1ERZ95YMAMXMQJ7FZJ3F2D

turso-dev (1 failed):

  • dev e2e should rebuild on imported step dependency change

turso (66 failed):

  • addTenWorkflow | wrun_01KT1E968CCB17BRNQFPDZXEH6
  • addTenWorkflow | wrun_01KT1E968CCB17BRNQFPDZXEH6
  • wellKnownAgentWorkflow (.well-known/agent) | wrun_01KT1EAY4M00BRC0V6YNZK72EY
  • should work with react rendering in step
  • promiseAllWorkflow | wrun_01KT1E9D6H1KNECZTYYNW383KV
  • promiseRaceWorkflow | wrun_01KT1E9JD8YR2TMJF05EG13MQA
  • promiseAnyWorkflow | wrun_01KT1E9NJE9M4J9M26FMKWCAB3
  • importedStepOnlyWorkflow | wrun_01KT1EBF84Q4CBTHWEH39CKGE9
  • readableStreamWorkflow | wrun_01KT1E9RTG48TVG0K3FN6YTX7P
  • hookWorkflow | wrun_01KT1EA4YMWQ2KSB3SPCDGGJC7
  • hookWorkflow is not resumable via public webhook endpoint | wrun_01KT1EAAGZNWS5QC9B7AXGG3SV
  • webhookWorkflow | wrun_01KT1EAF2GC4NYSD9MR7Y5T95Q
  • sleepingWorkflow | wrun_01KT1EANMNBG6GND4FHP0EQXV1
  • parallelSleepWorkflow | wrun_01KT1EB4ACSX31NPB8N1BMAVKA
  • nullByteWorkflow | wrun_01KT1EB8B34WGVK6XFQRH4CW2B
  • workflowAndStepMetadataWorkflow | wrun_01KT1EBEV8DT0XKC25ABM8QF61
  • outputStreamWorkflow no startIndex (reads all chunks)
  • outputStreamWorkflow positive startIndex (skips first chunk)
  • outputStreamWorkflow negative startIndex (reads from end)
  • outputStreamWorkflow - getTailIndex and getStreamChunks getTailIndex returns correct index after stream completes
  • outputStreamWorkflow - getTailIndex and getStreamChunks getTailIndex returns -1 before any chunks are written
  • outputStreamWorkflow - getTailIndex and getStreamChunks getStreamChunks returns same content as reading the stream
  • outputStreamInsideStepWorkflow - getWritable() called inside step functions | wrun_01KT1EE1XPC7V601T2Z4KSPWER
  • fetchWorkflow | wrun_01KT1EEHRC7GKA4BE82TNQSTR4
  • promiseRaceStressTestWorkflow | wrun_01KT1EENKAZ9C2SVHZC2BB8VYZ
  • 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 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_01KT1EJ7YP8F5TXEJGXMT6RKM4
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously | wrun_01KT1EJPEXYN3VR622Q5DV0FFW
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KT1EK8SZJZ9DRS7MN96RD7MH
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KT1EKQYFPAQT4WAV8DE1AY1H
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KT1EKZJW464SREGAKDSKB5CC
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KT1EM6DMHQ454KTWS9QYMBH7
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KT1EM9ASDHGM99CBNVHG9RJD
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KT1EMQWF1K206W3ZMHCEG8WY
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KT1EMWJ7VX9GMKCB5G995V1V
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KT1EN4SK2NGPEKBP9RTN7EB7
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KT1ENDA1F6Y2MEE3A96GMDGB
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KT1ENMGZE8RN73QKNTK77RAQ
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KT1ENVJQR7WHEDPJKR2KJW7H
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KT1EP3CBRPYTAB8NT98GP1BH
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KT1EPHNKBQZMJY69QV2E5QRY
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KT1EPV7EYZQHBPMSCBSXPDNT
  • cancelRun - cancelling a running workflow | wrun_01KT1EQ3FT48KX055BJQY3ZA37
  • cancelRun via CLI - cancelling a running workflow | wrun_01KT1EQCCWYSDFC3H5ST4JSZJM
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KT1EQQJJK7XP4KCHZN8X7DED
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_01KT1ER78NXRVVA7YVP6H01QBR
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KT1ERK4911DGDKW22WAF5356
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_01KT1ERT7Y4K5628RGNEVJMQQJ
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_01KT1ERWAYGHZ2TS0ADGTK7BER
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_01KT1ERZ95YMAMXMQJ7FZJ3F2D

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 81 0 7
✅ example 81 0 7
✅ express 81 0 7
✅ fastify 81 0 7
❌ hono 80 1 7
✅ nextjs-turbopack 86 0 2
✅ nextjs-webpack 86 0 2
✅ nitro 81 0 7
❌ nuxt 80 1 7
✅ sveltekit 81 0 7
✅ vite 81 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 82 0 6
✅ express-stable 82 0 6
✅ fastify-stable 82 0 6
✅ hono-stable 82 0 6
✅ nextjs-turbopack-canary 69 0 19
✅ nextjs-turbopack-stable 88 0 0
✅ nextjs-webpack-canary 69 0 19
✅ nextjs-webpack-stable 88 0 0
✅ nitro-stable 82 0 6
✅ nuxt-stable 82 0 6
✅ sveltekit-stable 82 0 6
✅ vite-stable 82 0 6
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 82 0 6
✅ express-stable 82 0 6
✅ fastify-stable 82 0 6
✅ hono-stable 82 0 6
✅ nextjs-turbopack-canary 69 0 19
✅ nextjs-turbopack-stable 88 0 0
✅ nextjs-webpack-canary 69 0 19
✅ nextjs-webpack-stable 88 0 0
✅ nitro-stable 82 0 6
✅ nuxt-stable 82 0 6
✅ sveltekit-stable 82 0 6
✅ vite-stable 82 0 6
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 82 0 6
✅ express-stable 82 0 6
✅ fastify-stable 82 0 6
✅ hono-stable 82 0 6
✅ nextjs-turbopack-canary 69 0 19
✅ nextjs-turbopack-stable 88 0 0
✅ nextjs-webpack-canary 69 0 19
✅ nextjs-webpack-stable 88 0 0
✅ nitro-stable 82 0 6
✅ nuxt-stable 82 0 6
✅ sveltekit-stable 82 0 6
✅ vite-stable 82 0 6
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 88 0 0
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 5 0 0
❌ mongodb 58 11 0
✅ redis-dev 5 0 0
❌ redis 60 9 0
❌ turso-dev 4 1 0
❌ turso 3 66 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 82 0 6
✅ e2e-local-dev-tanstack-start-stable 82 0 6
✅ e2e-local-postgres-nest-stable 82 0 6
✅ e2e-local-postgres-tanstack-start-stable 82 0 6
✅ e2e-local-prod-nest-stable 82 0 6
✅ e2e-local-prod-tanstack-start-stable 82 0 6

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

⚠️ Community world tests failed (non-blocking):

  • Community Worlds: failure

Check the workflow run for details.

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Jun 1, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Jun 1, 2026 11:16am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Jun 1, 2026 11:16am
example-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-astro-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-express-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-fastify-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-hono-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-nitro-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-nuxt-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-sveltekit-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workbench-vite-workflow Ready Ready Preview, Comment Jun 1, 2026 11:16am
workflow-docs Ready Ready Preview, Comment, Open in v0 Jun 1, 2026 11:16am
workflow-swc-playground Ready Ready Preview, Comment Jun 1, 2026 11:16am
workflow-tarballs Ready Ready Preview, Comment Jun 1, 2026 11:16am
workflow-web Ready Ready Preview, Comment Jun 1, 2026 11:16am

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

Event Log Race Repro

🚨 2 of 2000 latest repro runs hit event-log regressions — see the linked runs below.

🚨 Event-Log Regressions (2)

These gate the job. Each row links to the workflow run on the dashboard.

Scenario Attempt Outcome Status Duration Detail Run
hook-sleep 642 stuck running 275252ms stuck after 20 events; latest hook_received at +30.1s wrun_01KT27CMDX1RZMF2795QX45Z90
hook-sleep 1172 stuck running 271737ms stuck after 14 events; latest hook_received at +22.4s wrun_01KT27R0DCWEF8TQJ1H5B2A5WV

Run History

Metric 2026-06-01 11:45 UTC #1
logs / deploy
2026-06-01 12:24 UTC #2
logs / deploy
2026-06-01 12:57 UTC #3
logs / deploy
2026-06-01 13:41 UTC #4
logs / deploy
2026-06-01 18:50 UTC #5
logs / deploy
Result 2/2000 regressions 8/2000 regressions (+1 infra) 33/2000 regressions (+2 infra) 26/2000 regressions (+3 infra) 2/2000 regressions
Total 2000 2000 2000 2000 2000
completed 1998 1991 1965 1971 1998
CORRUPTED_EVENT_LOG 0 0 0 0 0
USER_ERROR 0 0 0 0 0
RUNTIME_ERROR 0 0 0 0 0
stuck 1 8 33 26 2
other 1 0 0 0 0
infra 0 1 2 3 0
Config 2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters 2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters 2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters 2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters 2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters
Timing sleep 5000ms / resume 15000+10000ms / timeout 150000ms sleep 5000ms / resume 15000+10000ms / timeout 150000ms sleep 5000ms / resume 15000+10000ms / timeout 150000ms sleep 5000ms / resume 15000+10000ms / timeout 150000ms sleep 5000ms / resume 15000+10000ms / timeout 150000ms

Latest Scenario Breakdown

Scenario Total completed CORRUPTED_EVENT_LOG USER_ERROR RUNTIME_ERROR stuck other infra
hook-sleep 1500 1498 0 0 0 2 0 0
step-fanout 250 250 0 0 0 0 0 0
step-sleep-race-step-biased 125 125 0 0 0 0 0 0
step-sleep-race-sleep-biased 125 125 0 0 0 0 0 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

event-log-race-repro Run the event log race reproduction job

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants