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

TooTallNateand 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 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
NameType
@workflow/world-vercelMinor
@workflow/buildersMinor
@workflow/nextMinor
@workflow/sveltekitPatch
@workflow/corePatch
@workflow/cliPatch
@workflow/webPatch
@workflow/astroPatch
@workflow/nestPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/vitePatch
@workflow/vitestPatch
workflowPatch
@workflow/web-sharedPatch
@workflow/world-testingPatch
@workflow/nuxtPatch

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

@VaguelySeriousVaguelySerious added the event-log-race-repro Run the event log race reproduction job label Jun 1, 2026
@github-actions

github-actionsBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
❌ ▲ Vercel Production899267968
✅ 💻 Local Development9700861056
✅ 📦 Local Production9700861056
✅ 🐘 Local Postgres9700861056
✅ 🪟 Windows880088
❌ 🌍 Community Worlds135870222
✅ 📋 Other492036528
Total4524893614974

❌ 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
AppPassedFailedSkipped
✅ astro8107
✅ example8107
✅ express8107
✅ fastify8107
❌ hono8017
✅ nextjs-turbopack8602
✅ nextjs-webpack8602
✅ nitro8107
❌ nuxt8017
✅ sveltekit8107
✅ vite8107
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable8206
✅ express-stable8206
✅ fastify-stable8206
✅ hono-stable8206
✅ nextjs-turbopack-canary69019
✅ nextjs-turbopack-stable8800
✅ nextjs-webpack-canary69019
✅ nextjs-webpack-stable8800
✅ nitro-stable8206
✅ nuxt-stable8206
✅ sveltekit-stable8206
✅ vite-stable8206
✅ 📦 Local Production
AppPassedFailedSkipped
✅ astro-stable8206
✅ express-stable8206
✅ fastify-stable8206
✅ hono-stable8206
✅ nextjs-turbopack-canary69019
✅ nextjs-turbopack-stable8800
✅ nextjs-webpack-canary69019
✅ nextjs-webpack-stable8800
✅ nitro-stable8206
✅ nuxt-stable8206
✅ sveltekit-stable8206
✅ vite-stable8206
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable8206
✅ express-stable8206
✅ fastify-stable8206
✅ hono-stable8206
✅ nextjs-turbopack-canary69019
✅ nextjs-turbopack-stable8800
✅ nextjs-webpack-canary69019
✅ nextjs-webpack-stable8800
✅ nitro-stable8206
✅ nuxt-stable8206
✅ sveltekit-stable8206
✅ vite-stable8206
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack8800
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev500
❌ mongodb58110
✅ redis-dev500
❌ redis6090
❌ turso-dev410
❌ turso3660
✅ 📋 Other
AppPassedFailedSkipped
✅ e2e-local-dev-nest-stable8206
✅ e2e-local-dev-tanstack-start-stable8206
✅ e2e-local-postgres-nest-stable8206
✅ e2e-local-postgres-tanstack-start-stable8206
✅ e2e-local-prod-nest-stable8206
✅ e2e-local-prod-tanstack-start-stable8206

📋 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

vercelBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actionsBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

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.

ScenarioAttemptOutcomeStatusDurationDetailRun
hook-sleep642stuckrunning275252msstuck after 20 events; latest hook_received at +30.1swrun_01KT27CMDX1RZMF2795QX45Z90
hook-sleep1172stuckrunning271737msstuck after 14 events; latest hook_received at +22.4swrun_01KT27R0DCWEF8TQJ1H5B2A5WV

Run History

Metric2026-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
Result2/2000 regressions8/2000 regressions (+1 infra)33/2000 regressions (+2 infra)26/2000 regressions (+3 infra)2/2000 regressions
Total20002000200020002000
completed19981991196519711998
CORRUPTED_EVENT_LOG00000
USER_ERROR00000
RUNTIME_ERROR00000
stuck1833262
other10000
infra01230
Config2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters2000 runs / hook 1500, fanout 250, race 250 / c50 / step c50 / 8 iters
Timingsleep 5000ms / resume 15000+10000ms / timeout 150000mssleep 5000ms / resume 15000+10000ms / timeout 150000mssleep 5000ms / resume 15000+10000ms / timeout 150000mssleep 5000ms / resume 15000+10000ms / timeout 150000mssleep 5000ms / resume 15000+10000ms / timeout 150000ms

Latest Scenario Breakdown

ScenarioTotalcompletedCORRUPTED_EVENT_LOGUSER_ERRORRUNTIME_ERRORstuckotherinfra
hook-sleep15001498000200
step-fanout250250000000
step-sleep-race-step-biased125125000000
step-sleep-race-sleep-biased125125000000

@VaguelySeriousVaguelySerious removed the event-log-race-repro Run the event log race reproduction job label Jul 31, 2026
Sign up for freeto 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.

2 participants

@VaguelySerious@TooTallNate