Skip to content

Stress-test background hook subscribers and merged hook inboxes; add a cookbook recipe - #3986

Open
pranaygp wants to merge 9 commits into
mainfrom
pgp/async-iterator-background-subscriber-and-merge
Open

Stress-test background hook subscribers and merged hook inboxes; add a cookbook recipe#3986
pranaygp wants to merge 9 commits into
mainfrom
pgp/async-iterator-background-subscriber-and-merge

Conversation

@pranaygp

@pranaygp pranaygp commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Validates two userland hook patterns an agent session needs, adds e2e coverage that stresses them on every world, and documents them as two cookbook recipes.

  1. Background subscriber. A for await (const m of hook) loop that the workflow body never awaits, pushing payloads into a local inbox that each turn drains for steering.
  2. Merged inbox. Several hooks merged into one async iterator with a plain mergeAsyncIterables helper, including a hook added to the merge after the run started (a Slack thread whose id is only known after the first reply).

Both are ordinary JavaScript. What the tests establish is that hook delivery stays in event-log order relative to step results, so the inbox a turn drains on the live run is the inbox every replay drains at that turn. Each turn's drained messages are passed as the step's arguments and echoed back, so a replay that grouped payloads differently would disagree with the recorded arguments and fail the test. The event log is also checked for exact hook_received / step_completed counts and zero hook_conflict.

Tests (hook inbox patterns in packages/core/e2e/e2e.test.ts, workflows in workbench/example/workflows/99_e2e.ts)

Test Shape Payloads (default)
backgroundInboxWorkflow steering 10 turns, bursts paced by step_completed so payloads land mid-step 64 + end marker
backgroundInboxWorkflow early return run returns while the subscriber is still parked on await hook; using releases the token 12
inboxWaitLoopWorkflow drain-then-wait() session loop, each turn drains what arrived since the last 30 + end marker
mergedHooksWorkflow ordered 3 hooks, round-robin sequential sends, asserts exact log order across hooks 120 + 3
mergedHooksWorkflow concurrent 3 concurrent senders, a step per message, asserts per-hook order 75 + 3
dynamicInboxWorkflow identity hook first, thread hook added after a step, alternating sends 45 + 1
handoffInboxWorkflow loop exits on its own, hook released and committed, late drain handed to a successor run; sender runs until the parent completes ~20, bounded at 60
mergedHooksReplayCheckWorkflow irregular 3 hooks, seeded random bursty source order (A,A,A,B,C,C,A,..., seed printed on failure), sent while each merged item costs a 400 ms step so payloads buffer mid-step; asserts exact log order and that the final replay's merge order equals the arguments the live run recorded per step 36 + 3
mergedHooksReplayCheckWorkflow silent + early done 4 hooks: one never receives a payload (closed last), one closes after a third of its messages while the others keep flowing; asserts order, replay agreement, and closure order 24 + 4

E2E_INBOX_SCALE=N multiplies every count for soaks.

Local results

  • world-local (nextjs-turbopack / nextjs-webpack, next start): 6/6 green on 8 consecutive runs at the default scale.
  • world-postgres: 6/6 green on 8 consecutive runs at the default scale, plus 6/6 at E2E_INBOX_SCALE=4 (480 payloads through the merged inbox, 300 through the step-per-message variant).
  • world-local at E2E_INBOX_SCALE=4 first OOMed the single next start process (heap limit) before any test finished: the known single-process saturation from WORKFLOW_LOCAL_QUEUE_CONCURRENCY defaulting to 1000 (see CLAUDE.md). Rerun with WORKFLOW_LOCAL_QUEUE_CONCURRENCY=10 and an 8 GB heap: 5/6 green with every ordering assertion intact (the merged inbox reproduced the exact send order of 480 payloads), and the sixth, dynamicInboxWorkflow, failed only because its thread-hook lookup hit waitForHook's 30 s default while six runs contended for ten queue slots. Alone at 4x it passes in 9 s, so that lookup now gets the same 120 s budget as the event waits. No ordering or replay-divergence failure was observed on any world.

Vercel lanes (first CI run, commit 74bf7e3)

Every Vercel prod / WS / HTTP lane failed on exactly one test, backgroundInboxWorkflow - run completes while the subscriber is still awaiting the hook, with HookNotFoundError from resumeHook; the other five inbox tests passed on all of them (nextjs-webpack: 162 passed). The cause was the test, not the runtime: on Vercel each resume is slow enough that the run finished its four turns and using disposed the hook while the test was still sending. Fixed by giving the workflow a minMessages floor so it keeps turning until it has observed every message the test sends. The wait-loop test also needed one retry on some lanes because the loop checked ended before draining, leaving payloads pushed between the last drain and the end marker unprocessed; the loop (and the cookbook example) now drain first. The unrelated failures in that run were RetryableError respects custom retryAfter delay (Windows) and hookDisposeTestWorkflow (express dev quickjs), both pre-existing.

Docs

Two cookbook recipes (v5 only, since the ordering guarantees were validated on v5):

  • Background Hook Subscriber (Common Patterns): the general pattern. Subscribe to a hook in a loop the body never awaits, read the buffer at safe points and pass what you read into the step, the subscribeInbox drain/wait() wrapper (with wait() suspending durably), how a subscription ends, and why buffer reads after an await are replay-safe.
  • Hook Inbox & Steering (Agent Patterns): the agent specialization. Steering at turn boundaries, the mergeAsyncIterables helper, and adding a hook to the merge mid-session (the Slack-thread shape).

Also documented: the hand-off ending for a subscriber whose loop exits on its own. Release the hook, commit the release with a step, drain once more, and start a successor run with anything that beat the release, so nothing is dropped and a sender that lands after the release gets HookNotFoundError rather than silence. Covered by the new handoffInboxWorkflow e2e test, which sends continuously until the parent completes and follows the chain of successor runs.

Runtime fix: dispose() no longer orphans acknowledged payloads. The hand-off test found this: in 2 of 7 postgres runs and 3 of 13 world-local runs one acknowledged payload was processed by no generation, and on the Vercel lanes the parent returned late = [2,3,4] while its successor had been started with [2,3]. The parent's event log showed the cause each time: a hook_received after the last turn's step_completed and before hook_disposed. resumeHook is accepted until hook_disposed commits at the next suspension, but hook.dispose() stopped the in-memory iterator immediately, so a payload landing in between was buffered with no consumer: lost on the retained-VM path, delivered by a fresh replay, hence the divergence. No ordering of drain and dispose in workflow code can close this.

Both engines now treat disposal as the durable event it is. After dispose(), awaiters and the for await iterator keep receiving payloads that precede hook_disposed in the log, and iteration ends when the disposal event is observed (node: workflow/hook.ts tracks iterator waiters with their payload resolvers so the disposal event ends only the idle ones, ordered through promiseQueue; QuickJS: the host marks the hook and resolves a parked iterator with a sentinel when it processes hook_disposed). dispose() no longer schedules its own suspension; a waiter still parked at end of log already does. A unit test pins the shape (payloads before hook_disposed, dispose() called before any was consumed, iterator yields both then ends), and the hand-off e2e test is back to asserting zero loss and late == carried across the chain, logging how many payloads fell in the window so runs that exercised it are recognizable. dispose() docs in the API reference, foundations page, and JSDoc are updated.

Finding from the new merge tests: Promise.race is the wrong merge primitive here. Both new tests failed on both worlds on the first run with the same shape: recorded == observed held everywhere (the merge is replay-deterministic), but the order was A0..A11 B0..B11 C0..C11 against a bursty interleaved send order. The runtime resolves the buffered claims in log order, but while the consumer is away in a step they all settle, and Promise.race over already-settled promises picks by iteration order of the sources. The round-robin test never saw this because its payloads always found a waiting consumer. The helper (e2e and cookbook) now pushes each source's next() result into a FIFO when it resolves and yields from that queue, which yields log order; the cookbook says why.

QuickJS on world-local: the inbox tests are skipped there, and only there. The first CI run in which those lanes completed (every earlier push had cancelled them) failed 28 of them with mass timeouts, and I reproduced it locally: on world-local every resumeHook() leaves a queue wake-up, delivered to the single app process with no concurrency bound and no check that the run is still running; on QuickJS each wake-up instantiates a fresh WASM VM and replays the whole log before finding the run completed (one 120-payload run was replayed 114 more times after finishing). These tests send 20 to 120 resumes per run. Concurrently that starves the process (ReplayTimeoutRetryError at 240 s, 2,804 flow-route fetch failed in the express lane's server log, every later test timing out); one at a time the nine tests took 61 minutes and still failed five. The same tests pass on QuickJS against postgres (bounded worker pool) and Vercel (one invocation per replay), so the engine is covered and the skip is scoped to that dev-only pairing at this resume rate. Follow-up worth doing separately: have the flow handler short-circuit wake-ups for runs that are already completed, which removes the amplification for every world.

Docs pipeline fix. // @setup lines (type-check-only declarations in code samples, introduced in #846 and hidden client-side by a custom CodeBlock) have rendered on every page since the geistdocs migration (#2222) dropped that component; the production batching page shows them today. docs/lib/remark-strip-setup-lines.ts restores the behavior as a remark plugin wired through defineGeistdocsSourceConfig, so the strip happens once at build time and covers the rendered page and the processed-markdown exports. It removes the whole statement when the marker sits on the last line of a multi-line declaration, then trims the blank lines it leaves. Verified on a local next dev: both new pages render with zero @setup or declare tokens.

Docs typecheck and link lint pass. Review feedback addressed in 1b6cd3a: subscribeInbox now marks itself ended in a finally, so wait() cannot hang if the source completes or throws without an end marker.

Docs Preview

Page v5
Background Hook Subscriber (new) https://workflow-docs-git-pgp-async-iterator-background-subscrib-115d41.vercel.sh/v5/cookbook/common-patterns/background-hook-subscriber
Hook Inbox & Steering (new) https://workflow-docs-git-pgp-async-iterator-background-subscrib-115d41.vercel.sh/v5/cookbook/agent-patterns/hook-inbox
Cookbook index (new entries under Common Patterns and Agent Patterns) https://workflow-docs-git-pgp-async-iterator-background-subscrib-115d41.vercel.sh/v5/cookbook

The preview sits behind deployment protection, so the links need Vercel team access.

🤖 Generated with Claude Code

…s and merged hook inboxes

Two userland patterns an agent session needs from hooks: a `for await` over
a hook that the workflow body never awaits, pushing payloads into a local
inbox that each turn drains for steering; and several hooks merged into one
async iterator, including a hook added to the merge after the run started
(a Slack thread whose id is only known after the first reply).

Both are plain JavaScript, so what the new e2e tests establish is that hook
delivery stays in event-log order relative to step results: the inbox a
turn drains on the live run is the inbox every replay drains at that turn,
checked by echoing the drained messages back through the step's recorded
arguments. Six tests cover a fixed-turn loop under paced bursts, a run that
returns while its subscriber is still parked on the hook, a drain-then-wait
session loop, a three-hook merge with round-robin sends (exact log order),
concurrent senders with a step per message (per-hook order), and a hook
added mid-run. `E2E_INBOX_SCALE` multiplies the message counts for soaks.

The cookbook page (v5 only) ships the subscriber, the `mergeAsyncIterables`
helper, and the `subscribeInbox` drain/wait wrapper, with a steering example
and the Slack-thread shape.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@pranaygp
pranaygp requested a review from a team as a code owner September 4, 2026 20:00
Copilot AI lite review requested due to automatic review settings September 4, 2026 20:00
@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated
example-nextjs-workflow-turbopack Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
example-nextjs-workflow-webpack Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
example-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-astro-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-express-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-fastify-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-hono-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-nestjs-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-nitro-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-nuxt-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-python-workflow Building Building Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-sveltekit-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-tanstack-start-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workbench-vite-workflow Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workflow-docs Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workflow-swc-playground Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workflow-tarballs Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC
workflow-web Ready Ready Preview, v0 Sep 4, 2026 10:19pm UTC

@changeset-bot

changeset-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: bff32ad

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

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

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📊 Workflow Benchmarks

commit bff32ad · Fri, 04 Sep 2026 22:41:36 GMT · run logs

Backend: vercel · app: nextjs-turbopack

Metric Scenario Best (ms) P75 (ms) P90 (ms) P99 (ms) Samples
TTFS step 1269 (+74%) 🔻 1360 🔴 (+25%) 🔻 1394 🔴 (+25%) 🔻 1451 🔴 (+21%) 🔻 30
TTFS stream 223 (+1.4%) 1316 🔴 (+25%) 🔻 1347 🔴 (+23%) 🔻 1393 🔴 (-2.4%) 30
TTFS hook + stream 1249 (+42%) 🔻 1562 🔴 (+18%) 🔻 1616 🔴 (+15%) 🔻 1655 🔴 (+6.0%) 30
Fan-out TTFS Promise.all(100 steps) 603 (-31%) 💚 1982 (+16%) 🔻 2039 (+14%) 2185 (+17%) 🔻 10
Fan-out TTLS Promise.all(100 steps) 2087 (-9.0%) 3890 (+7.2%) 5387 (+43%) 🔻 8450 (+17%) 🔻 10
STSO 1020 steps (inline) 80 (-20%) 💚 124 (-4.6%) 144 (-6.5%) 186 (-8.4%) 1019
WO 1020 steps 124195 (-5.7%) 124195 (-5.7%) 124195 (-5.7%) 124195 (-5.7%) 1
CRTT first chunk (pooled) 59 (-18%) 💚 97 (-32%) 💚 196 (-7.5%) 406 (+14%) 28

Streams

Scenario CRTT 1st p75 p90 p99 CDV max iters
paced control (100/s, 60B) 81.5 (-17%) 161 (-16%) 247 (-18%) 595 (+21%) 122 (-46%) 10
size sweep (100/s, 160B-12KB) 76 (-27%) 149 (-34%) 353 (±0%) 615 (-3%) 129 (-39%) 10
replay gateway-gpt-5.4-nano-2000t (1x) 112 (-18%) 125 (-34%) 151 (-53%) 270 (-53%) 261 (-40%) 3
replay eve-gpt-5.6-sol-2000t (1x) 85.5 (-18%) 119 (-40%) 150 (-51%) 269 (-51%) 230 (-50%) 2
replay eve-gpt-5.6-sol-2000t (2x) 76 (-46%) 164 (-50%) 230 (-53%) 365 (-61%) 236 (-50%) 3
📈 STSO distribution vs main (inline / queue-hop histograms)

1020 steps (inline)

Cumulative STSO time: main 131526ms → this run 124020ms (Δ -7506ms, -6%)

 50-100 ms  ┃                         main   0  this   2    +2
100-150 ms  ███████████████████████┃  main 899  this 936   +37
150-200 ms  █┃█                       main 108  this  74   -34
200-250 ms  ┃                         main   8  this   5    -3
250-300 ms  ┃                         main   2  this   1    -1
300-350 ms  ┃                         main   0  this   1    +1
350-400 ms  ┃                         main   1  this   0    -1
400-450 ms  ┃                         main   1  this   0    -1
📈 CRTT drill-down vs main (RTT distributions & profiles)
variant  RTT 1ms→5s+             avg         p50         p90         p99     n
control  ······▄█▂▁···  133.6 (-15%)  120 (-13%)  247 (-18%)  595 (+21%)  3000
sweep    ······▄█▁▁···  131.7 (-25%)  115 (-26%)   353 (±0%)   615 (-3%)  3000
gw 1x    ·····▁▇█▁····  108.3 (-32%)  103 (-24%)  151 (-53%)  270 (-53%)  5295
eve 1x   ·····▁█▆▁····  101.1 (-38%)   92 (-32%)  150 (-51%)  269 (-51%)  5186
eve 2x   ·····▁▄█▂····  137.4 (-40%)  122 (-44%)  230 (-53%)  365 (-61%)  7779

RTT over stream progress (avg per tenth of stream, bars scaled min→max):

control  █▅▅▅▄▂▃▁▁▁  114–168ms
sweep    ▄▁▂▅▆▃▁▂██  112–158ms
gw 1x    ▆▂▂▂█▂▁▄▁▃  101–124ms
eve 1x   ▆▃▅▄▂▃█▆▃▁  87–120ms
eve 2x   ▆▃▃▃▂▁▆█▆▁  112–175ms

RTT by chunk size (avg per log size bin, ~160B → ~12KB serialized, bars scaled min→max):

sweep  ▆▇█▆▅▃▁  129–134ms

Delivery jitter over stream progress (avg positive CDV per tenth of stream, bars scaled min→max):

control  ▄▃▆▁█▆█▃▅▃  30–49ms
sweep    ▁▂▄▆▄▄▄▃█▃  36–70ms
gw 1x    ▇▅▃▁▇▆▆█▁▄  28–36ms
eve 1x   ▄▄▂▁▃▁█▄▃▆  19–24ms
eve 2x   █▇▁▁▇▄▄▂▄▅  18–25ms
📜 Previous results (1)

8fe31b3

Fri, 04 Sep 2026 22:02:40 GMT · run logs

vercel / nextjs-turbopack

Metric Scenario Best (ms) P75 (ms) P90 (ms) P99 (ms) Samples
TTFS step 245 (-66%) 💚 1249 🔴 (+14%) 1305 🔴 (+17%) 🔻 1774 🔴 (+47%) 🔻 30
TTFS stream 155 (-30%) 💚 1228 🔴 (+17%) 🔻 1251 🔴 (+14%) 1325 🔴 (-7.1%) 30
TTFS hook + stream 1331 (+52%) 🔻 1428 🔴 (+7.6%) 1469 🔴 (+4.6%) 5967 🔴 (+282%) 🔻 30
Fan-out TTFS Promise.all(100 steps) 534 (-38%) 💚 1810 (+5.8%) 1901 (+6.6%) 1904 (+1.7%) 10
Fan-out TTLS Promise.all(100 steps) 1942 (-15%) 💚 3380 (-6.9%) 3496 (-7.4%) 8072 (+12%) 10
STSO 1020 steps (inline) 106 (+6.0%) 130 (±0%) 147 (-4.5%) 192 (-5.4%) 1019
WO 1020 steps 132236 (±0%) 132236 (±0%) 132236 (±0%) 132236 (±0%) 1
CRTT first chunk (pooled) 45 (-38%) 💚 74 (-48%) 💚 83 (-61%) 💚 92 (-74%) 💚 28

Streams

Scenario CRTT 1st p75 p90 p99 CDV max iters
paced control (100/s, 60B) 63 (-36%) 109 (-43%) 142 (-53%) 268 (-46%) 79 (-65%) 10
size sweep (100/s, 160B-12KB) 67 (-35%) 112 (-50%) 197 (-44%) 376 (-41%) 95.5 (-55%) 10
replay gateway-gpt-5.4-nano-2000t (1x) 66 (-52%) 111 (-42%) 139 (-57%) 411 (-28%) 244 (-44%) 3
replay eve-gpt-5.6-sol-2000t (1x) 72.5 (-31%) 106 (-46%) 136 (-56%) 291 (-47%) 218 (-52%) 2
replay eve-gpt-5.6-sol-2000t (2x) 66 (-54%) 148 (-55%) 196 (-60%) 277 (-71%) 163 (-65%) 3
ℹ️ Metric definitions & methodology

Streams: first-chunk RTT (the stream-open path, before any buffering/backpressure), CRTT percentiles, and worst delivery stall (CDV max). Cells are medians across iterations; per-run values in the artifacts. No 🔴/🟢 marks until targets attach.

The collapsed STSO distribution section above buckets every step gap, split inline (same warm process — pure framework overhead) vs queue-hop (fresh process — dispatch, reinit, replay). = main, = this run, = fill.

The collapsed CRTT drill-down: per-variant RTT histograms (fixed log bins, · = empty) and mean RTT/positive-CDV profile lines over stream progress and chunk size. Histograms, avgs, and profiles merge exactly across runs; p50–p99 are percentile-of-percentiles. Per-index rows live in the artifacts.

Best/P75/P90/P99 deltas compare against the most recent benchmark run on main at the time of this run. 🔻 flags a delta worse than +15%, 💚 one better than −15%.

Metrics — TTFS: time to first step body (in-deployment start() → first step body) · Fan-out TTFS: fan-out time to first step (in-deployment start() → first of the parallel step bodies to complete) · Fan-out TTLS: fan-out time to last step (in-deployment start() → last of the parallel step bodies to complete, i.e. when the Promise.all resolves) · STSO: step-to-step overhead (gap between consecutive step bodies) · WO: workflow overhead (whole-run time outside step bodies, in-deployment anchored) · CRTT: chunk round-trip time (per-chunk write → read latency, one clock domain: deployment → stream backend → same deployment) · CDV: chunk delay variation / delivery jitter (inter-arrival gap minus inter-write gap per seq-adjacent pair; skew-free; the row is each run's MAX positive value, so one stall moves it)

Scenarios — step: one trivial no-op step, no stream; no hooks, so the run stays in turbo mode (in-process fast path) · stream: one streaming step; no hooks, so the run stays in turbo mode (in-process fast path) · hook + stream: registers a hook before one step, which exits turbo mode (dispatch path) · 1020 steps: 1020 trivial sequential steps; STSO is measured between consecutive steps in the given step ranges, and WO is the whole-run overhead outside step bodies · Promise.all(100 steps): 100 trivial no-op steps started together in a single Promise.all; Fan-out TTFS is the first of them to complete and Fan-out TTLS the last, both from the in-deployment clientStart, so their gap is the spread the runtime adds across the fan-out · paced control (100/s, 60B): the control: 300 tiny (~60B) deltas metronome-paced at 100/s — zero workload structure, so it reads the transport floor and flush cadence, and disambiguates transport-wide vs workload-specific when a replay row moves · size sweep (100/s, 160B-12KB): same pacing as the control with deltas padded in rotation across seven log-spaced sizes (~160B–12KB) — rotation decouples size from stream position, so it isolates whether chunk size causes latency · replay gateway-gpt-5.4-nano-2000t (1x): raw provider SSE cadence captured at the AI gateway boundary (gpt-5.4-nano, the most popular gateway model; per-token deltas p50 208B = the modal production chunk size), replayed exactly as measured — the typical customer's workload; its CDV is the typical customer's real delivery jitter · replay eve-gpt-5.6-sol-2000t (1x): a captured eve turn (gpt-5.6-sol, the most-used demanding eve model; ~2000 output tokens = production p50 turn length) replayed exactly as measured — eve's envelope protocol re-ships the cumulative message so sizes ramp 142B→13KB; the demanding outlier tenant's reality · replay eve-gpt-5.6-sol-2000t (2x): the same eve capture at 2x — the headroom/stress row; real fast-tier models emit the same chunk sizes at proportionally higher rate, so time compression is a faithful speed model · first chunk (pooled): every run's seq-0 RTT pooled across all stream scenarios — the first chunk precedes any workload differentiation, so pooling samples one shared stream-open path with exact percentiles

Replay cadences (semantic sha256) — eve-gpt-5.6-sol-2000t eaf22f5946e7c61f3c65c7006d550df180cfabd4e706254a09f22aec0cfb420d · gateway-gpt-5.4-nano-2000t 6f24ac518b6b83ff1d0e85a5fe78230db192716d66a7fc6b2fe022752001d041

🔴 marks a percentile over its target (within target is left unmarked). Targets (p75/p90/p99, ms) — TTFS 200/300/600

All timestamps are deployment-side; runs are triggered in-deployment, so the CI runner and api.vercel.com sit outside every measured window. TTFS = start() → first step body (includes dispatch + any cold start); Fan-out TTFS/TTLS = first/last step completion of one Promise.all from the same anchor (the gap is the runtime’s fan-out spread); STSO/WO between step bodies; CRTT inside the workflow (excludes the api.vercel.com read path).

Cold starts stay in the numbers (real bursty-workload latency, inflates P75+); Best is the warm floor.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

❌ Failed E2E Tests

💻 Local Development (216 failed)

express-stable-quickjs (21 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_41M1Q8EMS80GJKJEXQM4750PX0
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_41M1Q8EQF50GMK7EK12MHA2XCV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_41M1Q8ER0S0GTHQBDJ93ADA9VS
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_41M1Q8ESGA0GX9HCWTF92ZGQYP
  • closureVariableWorkflow - nested step functions with closure variables | wrun_41M1Q8F47K0GYAW8M5XH9C5DFY
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_41M1Q8F61T0GQNSFV0G5YR81V5
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_41M1Q8F65E0GNF7TG7RJCDXRE3
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_41M1Q8F7HE0GVV0D8SPAAHDC03
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_41M1Q8F9H50GN3T5KRJRG7K099
  • health check endpoint (HTTP) - workflow endpoint responds to __health query parameter
  • health check (queue-based) - workflow endpoint responds to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_41M1Q8FFWR0GXACE7DTJ1PJ8T8
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_41M1Q8FNGD0GHQVBT053N4QAX0
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_41M1Q8FNQR0GSZJEBE42Z75WT3
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_41M1Q8FNTT0GQJBGQ7HK5XC630
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_41M1Q8FP650GRNS8KB1NDJ1J0Y
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_41M1Q8G1FR0GPBQR4HW0H1EYDP
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0

fastify-stable-quickjs (19 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_41M1Q8DK4G0GGZRZQ103FTX97N
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_41M1Q8DRAQ0GJFDHK40JBG49SN
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_41M1Q8DTC70GT0S38DVHKE2SRS
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_41M1Q8EK4F0GQ3SVZDKPDYHDGB
  • hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable | wrun_41M1Q8E5XW0GXPS472P0JV7MSA
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_41M1Q8E9EZ0GGKQABAT6JAXYV0
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_41M1Q8EAXE0GWJBCH1Y1D5KWWK
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_41M1Q8ED080GZFENGNGV4C66AF
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_41M1Q8EH980GJR3HVSVYWQYYCA
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_41M1Q8EMS80GJKJEXQM4750PX0
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_41M1Q8EQF50GMK7EK12MHA2XCV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_41M1Q8ER0S0GTHQBDJ93ADA9VS
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_41M1Q8ESGA0GX9HCWTF92ZGQYP
  • closureVariableWorkflow - nested step functions with closure variables | wrun_41M1Q8F47K0GYAW8M5XH9C5DFY
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_41M1Q8F61T0GQNSFV0G5YR81V5
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_41M1Q8F65E0GNF7TG7RJCDXRE3
  • health check endpoint (HTTP) - workflow endpoint responds to __health query parameter
  • health check (queue-based) - workflow endpoint responds to health check messages

hono-stable-quickjs (42 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_41M1Q8EAXE0GWJBCH1Y1D5KWWK
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_41M1Q8ED080GZFENGNGV4C66AF
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_41M1Q8EH980GJR3HVSVYWQYYCA
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_41M1Q8EMS80GJKJEXQM4750PX0
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_41M1Q8EQF50GMK7EK12MHA2XCV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_41M1Q8ER0S0GTHQBDJ93ADA9VS
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_41M1Q8ESGA0GX9HCWTF92ZGQYP
  • closureVariableWorkflow - nested step functions with closure variables | wrun_41M1Q8F47K0GYAW8M5XH9C5DFY
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_41M1Q8F61T0GQNSFV0G5YR81V5
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_41M1Q8F65E0GNF7TG7RJCDXRE3
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_41M1Q8F7HE0GVV0D8SPAAHDC03
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_41M1Q8F9H50GN3T5KRJRG7K099
  • health check endpoint (HTTP) - workflow endpoint responds to __health query parameter
  • health check (queue-based) - workflow endpoint responds to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_41M1Q8FFWR0GXACE7DTJ1PJ8T8
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_41M1Q8FNGD0GHQVBT053N4QAX0
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_41M1Q8FNQR0GSZJEBE42Z75WT3
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_41M1Q8FNTT0GQJBGQ7HK5XC630
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_41M1Q8FP650GRNS8KB1NDJ1J0Y
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_41M1Q8G1FR0GPBQR4HW0H1EYDP
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_41M1Q8G2420GXJKZJJWJ7GZM3W
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_41M1Q8G3M10GXE6B61E0EKQRS7
  • cancelRun - cancelling a running workflow | wrun_41M1Q8G8990GMXCMPDVYMQ9P26
  • cancelRun via CLI - cancelling a running workflow | wrun_41M1Q8GD0Q0GJZ9JNDNV1CFXYM
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_41M1Q8GG1D0GY67YGE6DSXFB7Z
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_41M1Q8GGGD0GXSFXNRDKEPKXY8
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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 abortViaHookWorkflow: external hook triggers abort on in-flight step
  • importMetaUrlWorkflow - import.meta.url is available in step bundles | wrun_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW

nest-stable-quickjs (50 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_41M1Q8G3M10GXE6B61E0EKQRS7
  • cancelRun - cancelling a running workflow | wrun_41M1Q8G8990GMXCMPDVYMQ9P26
  • cancelRun via CLI - cancelling a running workflow | wrun_41M1Q8GD0Q0GJZ9JNDNV1CFXYM
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_41M1Q8GG1D0GY67YGE6DSXFB7Z
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_41M1Q8GGGD0GXSFXNRDKEPKXY8
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW
  • distributedAbortController - manual abort triggers signal | wrun_41M1Q8H3A80GG1VYBHFF5375F9
  • distributedAbortController - TTL expiration triggers signal | wrun_41M1Q8H5EQ0GXVKDS4AK0QPHXB
  • distributedAbortController - reconnect to existing controller | wrun_41M1Q8HA0Z0GK7Z6B5EXDENFA7
  • setAttributes start: initial attributes are seeded on run creation
  • setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • setAttributes setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • setAttributes setAttributesInsideStepWorkflow: step-body calls append attributed native events
  • setAttributes fire-and-forget: void setAttributes lands without awaiting
  • setAttributes Promise.all of disjoint-key writes: every key lands
  • setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit

nextjs-turbopack-canary-quickjs (25 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hook inbox patterns mergedHooksReplayCheckWorkflow - irregular cross-hook interleaving buffered under a slow step keeps log order on replay
  • hook inbox patterns mergedHooksReplayCheckWorkflow - a silent hook and an early done do not disturb the other sources
  • error handling retry behavior regular Error retries until success
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_41M1Q8DHWK0GP3K0EV6TE0PAVE
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_41M1Q8DK4G0GGZRZQ103FTX97N
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_41M1Q8DRAQ0GJFDHK40JBG49SN
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_41M1Q8DTC70GT0S38DVHKE2SRS
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_41M1Q8EK4F0GQ3SVZDKPDYHDGB
  • hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable | wrun_41M1Q8E5XW0GXPS472P0JV7MSA
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_41M1Q8E9EZ0GGKQABAT6JAXYV0
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_41M1Q8EAXE0GWJBCH1Y1D5KWWK
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_41M1Q8ED080GZFENGNGV4C66AF
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_41M1Q8EH980GJR3HVSVYWQYYCA
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_41M1Q8EMS80GJKJEXQM4750PX0
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_41M1Q8EQF50GMK7EK12MHA2XCV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_41M1Q8ER0S0GTHQBDJ93ADA9VS
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_41M1Q8ESGA0GX9HCWTF92ZGQYP
  • closureVariableWorkflow - nested step functions with closure variables | wrun_41M1Q8F47K0GYAW8M5XH9C5DFY
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_41M1Q8F61T0GQNSFV0G5YR81V5
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_41M1Q8F65E0GNF7TG7RJCDXRE3
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_41M1Q8F7HE0GVV0D8SPAAHDC03
  • health check endpoint (HTTP) - workflow endpoint responds to __health query parameter
  • health check (queue-based) - workflow endpoint responds to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints

nextjs-turbopack-stable-quickjs (37 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hook inbox patterns mergedHooksReplayCheckWorkflow - irregular cross-hook interleaving buffered under a slow step keeps log order on replay
  • hook inbox patterns mergedHooksReplayCheckWorkflow - a silent hook and an early done do not disturb the other sources
  • hook inbox patterns dynamicInboxWorkflow - a hook added to a merged inbox mid-run joins the same ordered stream
  • error handling retry behavior regular Error retries until success
  • hookGetConflictWorkflow - awaiting hook.getConflict() registers hook without payload | wrun_41M1Q8DHPP0GXA822NB9NJHJRR
  • 'hookGetConflictWithPriorStepWorkflow' - hook.getConflict() does not block step execution | wrun_41M1Q8DHWK0GP3K0EV6TE0PAVE
  • 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution | wrun_41M1Q8DK4G0GGZRZQ103FTX97N
  • hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps | wrun_41M1Q8DRAQ0GJFDHK40JBG49SN
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_41M1Q8DTC70GT0S38DVHKE2SRS
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_41M1Q8EK4F0GQ3SVZDKPDYHDGB
  • hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable | wrun_41M1Q8E5XW0GXPS472P0JV7MSA
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_41M1Q8E9EZ0GGKQABAT6JAXYV0
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_41M1Q8EAXE0GWJBCH1Y1D5KWWK
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_41M1Q8ED080GZFENGNGV4C66AF
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_41M1Q8EH980GJR3HVSVYWQYYCA
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_41M1Q8EMS80GJKJEXQM4750PX0
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_41M1Q8EQF50GMK7EK12MHA2XCV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_41M1Q8ER0S0GTHQBDJ93ADA9VS
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_41M1Q8ESGA0GX9HCWTF92ZGQYP
  • closureVariableWorkflow - nested step functions with closure variables | wrun_41M1Q8F47K0GYAW8M5XH9C5DFY
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_41M1Q8F61T0GQNSFV0G5YR81V5
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_41M1Q8F65E0GNF7TG7RJCDXRE3
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_41M1Q8F7HE0GVV0D8SPAAHDC03
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_41M1Q8F9H50GN3T5KRJRG7K099
  • health check endpoint (HTTP) - workflow endpoint responds to __health query parameter
  • health check (queue-based) - workflow endpoint responds to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_41M1Q8FFWR0GXACE7DTJ1PJ8T8
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_41M1Q8FNGD0GHQVBT053N4QAX0
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_41M1Q8FNQR0GSZJEBE42Z75WT3
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_41M1Q8FNTT0GQJBGQ7HK5XC630
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_41M1Q8FP650GRNS8KB1NDJ1J0Y
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_41M1Q8G1FR0GPBQR4HW0H1EYDP
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • cancelRun - cancelling a running workflow | wrun_41M1Q8G8990GMXCMPDVYMQ9P26

nitro-stable-quickjs (22 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered | wrun_41M1Q8DTC70GT0S38DVHKE2SRS
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_41M1Q8EK4F0GQ3SVZDKPDYHDGB
  • hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable | wrun_41M1Q8E5XW0GXPS472P0JV7MSA
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_41M1Q8E9EZ0GGKQABAT6JAXYV0
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_41M1Q8EAXE0GWJBCH1Y1D5KWWK
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_41M1Q8ED080GZFENGNGV4C66AF
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_41M1Q8EH980GJR3HVSVYWQYYCA
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_41M1Q8EMS80GJKJEXQM4750PX0
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_41M1Q8EQF50GMK7EK12MHA2XCV
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_41M1Q8ER0S0GTHQBDJ93ADA9VS
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_41M1Q8ESGA0GX9HCWTF92ZGQYP
  • closureVariableWorkflow - nested step functions with closure variables | wrun_41M1Q8F47K0GYAW8M5XH9C5DFY
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_41M1Q8F61T0GQNSFV0G5YR81V5
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_41M1Q8F65E0GNF7TG7RJCDXRE3
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_41M1Q8F7HE0GVV0D8SPAAHDC03
  • health check endpoint (HTTP) - workflow endpoint responds to __health query parameter
  • health check (queue-based) - workflow endpoint responds to health check messages
  • health check (CLI) - workflow health command reports healthy endpoints
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_41M1Q8FFWR0GXACE7DTJ1PJ8T8
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_41M1Q8FNGD0GHQVBT053N4QAX0
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_41M1Q8FNQR0GSZJEBE42Z75WT3
📦 Local Production (263 failed)

astro-stable-quickjs (57 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hook inbox patterns mergedHooksReplayCheckWorkflow - irregular cross-hook interleaving buffered under a slow step keeps log order on replay
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_41M1Q8F9H50GN3T5KRJRG7K099
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_41M1Q8FNQR0GSZJEBE42Z75WT3
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_41M1Q8FNTT0GQJBGQ7HK5XC630
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_41M1Q8FP650GRNS8KB1NDJ1J0Y
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_41M1Q8G1FR0GPBQR4HW0H1EYDP
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_41M1Q8G2420GXJKZJJWJ7GZM3W
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_41M1Q8G3M10GXE6B61E0EKQRS7
  • cancelRun - cancelling a running workflow | wrun_41M1Q8G8990GMXCMPDVYMQ9P26
  • cancelRun via CLI - cancelling a running workflow | wrun_41M1Q8GD0Q0GJZ9JNDNV1CFXYM
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_41M1Q8GG1D0GY67YGE6DSXFB7Z
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_41M1Q8GGGD0GXSFXNRDKEPKXY8
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW
  • distributedAbortController - manual abort triggers signal | wrun_41M1Q8H3A80GG1VYBHFF5375F9
  • distributedAbortController - TTL expiration triggers signal | wrun_41M1Q8H5EQ0GXVKDS4AK0QPHXB
  • distributedAbortController - reconnect to existing controller | wrun_41M1Q8HA0Z0GK7Z6B5EXDENFA7
  • setAttributes start: initial attributes are seeded on run creation
  • setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • setAttributes setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • setAttributes setAttributesInsideStepWorkflow: step-body calls append attributed native events
  • setAttributes fire-and-forget: void setAttributes lands without awaiting
  • setAttributes Promise.all of disjoint-key writes: every key lands
  • setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit

express-stable-quickjs (50 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_41M1Q8G3M10GXE6B61E0EKQRS7
  • cancelRun via CLI - cancelling a running workflow | wrun_41M1Q8GD0Q0GJZ9JNDNV1CFXYM
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_41M1Q8GG1D0GY67YGE6DSXFB7Z
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_41M1Q8GGGD0GXSFXNRDKEPKXY8
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW
  • distributedAbortController - manual abort triggers signal | wrun_41M1Q8H3A80GG1VYBHFF5375F9
  • distributedAbortController - TTL expiration triggers signal | wrun_41M1Q8H5EQ0GXVKDS4AK0QPHXB
  • distributedAbortController - reconnect to existing controller | wrun_41M1Q8HA0Z0GK7Z6B5EXDENFA7
  • setAttributes start: initial attributes are seeded on run creation
  • setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • setAttributes setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • setAttributes setAttributesInsideStepWorkflow: step-body calls append attributed native events
  • setAttributes fire-and-forget: void setAttributes lands without awaiting
  • setAttributes Promise.all of disjoint-key writes: every key lands
  • setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit
  • setAttributes start: invalid initial attributes are rejected before a run is created

nextjs-turbopack-stable-quickjs (53 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • cancelRun - cancelling a running workflow | wrun_41M1Q8G8990GMXCMPDVYMQ9P26
  • cancelRun via CLI - cancelling a running workflow | wrun_41M1Q8GD0Q0GJZ9JNDNV1CFXYM
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router
  • plainModuleDoneHook resumed via plain API route (o2flow shape) | wrun_41M1Q8GHWV0GK097N2C90MA8M4
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_41M1Q8GG1D0GY67YGE6DSXFB7Z
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_41M1Q8GGGD0GXSFXNRDKEPKXY8
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW
  • distributedAbortController - manual abort triggers signal | wrun_41M1Q8H3A80GG1VYBHFF5375F9
  • distributedAbortController - TTL expiration triggers signal | wrun_41M1Q8H5EQ0GXVKDS4AK0QPHXB
  • distributedAbortController - reconnect to existing controller | wrun_41M1Q8HA0Z0GK7Z6B5EXDENFA7
  • setAttributes start: initial attributes are seeded on run creation
  • setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • setAttributes setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • setAttributes setAttributesInsideStepWorkflow: step-body calls append attributed native events
  • setAttributes fire-and-forget: void setAttributes lands without awaiting
  • setAttributes Promise.all of disjoint-key writes: every key lands
  • setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit

nitro-stable-quickjs (58 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • hook inbox patterns mergedHooksReplayCheckWorkflow - irregular cross-hook interleaving buffered under a slow step keeps log order on replay
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_41M1Q8F9H50GN3T5KRJRG7K099
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_41M1Q8FNQR0GSZJEBE42Z75WT3
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_41M1Q8FNTT0GQJBGQ7HK5XC630
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_41M1Q8FP650GRNS8KB1NDJ1J0Y
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_41M1Q8G1FR0GPBQR4HW0H1EYDP
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_41M1Q8G2420GXJKZJJWJ7GZM3W
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_41M1Q8G3M10GXE6B61E0EKQRS7
  • cancelRun - cancelling a running workflow | wrun_41M1Q8G8990GMXCMPDVYMQ9P26
  • cancelRun via CLI - cancelling a running workflow | wrun_41M1Q8GD0Q0GJZ9JNDNV1CFXYM
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_41M1Q8GG1D0GY67YGE6DSXFB7Z
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_41M1Q8GGGD0GXSFXNRDKEPKXY8
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW
  • distributedAbortController - manual abort triggers signal | wrun_41M1Q8H3A80GG1VYBHFF5375F9
  • distributedAbortController - TTL expiration triggers signal | wrun_41M1Q8H5EQ0GXVKDS4AK0QPHXB
  • distributedAbortController - reconnect to existing controller | wrun_41M1Q8HA0Z0GK7Z6B5EXDENFA7
  • setAttributes start: initial attributes are seeded on run creation
  • setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • setAttributes setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • setAttributes setAttributesInsideStepWorkflow: step-body calls append attributed native events
  • setAttributes fire-and-forget: void setAttributes lands without awaiting
  • setAttributes Promise.all of disjoint-key writes: every key lands
  • setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit
  • setAttributes start: invalid initial attributes are rejected before a run is created

sveltekit-stable-quickjs (45 failed):

  • hook inbox patterns mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_41M1Q8G1S30GZ6FCPTFK69JSAR
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_41M1Q8G1ZS0GKBC8CM6MWZX7C0
  • sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration | wrun_41M1Q8GGM90GVH4N3FFXTX3XYA
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_41M1Q8GJCM0GZN366REXAJ9PPB
  • 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_41M1Q8GY1F0GR6GS05CWTW0WCY
  • metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (#1577) | wrun_41M1Q8H1ZA0GZXRW2YKJXBQD43
  • resilient start: addTenWorkflow completes when run_created returns 500 | wrun_41M1Q8H26B0GXE9A5XNS843S6J
  • getterStepWorkflow - getter functions with "use step" directive | wrun_41M1Q8H3310GJ3ZWZ6K89YKVBW
  • distributedAbortController - manual abort triggers signal | wrun_41M1Q8H3A80GG1VYBHFF5375F9
  • distributedAbortController - TTL expiration triggers signal | wrun_41M1Q8H5EQ0GXVKDS4AK0QPHXB
  • distributedAbortController - reconnect to existing controller | wrun_41M1Q8HA0Z0GK7Z6B5EXDENFA7
  • setAttributes start: initial attributes are seeded on run creation
  • setAttributes start: reserved-prefix initial attributes are seeded with allowReservedAttributes
  • setAttributes setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly
  • setAttributes setAttributesInsideStepWorkflow: step-body calls append attributed native events
  • setAttributes fire-and-forget: void setAttributes lands without awaiting
  • setAttributes Promise.all of disjoint-key writes: every key lands
  • setAttributes workflow throws after awaited setAttributes: attribute still persists on the failed run
  • setAttributes validation DX: invalid writes throw catchable FatalErrors naming rule and limit

⚠️ Flaky E2E Tests (passed on retry)

These tests failed at least once and passed on a retry. A recurring entry here is a real race worth investigating.

31 flaky tests
  • abortAfterCompletionWorkflow: abort after step completes is a no-op (hono)
  • abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (hono)
  • abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (hono)
  • abortExternalSignalWorkflow: signal passed as workflow input (hono)
  • addTenWorkflow (hono)
  • addTenWorkflow (nest)
  • addTenWorkflow (tanstack-start)
  • cancelRun - cancelling a running workflow (express)
  • cancelRun via CLI - cancelling a running workflow (sveltekit)
  • distributedAbortController - manual abort triggers signal (hono)
  • distributedAbortController - reconnect to existing controller (hono)
  • distributedAbortController - TTL expiration triggers signal (hono)
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary (express)
  • fibonacciWorkflow - recursive workflow composition via start() (fastify)
  • handoffInboxWorkflow - late arrivals after the loop exits are handed to a new run, none dropped (astro)
  • handoffInboxWorkflow - late arrivals after the loop exits are handed to a new run, none dropped (nextjs-webpack)
  • handoffInboxWorkflow - late arrivals after the loop exits are handed to a new run, none dropped (vite)
  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data (nextjs-webpack)
  • inboxWaitLoopWorkflow - drain-then-wait loop groups payloads identically on replay (nextjs-webpack)
  • mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order (nextjs-webpack)
  • promiseAllWorkflow (nitro)
  • promiseAllWorkflow (nuxt)
  • regular Error retries until success (nextjs-webpack)
  • RetryableError respects custom retryAfter delay (nextjs-turbopack)
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication (fastify)
  • step throw of a non-Error value preserves it as cause on the wrapping FatalError (nextjs-turbopack)
  • step-argument serialization failure is catchable in workflow code (nextjs-turbopack)
  • step-return-value serialization failure is catchable in workflow code (nextjs-turbopack)
  • uncaught step-argument serialization failure fails the run as USER_ERROR without redelivery retries (nextjs-turbopack)
  • wellKnownAgentWorkflow (.well-known/agent) (nextjs-turbopack)
  • wellKnownAgentWorkflow (.well-known/agent) (nextjs-webpack)

🛠 Infra Events (absorbed by the harness)

Platform anomalies the e2e harness detected and worked around (e.g. a run the queue never picked up, replaced by a fresh run). Clustered timestamps indicate a backend blip; a steady drip indicates a platform issue worth escalating.

452 infra events
  • cold-start-warmup · suite warmup (tanstack-start) · at 22:24:45Z · abandoned wrun_01M1Q8BK292PABC7M72DSYS1C4
  • run-pickup-stall · 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution (fastify) · at 22:26:34Z · abandoned wrun_01M1Q8F9R16E7BVSEN9EFVGPSF
  • run-pickup-stall · hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps (nitro) · at 22:26:39Z · abandoned wrun_01M1Q8FETCQP36KXCCNZG4QKY9
  • run-pickup-stall · hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps (fastify) · at 22:26:41Z · abandoned wrun_01M1Q8FH6CNXMVZ2BA2KF9B6H1
  • run-pickup-stall · hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered (nitro) · at 22:27:10Z · abandoned wrun_01M1Q8GDQ59X94EWJVDDPKA0JN
  • run-pickup-stall · hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data (nitro) · at 22:27:26Z · abandoned wrun_01M1Q8GX6091XHT6QGPDZZGTEV
  • run-pickup-stall · hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered (fastify) · at 22:27:34Z · abandoned wrun_01M1Q8H4B2WM1KYFMY41T2AE3R
  • run-pickup-stall · hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook (hono) · at 22:27:38Z · abandoned wrun_01M1Q8H8G7PAGCHF72BVGYS90F
  • run-pickup-stall · hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token (hono) · at 22:27:38Z · abandoned wrun_01M1Q8H8MCJE159NY2TVGQJ95Z
  • run-pickup-stall · hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data (fastify) · at 22:27:52Z · abandoned wrun_01M1Q8HPNZS50RH27NVP9N83JC
  • run-pickup-stall · hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable (nitro) · at 22:27:56Z · abandoned wrun_01M1Q8HTB4EJMXYPTCVJKNZY63
  • run-pickup-stall · hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue (nitro) · at 22:28:02Z · abandoned wrun_01M1Q8HZNZT20HH18YWJMZ5RTS
  • run-pickup-stall · resume-or-start route pattern - resumeHook retried after start() reaches the new run (hono) · at 22:28:07Z · abandoned wrun_01M1Q8J5BXDM8VFDDAYTCKJFM6
  • run-pickup-stall · 'hookGetConflictWithParallelStepWorkfl…' - hook.getConflict() does not block step execution (fastify) · at 22:28:11Z · abandoned wrun_01M1Q8J93WT0AKG3GVG2NJ33T7
  • run-pickup-stall · hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered (nitro) · at 22:28:12Z · abandoned wrun_01M1Q8J9EBN90933BQ11PCX7Q1
  • run-pickup-stall · hookGetConflictThenStepParallelWorkflow - hook.getConflict() continuation step runs alongside other steps (fastify) · at 22:28:19Z · abandoned wrun_01M1Q8JGG72YNT34AN7D5ZF154
  • run-pickup-stall · hookGetConflictWorkflow - hook.getConflict() resolves with the conflicting run when token is already registered (fastify) · at 22:28:38Z · abandoned wrun_01M1Q8K2T93FWWFVZE4JGSPS9P
  • run-pickup-stall · hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data (nitro) · at 22:28:47Z · abandoned wrun_01M1Q8KBV7N9SQ1T96F27Z899V
  • run-pickup-stall · hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running (hono) · at 22:28:53Z · abandoned wrun_01M1Q8KHHNZWGXMZ7GK8RZ8E2R
  • run-pickup-stall · resume-or-start route pattern - resumeHook retried after start() reaches the new run (hono) · at 22:28:53Z · abandoned wrun_01M1Q8KJ43CZ4VWY69CP05GX2N
  • run-pickup-stall · hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue (nitro) · at 22:28:56Z · abandoned wrun_01M1Q8KMYWF1YYATVNMV732E2W
  • run-pickup-stall · hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable (nitro) · at 22:28:57Z · abandoned wrun_01M1Q8KNHT6RYS6M0M9P2YMY1N
  • run-pickup-stall · hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token (hono) · at 22:29:02Z · abandoned wrun_01M1Q8KTPG2J77ZH4S4A1F6EQG
  • run-pickup-stall · hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data (fastify) · at 22:29:11Z · abandoned wrun_01M1Q8M3PXYRQDNY18W2JMSMKJ
  • run-pickup-stall · hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable (fastify) · at 22:29:12Z · abandoned wrun_01M1Q8M4H20G70P2RZ043ZXZF4
  • run-pickup-stall · hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook (hono) · at 22:29:18Z · abandoned wrun_01M1Q8MACV6F5TTZ36CG427HPQ
  • run-pickup-stall · hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook (nitro) · at 22:29:22Z · abandoned wrun_01M1Q8MED1KTK8MCK1ZEJNH8HY
  • run-pickup-stall · hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue (fastify) · at 22:29:23Z · abandoned wrun_01M1Q8MEV503HRMB5C1E620H9A
  • run-pickup-stall · hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token (nitro) · at 22:29:32Z · abandoned wrun_01M1Q8MQXCXN7HC8HP0WGT2ZS8
  • run-pickup-stall · hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running (hono) · at 22:29:38Z · abandoned wrun_01M1Q8MXMC6XEZFDHAVF02PP58
  • run-pickup-stall · hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() (hono) · at 22:29:38Z · abandoned wrun_01M1Q8MY7171MXFH4AFBDBV4JM
  • run-pickup-stall · resume-or-start route pattern - resumeHook retried after start() reaches the new run (nitro) · at 22:29:41Z · abandoned wrun_01M1Q8N12X8T8ZPZ2RNF9ET1EZ
  • run-pickup-stall · stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) (hono) · at 22:29:47Z · abandoned wrun_01M1Q8N6R29JGZKJPPH35SVEPR
  • run-pickup-stall · hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook (fastify) · at 22:29:49Z · abandoned wrun_01M1Q8N8CVMZANZC1KT9Y9JV4S
  • run-pickup-stall · hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token (fastify) · at 22:29:56Z · abandoned wrun_01M1Q8NFNXK9KXBPMF2N1TC1NS
  • run-pickup-stall · hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running (nitro) · at 22:29:57Z · abandoned wrun_01M1Q8NG53QH3P56DS3YF5GJGK
  • run-pickup-stall · stepFunctionWithClosureWorkflow - step function with closure variables passed as argument (hono) · at 22:30:03Z · abandoned wrun_01M1Q8NPD1VNNVXGNA7CPJEF21
  • run-pickup-stall · hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook (nitro) · at 22:30:07Z · abandoned wrun_01M1Q8NTH4C0RJBRWES5SJV7YF
  • run-pickup-stall · hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue (fastify) · at 22:30:08Z · abandoned wrun_01M1Q8NV1VVG20KSHZQRG23E7N
  • run-pickup-stall · hookMinRetentionWorkflow - terminal Hook cannot resume and its token stays unavailable (fastify) · at 22:30:12Z · abandoned wrun_01M1Q8NZ4AFX49J5E617NBN4BE
  • run-pickup-stall · hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token (nitro) · at 22:30:17Z · abandoned wrun_01M1Q8P3XDSCXP9E2RQBBJR1F8
  • run-pickup-stall · closureVariableWorkflow - nested step functions with closure variables (hono) · at 22:30:23Z · abandoned wrun_01M1Q8P9MH4N90JEJSF00K6N3Z
  • run-pickup-stall · hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() (hono) · at 22:30:23Z · abandoned wrun_01M1Q8PA7B1ABN11ZGMNSJXFTR
  • run-pickup-stall · mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order (nextjs-webpack) · at 22:30:25Z · abandoned wrun_01M1Q8PC254EBTSAQY9NDWKA6T
  • run-pickup-stall · hookCleanupTestWorkflow - hook token reuse after workflow completion (nextjs-webpack) · at 22:30:26Z · abandoned wrun_01M1Q8PCNDB6AB1WDY2Q8J6NCA
  • run-pickup-stall · resume-or-start route pattern - resumeHook retried after start() reaches the new run (nitro) · at 22:30:26Z · abandoned wrun_01M1Q8PD2SNHY6SW8NB3X83CS4
  • run-pickup-stall · hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook (fastify) · at 22:30:34Z · abandoned wrun_01M1Q8PMC34AFKTAQ4C0PQSS6Q
  • run-pickup-stall · hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token (fastify) · at 22:30:41Z · abandoned wrun_01M1Q8PVWN7PS1VPG4JRG3ZSYT
  • run-pickup-stall · hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running (nitro) · at 22:30:42Z · abandoned wrun_01M1Q8PW5N7YJZ2WGFJSM98CJC
  • run-pickup-stall · mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order (fastify) · at 22:30:42Z · abandoned wrun_01M1Q8PWVNKMXBY4XF8AR0SQFF
  • run-pickup-stall · stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) (hono) · at 22:30:47Z · abandoned wrun_01M1Q8Q1BC6Y00ZGD2EM7MCNMC
  • run-pickup-stall · mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order (nitro) · at 22:30:48Z · abandoned wrun_01M1Q8Q1TK2KWSXCMNT1FH4WCT
  • run-pickup-stall · mergedHooksWorkflow - concurrent senders with a step per message keep per-hook order (hono) · at 22:30:48Z · abandoned wrun_01M1Q8Q268GC4M069CM5X3NQR2
  • run-pickup-stall · hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() (nitro) · at 22:30:52Z · abandoned wrun_01M1Q8Q6JCE0FVK5YNX1B4GVD8
  • run-pickup-stall · resume-or-start route pattern - resumeHook retried after start() reaches the new run (fastify) · at 22:30:53Z · abandoned wrun_01M1Q8Q718W34A82W163PFYS8P
  • run-pickup-stall · stepFunctionAsStartArgWorkflow - step function reference passed as start() argument (nest) · at 22:31:01Z · abandoned wrun_01M1Q8QFAZWAFYBQYA0G63WJKW
  • run-pickup-stall · stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) (nitro) · at 22:31:02Z · abandoned wrun_01M1Q8QFYCM65N30CWATKNBGZ2
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (sveltekit) · at 22:31:03Z · abandoned wrun_01M1Q8QGDA9K50ECN0N0SXQ3YD
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (sveltekit) · at 22:31:03Z · abandoned wrun_01M1Q8QGMGZPTV5DKGEKB0RPBJ
  • run-pickup-stall · stepFunctionWithClosureWorkflow - step function with closure variables passed as argument (hono) · at 22:31:03Z · abandoned wrun_01M1Q8QH09JS6E3B00SBR2PQJB
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (sveltekit) · at 22:31:06Z · abandoned wrun_01M1Q8QM9H56WVDV7D7KDYBWWQ
  • run-pickup-stall · spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step (hono) · at 22:31:09Z · abandoned wrun_01M1Q8QPCNNZBRNHZCH7151XYA
  • run-pickup-stall · stepFunctionWithClosureWorkflow - step function with closure variables passed as argument (nitro) · at 22:31:12Z · abandoned wrun_01M1Q8QS85AWB86R4AE0N4JNQ1
  • run-pickup-stall · hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running (fastify) · at 22:31:12Z · abandoned wrun_01M1Q8QSQKFQM1QC01XCPGE2QA
  • run-pickup-stall · AllInOneService.processNumber - static workflow method using sibling static step methods (astro) · at 22:31:18Z · abandoned wrun_01M1Q8QZ5XYYX70EDWRQNXTFC4
  • run-pickup-stall · hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() (fastify) · at 22:31:19Z · abandoned wrun_01M1Q8R0FAWRJA7CRX0J1EJ7RB
  • run-pickup-stall · closureVariableWorkflow - nested step functions with closure variables (hono) · at 22:31:23Z · abandoned wrun_01M1Q8R47VM7S5FJ2H4TCXCAN7
  • run-pickup-stall · stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) (fastify) · at 22:31:27Z · abandoned wrun_01M1Q8R835EVS3AT706AV4GEMS
  • run-pickup-stall · closureVariableWorkflow - nested step functions with closure variables (nitro) · at 22:31:27Z · abandoned wrun_01M1Q8R8938W41V7R80PQ62SJQ
  • run-pickup-stall · stepFunctionWithClosureWorkflow - step function with closure variables passed as argument (fastify) · at 22:31:28Z · abandoned wrun_01M1Q8R8VJ4NAMPHBHRJZC7W3N
  • run-pickup-stall · spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step (nitro) · at 22:31:33Z · abandoned wrun_01M1Q8RDZAZQ4A4ME78A07W1W0
  • run-pickup-stall · runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries (hono) · at 22:31:33Z · abandoned wrun_01M1Q8REA6Y65H2RCEFK9JFEW7
  • run-pickup-stall · instanceMethodStepWorkflow - instance methods with "use step" directive (nest) · at 22:31:34Z · abandoned wrun_01M1Q8RETQ7YX70ANCQCMDQ4FE
  • run-pickup-stall · hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() (nitro) · at 22:31:38Z · abandoned wrun_01M1Q8RJNNPYN23F8C9GQ2FG65
  • run-pickup-stall · resume-or-start route pattern - resumeHook retried after start() reaches the new run (fastify) · at 22:31:38Z · abandoned wrun_01M1Q8RK79HW77EYGRZK10SXX1
  • run-pickup-stall · crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context (nest) · at 22:31:40Z · abandoned wrun_01M1Q8RNFKBQ47AWPQ6514P5EZ
  • run-pickup-stall · cancelRun - cancelling a running workflow (nest) · at 22:31:43Z · abandoned wrun_01M1Q8RR0KCK81XR5KJ87PKWP7
  • run-pickup-stall · startFromWorkflow - calling start() directly inside a workflow function with hook communication (hono) · at 22:31:47Z · abandoned wrun_01M1Q8RVYN7XFP8K9KS20STBA7
  • run-pickup-stall · ChainableService.processWithThis - static step methods using this to reference the class (astro) · at 22:31:48Z · abandoned wrun_01M1Q8RX7GSRB5Q0361TWQSCZ5
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (sveltekit) · at 22:31:52Z · abandoned wrun_01M1Q8S11TQ4XMGKBS6CPY04MR
  • run-pickup-stall · hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running (fastify) · at 22:31:57Z · abandoned wrun_01M1Q8S5VWD2TRRXEQRVD3B1QF
  • run-pickup-stall · stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) (nitro) · at 22:32:02Z · abandoned wrun_01M1Q8SAHMB5PCX7MTC9W8HGHK
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (sveltekit) · at 22:32:03Z · abandoned wrun_01M1Q8SB0B1H4KY9H9WKPESAHH
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (sveltekit) · at 22:32:03Z · abandoned wrun_01M1Q8SB7G88RA39V172CX0D6A
  • run-pickup-stall · fibonacciWorkflow - recursive workflow composition via start() (hono) · at 22:32:03Z · abandoned wrun_01M1Q8SBKSFQH700F0PK57NAQQ
  • run-pickup-stall · hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() (fastify) · at 22:32:04Z · abandoned wrun_01M1Q8SCNWX61N1H0C1JECG3D8
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (sveltekit) · at 22:32:06Z · abandoned wrun_01M1Q8SEXFJNXHK4DHEEPV3DRF
  • run-pickup-stall · stepFunctionWithClosureWorkflow - step function with closure variables passed as argument (nitro) · at 22:32:12Z · abandoned wrun_01M1Q8SKVDP7P0G0XZQ8FYKGD7
  • run-pickup-stall · cancelRun via CLI - cancelling a running workflow (nest) · at 22:32:13Z · abandoned wrun_01M1Q8SNJM5FZPMPBVAVDJFD05
  • run-pickup-stall · thisSerializationWorkflow - step function invoked with .call() and .apply() (astro) · at 22:32:18Z · abandoned wrun_01M1Q8SSRY7ESZW7PTFH6CMWM4
  • run-pickup-stall · runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries (nitro) · at 22:32:23Z · abandoned wrun_01M1Q8SYW9DED93SPZBT55WTXG
  • run-pickup-stall · closureVariableWorkflow - nested step functions with closure variables (fastify) · at 22:32:23Z · abandoned wrun_01M1Q8SZ932ZXK9FZ2A5XWEXNB
  • run-pickup-stall · stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) (fastify) · at 22:32:27Z · abandoned wrun_01M1Q8T2PG9C35CNAP2P97HK2D
  • run-pickup-stall · closureVariableWorkflow - nested step functions with closure variables (nitro) · at 22:32:27Z · abandoned wrun_01M1Q8T2WCND4C5MNWBQE7XXFV
  • run-pickup-stall · stepFunctionWithClosureWorkflow - step function with closure variables passed as argument (fastify) · at 22:32:28Z · abandoned wrun_01M1Q8T3EYSSAV37TB3YG6DJKR
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (nest) · at 22:32:34Z · abandoned wrun_01M1Q8T9EAG54KAEB30H9JJ4BQ
  • run-pickup-stall · hookWithSleepFinalStepWorkflow - step only on final payload (nest) · at 22:32:40Z · abandoned wrun_01M1Q8TG2XQMZY00H3PT5QDWCF
  • run-pickup-stall · spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step (fastify) · at 22:32:42Z · abandoned wrun_01M1Q8THXXGYWKP1W8D6DNGRFC
  • run-pickup-stall · cancelRun via CLI - cancelling a running workflow (nest) · at 22:32:43Z · abandoned wrun_01M1Q8TJX2HKNPDKHFRHDHCGNC
  • run-pickup-stall · AllInOneService.processNumber - static workflow method using sibling static step methods (astro) · at 22:32:48Z · abandoned wrun_01M1Q8TQVF7N08NMADQKB8HWX2
  • run-pickup-stall · runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries (fastify) · at 22:32:49Z · abandoned wrun_01M1Q8TRP5T5771D6RCW5AMNAS
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (sveltekit) · at 22:32:52Z · abandoned wrun_01M1Q8TVMTJ6QN9TM6PER8KZGJ
  • run-pickup-stall · stepFunctionAsStartArgWorkflow - step function reference passed as start() argument (nest) · at 22:33:01Z · abandoned wrun_01M1Q8V4JDCDS6DBNZC2FW95NG
  • run-pickup-stall · startFromWorkflow - calling start() directly inside a workflow function with hook communication (nitro) · at 22:33:02Z · abandoned wrun_01M1Q8V550B0N2C1N6QX5A3T30
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (sveltekit) · at 22:33:03Z · abandoned wrun_01M1Q8V5KC08XDA9BX4FRK79XA
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (sveltekit) · at 22:33:03Z · abandoned wrun_01M1Q8V5TGE1VXCYPQ9JCKXAH8
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (sveltekit) · at 22:33:06Z · abandoned wrun_01M1Q8V9GFW49CF2NAB5TGY94G
  • run-pickup-stall · spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step (hono) · at 22:33:09Z · abandoned wrun_01M1Q8VBK6DWMN3F8VHV6S8060
  • run-pickup-stall · fibonacciWorkflow - recursive workflow composition via start() (nitro) · at 22:33:12Z · abandoned wrun_01M1Q8VEESH23JFP6N3G6NGKFJ
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (nest) · at 22:33:13Z · abandoned wrun_01M1Q8VG7XV43MQJVN02ZC0PDN
  • run-pickup-stall · ChainableService.processWithThis - static step methods using this to reference the class (astro) · at 22:33:18Z · abandoned wrun_01M1Q8VMBYQ58WY6MKX1HYYR7Q
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (nest) · at 22:33:19Z · abandoned wrun_01M1Q8VNKECDG235EBYTC1360P
  • run-pickup-stall · closureVariableWorkflow - nested step functions with closure variables (fastify) · at 22:33:23Z · abandoned wrun_01M1Q8VSWCMYGRXJCDRR7MAJ8Q
  • run-pickup-stall · hookWithSleepFinalStepWorkflow - step only on final payload (nest) · at 22:33:26Z · abandoned wrun_01M1Q8VW3FHMRB3T15R33MDGA1
  • run-pickup-stall · startFromWorkflow - calling start() directly inside a workflow function with hook communication (fastify) · at 22:33:27Z · abandoned wrun_01M1Q8VX9TZKTRGN8KPRDBRH9V
  • run-pickup-stall · fibonacciWorkflow - recursive workflow composition via start() (fastify) · at 22:33:28Z · abandoned wrun_01M1Q8VY289M2JRNF8T2RNP9JF
  • run-pickup-stall · spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step (nitro) · at 22:33:33Z · abandoned wrun_01M1Q8W35G1N42AE5YFC0MM7RM
  • run-pickup-stall · runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries (hono) · at 22:33:33Z · abandoned wrun_01M1Q8W3GQWWJG1SV8EDKH10DR
  • run-pickup-stall · thisSerializationWorkflow - step function invoked with .call() and .apply() (astro) · at 22:33:37Z · abandoned wrun_01M1Q8W7KKXM4HGNRYMT045GBK
  • run-pickup-stall · startFromWorkflow - calling start() directly inside a workflow function with hook communication (hono) · at 22:33:47Z · abandoned wrun_01M1Q8WH54HQJAWWF51NYV3TVP
  • run-pickup-stall · fibonacciWorkflow - recursive workflow composition via start() (astro) · at 22:33:48Z · abandoned wrun_01M1Q8WJEFVZTD03G35R2R7FAK
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (sveltekit) · at 22:33:52Z · abandoned wrun_01M1Q8WP9CPXZF3TNH4GP3Y7SV
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (sveltekit) · at 22:34:03Z · abandoned wrun_01M1Q8X06CS0FM9ETZ7A94FE4D
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (sveltekit) · at 22:34:03Z · abandoned wrun_01M1Q8X0DKDT1RH35MZVWRND8M
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (nest) · at 22:34:04Z · abandoned wrun_01M1Q8X1TKTZKQ0F4NB6XCBFZ6
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (sveltekit) · at 22:34:06Z · abandoned wrun_01M1Q8X43FNQQ9C4C912EGZ7W2
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (nest) · at 22:34:11Z · abandoned wrun_01M1Q8X875CJKD3MRJPJEK466K
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (nest) · at 22:34:13Z · abandoned wrun_01M1Q8XATY92G0T5WE4KQHSK9T
  • run-pickup-stall · customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE (astro) · at 22:34:18Z · abandoned wrun_01M1Q8XEZMBCB7JC9JJ5GVEE3Y
  • run-pickup-stall · runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries (nitro) · at 22:34:23Z · abandoned wrun_01M1Q8XM2KAW84VZZK60G5474M
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (nextjs-webpack) · at 22:34:34Z · abandoned wrun_01M1Q8XZ18VM942FN6VXSVQM99
  • run-pickup-stall · instanceMethodStepWorkflow - instance methods with "use step" directive (astro) · at 22:34:37Z · abandoned wrun_01M1Q8Y26MZ6KQT1NA7SDAZ5DC
  • run-pickup-stall · pathsAliasWorkflow - TypeScript path aliases resolve correctly (hono) · at 22:34:40Z · abandoned wrun_01M1Q8Y58DVR4CTYTA835Z1DVQ
  • run-pickup-stall · spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step (fastify) · at 22:34:42Z · abandoned wrun_01M1Q8Y749NFZBZASHZ6NP7T4F
  • run-pickup-stall · runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries (fastify) · at 22:34:49Z · abandoned wrun_01M1Q8YDWFXCY4CF4NWN7Z9FFZ
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (sveltekit) · at 22:34:52Z · abandoned wrun_01M1Q8YGWC5Y70AMAG11V2NNHQ
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (nest) · at 22:35:01Z · abandoned wrun_01M1Q8YSRGQQ9145BZA3NA528C
  • run-pickup-stall · startFromWorkflow - calling start() directly inside a workflow function with hook communication (nitro) · at 22:35:02Z · abandoned wrun_01M1Q8YTBC9ECQEY9BKGWKNC1A
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (sveltekit) · at 22:35:03Z · abandoned wrun_01M1Q8YV54W83MS39MA9JJCN28
  • run-pickup-stall · fibonacciWorkflow - recursive workflow composition via start() (hono) · at 22:35:03Z · abandoned wrun_01M1Q8YVD56T0CB6S1ZK3ZYC9W
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (nest) · at 22:35:04Z · abandoned wrun_01M1Q8YWDTNN6KP2AHV770X01X
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (sveltekit) · at 22:35:07Z · abandoned wrun_01M1Q8YYPRYJFJSW6644HW8725
  • run-pickup-stall · Calculator.calculate - static workflow method using static step methods from another class (hono) · at 22:35:09Z · abandoned wrun_01M1Q8Z0SFTFFNEFFWTJ5NK41T
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (nest) · at 22:35:11Z · abandoned wrun_01M1Q8Z2T6C23SMBCEPCC4W57Z
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (sveltekit) · at 22:35:13Z · abandoned wrun_01M1Q8Z4X3HYA9H6ZA9JC2014F
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (nest) · at 22:35:13Z · abandoned wrun_01M1Q8Z5GD5F2XJKTYHMH6H01Q
  • run-pickup-stall · crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context (astro) · at 22:35:18Z · abandoned wrun_01M1Q8Z9M7PXZ5VYZK6SJ0311C
  • run-pickup-stall · startFromWorkflow - calling start() directly inside a workflow function with hook communication (fastify) · at 22:35:27Z · abandoned wrun_01M1Q8ZJG9J5EC6JJ554X785B2
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (sveltekit) · at 22:35:31Z · abandoned wrun_01M1Q8ZPEJZCVVP6VQNK750SG4
  • run-pickup-stall · pathsAliasWorkflow - TypeScript path aliases resolve correctly (nitro) · at 22:35:33Z · abandoned wrun_01M1Q8ZRBR3MP1KE8W8DTBM0XV
  • run-pickup-stall · AllInOneService.processNumber - static workflow method using sibling static step methods (hono) · at 22:35:33Z · abandoned wrun_01M1Q8ZRQ09P1JPQ7BSND89RDE
  • run-pickup-stall · customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE (astro) · at 22:35:37Z · abandoned wrun_01M1Q8ZWSNZ67WNKD31P5ZB3ZC
  • run-pickup-stall · instanceMethodStepWorkflow - instance methods with "use step" directive (astro) · at 22:35:40Z · abandoned wrun_01M1Q8ZZ26V6MBF9H9N7JNPT4Y
  • run-pickup-stall · pathsAliasWorkflow - TypeScript path aliases resolve correctly (hono) · at 22:35:40Z · abandoned wrun_01M1Q8ZZW1ZYP8YKMMRT9ZKYT4
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (nest) · at 22:35:41Z · abandoned wrun_01M1Q900FCYHM2RXR0GY3XFB5J
  • run-pickup-stall · Calculator.calculate - static workflow method using static step methods from another class (nitro) · at 22:35:44Z · abandoned wrun_01M1Q903PF8SEXAYMRG0TYNHJQ
  • run-pickup-stall · ChainableService.processWithThis - static step methods using this to reference the class (hono) · at 22:35:47Z · abandoned wrun_01M1Q906C16B479X7AJ4N6VJ3Z
  • run-pickup-stall · errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary (astro) · at 22:35:51Z · abandoned wrun_01M1Q909NPFWCSXW99TRHY70SD
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (sveltekit) · at 22:35:52Z · abandoned wrun_01M1Q90AWSDQC4Y3XF202DJYHJ
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (sveltekit) · at 22:35:52Z · abandoned wrun_01M1Q90BG0CNQ4M12YNMBDZ4CV
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (nest) · at 22:36:01Z · abandoned wrun_01M1Q90MBF9SKA6F4ZTV27RR5Q
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (nest) · at 22:36:04Z · abandoned wrun_01M1Q90Q0Q99J757E1ZA0H417A
  • run-pickup-stall · Calculator.calculate - static workflow method using static step methods from another class (hono) · at 22:36:09Z · abandoned wrun_01M1Q90VD13RQK6BFPDPVW0MVY
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (nest) · at 22:36:11Z · abandoned wrun_01M1Q90XDBVN8ZW1H9H9HN181C
  • run-pickup-stall · fibonacciWorkflow - recursive workflow composition via start() (nitro) · at 22:36:12Z · abandoned wrun_01M1Q90Y88TMDSE46NDAXCK9BY
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (sveltekit) · at 22:36:13Z · abandoned wrun_01M1Q90ZFZSSMQ233GB50MVDY8
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (sveltekit) · at 22:36:13Z · abandoned wrun_01M1Q90ZHFTXSQ6W7B40R1GAFV
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (nest) · at 22:36:14Z · abandoned wrun_01M1Q9105KWRWM88BYZJ17DJVR
  • run-pickup-stall · crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context (astro) · at 22:36:18Z · abandoned wrun_01M1Q9147HX558NE0W5MJ7V7F0
  • run-pickup-stall · AllInOneService.processNumber - static workflow method using sibling static step methods (nitro) · at 22:36:23Z · abandoned wrun_01M1Q9198Z0CSHSNN0W65WX2R4
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (sveltekit) · at 22:36:31Z · abandoned wrun_01M1Q91H2ESTDDQA71Z0S99KA6
  • run-pickup-stall · pathsAliasWorkflow - TypeScript path aliases resolve correctly (nitro) · at 22:36:33Z · abandoned wrun_01M1Q91JZ1NJN5APGVP6JHYR0F
  • run-pickup-stall · AllInOneService.processNumber - static workflow method using sibling static step methods (hono) · at 22:36:33Z · abandoned wrun_01M1Q91KABK1MHHV8XS33Y3ZPT
  • run-pickup-stall · stepFunctionAsStartArgWorkflow - step function reference passed as start() argument (astro) · at 22:36:37Z · abandoned wrun_01M1Q91QD7R8A04RF4YH7K3R1D
  • run-pickup-stall · cancelRun - cancelling a running workflow (astro) · at 22:36:40Z · abandoned wrun_01M1Q91SNDFP01QTX3TXPSWJCW
  • run-pickup-stall · thisSerializationWorkflow - step function invoked with .call() and .apply() (hono) · at 22:36:40Z · abandoned wrun_01M1Q91TF9VGDWXC0B5Y8EFJMS
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (nest) · at 22:36:41Z · abandoned wrun_01M1Q91V2C0B5V7C31CVPRQRAN
  • run-pickup-stall · Calculator.calculate - static workflow method using static step methods from another class (nitro) · at 22:36:44Z · abandoned wrun_01M1Q91Y9QXVVJ1HCMFJX8XFDM
  • run-pickup-stall · ChainableService.processWithThis - static step methods using this to reference the class (hono) · at 22:36:47Z · abandoned wrun_01M1Q920ZCF7C8AE6HMP802CPD
  • run-pickup-stall · cancelRun via CLI - cancelling a running workflow (astro) · at 22:36:48Z · abandoned wrun_01M1Q92282W8TJ4F4K2P493VV0
  • run-pickup-stall · errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary (astro) · at 22:36:51Z · abandoned wrun_01M1Q9248ZK6Z6Y7JQNKWC2TCA
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (sveltekit) · at 22:36:52Z · abandoned wrun_01M1Q925H8AJH2JEN691V8P5A4
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (sveltekit) · at 22:36:52Z · abandoned wrun_01M1Q9263D96G97T2RDJZR3MKR
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (sveltekit) · at 22:36:58Z · abandoned wrun_01M1Q92BHMGYR0QDCRJ9N4NFST
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (sveltekit) · at 22:36:58Z · abandoned wrun_01M1Q92BHGSPS1BWKZFDX1NKTC
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (nest) · at 22:37:01Z · abandoned wrun_01M1Q92EYFC2J0PBYPTDK9939K
  • run-pickup-stall · ChainableService.processWithThis - static step methods using this to reference the class (nitro) · at 22:37:02Z · abandoned wrun_01M1Q92FJ8VDH306CN382PPMXR
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (nest) · at 22:37:04Z · abandoned wrun_01M1Q92HKTP14QTNC9Q68TJZJT
  • run-pickup-stall · customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE (hono) · at 22:37:09Z · abandoned wrun_01M1Q92P0NM37BM7AW1TJZKYCH
  • run-pickup-stall · cancelRun - cancelling a running workflow (astro) · at 22:37:10Z · abandoned wrun_01M1Q92Q5JBC422GZDMYS0RCTE
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (nest) · at 22:37:14Z · abandoned wrun_01M1Q92TTPFM9XB2M7HCE20CST
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (astro) · at 22:37:18Z · abandoned wrun_01M1Q92YTTQVMDZYAM1XQ79EV3
  • run-pickup-stall · cancelRun via CLI - cancelling a running workflow (astro) · at 22:37:19Z · abandoned wrun_01M1Q92ZRADG4JQP1NHMCV8H4F
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (nest) · at 22:37:21Z · abandoned wrun_01M1Q931SW6PKM6M73AW1J5P85
  • run-pickup-stall · AllInOneService.processNumber - static workflow method using sibling static step methods (nitro) · at 22:37:23Z · abandoned wrun_01M1Q933WFNEAETR3957N8JKRK
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (sveltekit) · at 22:37:31Z · abandoned wrun_01M1Q93BNRCX3KDK1XTXWHS1FD
  • run-pickup-stall · thisSerializationWorkflow - step function invoked with .call() and .apply() (nitro) · at 22:37:33Z · abandoned wrun_01M1Q93DJ9XDVTPD58MK9J68NR
  • run-pickup-stall · instanceMethodStepWorkflow - instance methods with "use step" directive (hono) · at 22:37:33Z · abandoned wrun_01M1Q93DXKKZ79Y1BGS4ZX0E1Z
  • run-pickup-stall · hookWithSleepFinalStepWorkflow - step only on final payload (astro) · at 22:37:40Z · abandoned wrun_01M1Q93MNQNKWTT1VC52WSABB5
  • run-pickup-stall · thisSerializationWorkflow - step function invoked with .call() and .apply() (hono) · at 22:37:40Z · abandoned wrun_01M1Q93N2SCNT74N2J2AZ65B80
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (nest) · at 22:37:41Z · abandoned wrun_01M1Q93NND7D1430CT4B205DQ3
  • run-pickup-stall · customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE (nitro) · at 22:37:44Z · abandoned wrun_01M1Q93RXDJP8ZPPSB03A6EBT0
  • run-pickup-stall · crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context (hono) · at 22:37:47Z · abandoned wrun_01M1Q93VJMXW8TXTCMDDFWEC0N
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (astro) · at 22:37:49Z · abandoned wrun_01M1Q93X7N0SHP0NQ2J5BDG02Z
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (astro) · at 22:37:51Z · abandoned wrun_01M1Q93YW841AQKPVRA1EYA3P9
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (sveltekit) · at 22:37:52Z · abandoned wrun_01M1Q9408DTCAWEGGZQZVHVH4B
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (sveltekit) · at 22:37:52Z · abandoned wrun_01M1Q940PZESGD2R1KQRM0VY0E
  • run-pickup-stall · abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals (sveltekit) · at 22:37:58Z · abandoned wrun_01M1Q946528JYM7CKZW6MV3JMT
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (sveltekit) · at 22:37:58Z · abandoned wrun_01M1Q946566ZGP3T6K24Y01DRS
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (nest) · at 22:38:01Z · abandoned wrun_01M1Q949HGK1A1F5D0TVZCV4JC
  • run-pickup-stall · ChainableService.processWithThis - static step methods using this to reference the class (nitro) · at 22:38:02Z · abandoned wrun_01M1Q94A5SQM5N5FR4M37R9D5G
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (astro) · at 22:38:03Z · abandoned wrun_01M1Q94AYW240NG1TGB2PF1SMN
  • run-pickup-stall · errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary (hono) · at 22:38:03Z · abandoned wrun_01M1Q94B6HDTKXVPWEFHK0952B
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (nest) · at 22:38:04Z · abandoned wrun_01M1Q94C6QSBPMY1AX3HDWTM9M
  • run-pickup-stall · customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE (hono) · at 22:38:09Z · abandoned wrun_01M1Q94GM0E60PXHY92C7K8M7J
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (nest) · at 22:38:21Z · abandoned wrun_01M1Q94WCQTQ08R5Z5R2THT0C7
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (nest) · at 22:38:24Z · abandoned wrun_01M1Q94Z8BCMQR3RCEGV2SFDQH
  • run-pickup-stall · hookWithSleepFinalStepWorkflow - step only on final payload (astro) · at 22:38:25Z · abandoned wrun_01M1Q950QXSPA0ZSH8DQPEWSEY
  • run-pickup-stall · abortSurvivesReplayWorkflow: controller state consistent across replay (sveltekit) · at 22:38:31Z · abandoned wrun_01M1Q9569KVWQ0HKPXW7PCR4F1
  • run-pickup-stall · instanceMethodStepWorkflow - instance methods with "use step" directive (hono) · at 22:38:33Z · abandoned wrun_01M1Q958GYKFP1CTSCNK36FB7V
  • run-pickup-stall · stepFunctionAsStartArgWorkflow - step function reference passed as start() argument (astro) · at 22:38:37Z · abandoned wrun_01M1Q95CKE41AFJMYRT6M2BXKD
  • run-pickup-stall · abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries (sveltekit) · at 22:38:38Z · abandoned wrun_01M1Q95CY5BR0X5M8RJS0PBDKV
  • run-pickup-stall · stepFunctionAsStartArgWorkflow - step function reference passed as start() argument (hono) · at 22:38:40Z · abandoned wrun_01M1Q95FP4G7C8FXTXRYRH5910
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (nest) · at 22:38:41Z · abandoned wrun_01M1Q95G8E4MJZQM056XTQC44F
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (sveltekit) · at 22:38:44Z · abandoned wrun_01M1Q95JE7CC6Q57GSRQ32Z78R
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (nest) · at 22:38:46Z · abandoned wrun_01M1Q95NGPVNQA8T8BAN170MQK
  • run-pickup-stall · crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context (hono) · at 22:38:47Z · abandoned wrun_01M1Q95P5YATC7VN5FZYZBYMG7
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (astro) · at 22:38:48Z · abandoned wrun_01M1Q95Q0J3E8GQFCQ0ZCRHT7N
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (astro) · at 22:38:49Z · abandoned wrun_01M1Q95QTNVCYPA6KG08XBEWBC
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (astro) · at 22:38:51Z · abandoned wrun_01M1Q95SF7AH327PSX4KHVSG4V
  • run-pickup-stall · abortReasonTypesWorkflow: various abort reason types propagate correctly (sveltekit) · at 22:38:52Z · abandoned wrun_01M1Q95TVC168GWXC947EWX0FM
  • run-pickup-stall · abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries (sveltekit) · at 22:38:58Z · abandoned wrun_01M1Q960RP1F8M6PBPF38XNSB0
  • run-pickup-stall · errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary (hono) · at 22:39:03Z · abandoned wrun_01M1Q965SR4F2RE70SKQ1R3XTR
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (nest) · at 22:39:04Z · abandoned wrun_01M1Q966VX0ZQ9YDAX27VPTXZS
  • run-pickup-stall · cancelRun - cancelling a running workflow (hono) · at 22:39:09Z · abandoned wrun_01M1Q96B78RN6ZKKKCSZST8AN2
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (astro) · at 22:39:10Z · abandoned wrun_01M1Q96CS458F8C0KDTH8M62BG
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (nest) · at 22:39:21Z · abandoned wrun_01M1Q96PZTFQWG3AJ3N8QDYZAA
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (nest) · at 22:39:24Z · abandoned wrun_01M1Q96SVE1YPNR84DS7HSD6N1
  • run-pickup-stall · start: initial attributes are seeded on run creation (sveltekit) · at 22:39:31Z · abandoned wrun_01M1Q970XGB5FSMYKKD02FSNS3
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (nest) · at 22:39:31Z · abandoned wrun_01M1Q971FNGEEDYNMV15XXNYAE
  • run-pickup-stall · cancelRun via CLI - cancelling a running workflow (hono) · at 22:39:33Z · abandoned wrun_01M1Q9734FS6QA0VD8TJNK4Y3Z
  • run-pickup-stall · start: reserved-prefix initial attributes are seeded with allowReservedAttributes (sveltekit) · at 22:39:38Z · abandoned wrun_01M1Q977H6R3YZEH97DCK88JY0
  • run-pickup-stall · cancelRun - cancelling a running workflow (hono) · at 22:39:39Z · abandoned wrun_01M1Q978KPCC9E774Z0Y6N2F2Y
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (nest) · at 22:39:41Z · abandoned wrun_01M1Q97AVETRNMHEW50VSM59K9
  • run-pickup-stall · setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly (sveltekit) · at 22:39:43Z · abandoned wrun_01M1Q97D17G4C3JR8FPES3PCK5
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (hono) · at 22:39:47Z · abandoned wrun_01M1Q97GS8EC7AC8AXRCGB749Y
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (astro) · at 22:39:48Z · abandoned wrun_01M1Q97HKKYAGPZMW28NFJJ0EC
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (astro) · at 22:39:49Z · abandoned wrun_01M1Q97JEZEEBCXS72C8JZP9P5
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (astro) · at 22:39:51Z · abandoned wrun_01M1Q97M280ND0KTZYF0ZBD0MR
  • run-pickup-stall · setAttributesInsideStepWorkflow: step-body calls append attributed native events (sveltekit) · at 22:39:52Z · abandoned wrun_01M1Q97NF0QDPXQVBFKDJ1PBQR
  • run-pickup-stall · fire-and-forget: void setAttributes lands without awaiting (sveltekit) · at 22:39:58Z · abandoned wrun_01M1Q97VBBKZV4AHHQZCEPRDGS
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (sveltekit) · at 22:40:01Z · abandoned wrun_01M1Q97Y7QZFW0AADDH53JXVEF
  • run-pickup-stall · hookWithSleepFinalStepWorkflow - step only on final payload (hono) · at 22:40:03Z · abandoned wrun_01M1Q980D1MNGV8G93YJY244AX
  • run-pickup-stall · cancelRun via CLI - cancelling a running workflow (hono) · at 22:40:03Z · abandoned wrun_01M1Q980Q0FSBGTW7QX7C96CM0
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (nest) · at 22:40:04Z · abandoned wrun_01M1Q981GCXKVWWB4ESQDXNNDZ
  • run-pickup-stall · abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals (sveltekit) · at 22:40:08Z · abandoned wrun_01M1Q984WQQZVE9EAG84D26GVK
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (hono) · at 22:40:09Z · abandoned wrun_01M1Q985Z3YHV6W8FHQZET3S04
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (astro) · at 22:40:10Z · abandoned wrun_01M1Q987C5FSGJYNKFMSFHPAM9
  • run-pickup-stall · abortSurvivesReplayWorkflow: controller state consistent across replay (sveltekit) · at 22:40:13Z · abandoned wrun_01M1Q98AAQVWZK0MRGF0J6MS50
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (nest) · at 22:40:17Z · abandoned wrun_01M1Q98DG957SF499NP6337KG5
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (nest) · at 22:40:21Z · abandoned wrun_01M1Q98HJSK0NSDB0B0B8YV8RJ
  • run-pickup-stall · abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries (sveltekit) · at 22:40:22Z · abandoned wrun_01M1Q98JR855EGFERK4NQFF2RF
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (nest) · at 22:40:24Z · abandoned wrun_01M1Q98MEEK0V9PHZHYQBNBKPZ
  • run-pickup-stall · start: initial attributes are seeded on run creation (nest) · at 22:40:26Z · abandoned wrun_01M1Q98PWC3PPE48BTE0T964BK
  • run-pickup-stall · abortReasonTypesWorkflow: various abort reason types propagate correctly (sveltekit) · at 22:40:28Z · abandoned wrun_01M1Q98RMVTRNCFVR4VFR54KRG
  • run-pickup-stall · hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep (hono) · at 22:40:32Z · abandoned wrun_01M1Q98WS90F780S6ZETQ0HCNQ
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (hono) · at 22:40:34Z · abandoned wrun_01M1Q98Y55WWV9KZTSRPY3STTR
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (astro) · at 22:40:37Z · abandoned wrun_01M1Q991SF40JA1J66KB8WV2C4
  • run-pickup-stall · stepFunctionAsStartArgWorkflow - step function reference passed as start() argument (hono) · at 22:40:41Z · abandoned wrun_01M1Q994WPK6RVSTZ9MMYK9C3X
  • run-pickup-stall · abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries (sveltekit) · at 22:40:46Z · abandoned wrun_01M1Q99AC9V9NWSRWM441ZBXMX
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (astro) · at 22:40:48Z · abandoned wrun_01M1Q99C6KS3JWXADDB9938B83
  • run-pickup-stall · hookWithSleepFinalStepWorkflow - step only on final payload (hono) · at 22:40:48Z · abandoned wrun_01M1Q99CCR109GF2AQ932SB8DW
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (astro) · at 22:40:49Z · abandoned wrun_01M1Q99D36FC74Y7VZM1VPCPTM
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (astro) · at 22:40:51Z · abandoned wrun_01M1Q99EN9162F4DWVGW25MX2M
  • run-pickup-stall · start: reserved-prefix initial attributes are seeded with allowReservedAttributes (nest) · at 22:40:56Z · abandoned wrun_01M1Q99M5WJ2PZB83VWMQ37WZH
  • run-pickup-stall · setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly (nest) · at 22:41:04Z · abandoned wrun_01M1Q99W3DDWEDQ39ZFFPW2473
  • run-pickup-stall · setAttributesInsideStepWorkflow: step-body calls append attributed native events (nest) · at 22:41:06Z · abandoned wrun_01M1Q99XKPTT0810H127GQM42D
  • run-pickup-stall · start: initial attributes are seeded on run creation (sveltekit) · at 22:41:08Z · abandoned wrun_01M1Q99ZFPJMC886RRENM6WSXE
  • run-pickup-stall · sleepInLoopWorkflow - sleep inside loop with steps actually delays each iteration (hono) · at 22:41:09Z · abandoned wrun_01M1Q9A0JHQ40RVEY7TS8B0476
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (astro) · at 22:41:10Z · abandoned wrun_01M1Q9A1Z6SB5S592WCTTJCWX3
  • run-pickup-stall · start: reserved-prefix initial attributes are seeded with allowReservedAttributes (sveltekit) · at 22:41:13Z · abandoned wrun_01M1Q9A4YFBRFDXWGAMYDD9JB0
  • run-pickup-stall · fire-and-forget: void setAttributes lands without awaiting (nest) · at 22:41:17Z · abandoned wrun_01M1Q9A83AZ73QZ72G5GZ0ZYR2
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (hono) · at 22:41:17Z · abandoned wrun_01M1Q9A8Y472F9079N23P4HPWA
  • run-pickup-stall · setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly (sveltekit) · at 22:41:22Z · abandoned wrun_01M1Q9ADDSXD6R4CMC2BMBNY25
  • run-pickup-stall · abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals (nest) · at 22:41:24Z · abandoned wrun_01M1Q9AF5P9BKK45J5PDJ6FZCA
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (nest) · at 22:41:26Z · abandoned wrun_01M1Q9AHFETT1JC61XNWKZKX9Y
  • run-pickup-stall · setAttributesInsideStepWorkflow: step-body calls append attributed native events (sveltekit) · at 22:41:28Z · abandoned wrun_01M1Q9AK7VJ5M7FW4TMFJ8NJW4
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (hono) · at 22:41:33Z · abandoned wrun_01M1Q9ARDCMKGYGT95F9D9F6BS
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (hono) · at 22:41:34Z · abandoned wrun_01M1Q9ARR69YD51YV05T6DMBM3
  • run-pickup-stall · abortSurvivesReplayWorkflow: controller state consistent across replay (nest) · at 22:41:34Z · abandoned wrun_01M1Q9ASCZC7K47AB1G5PTCYJW
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (nest) · at 22:41:36Z · abandoned wrun_01M1Q9ATX6DAZ61DK3XANP9VSK
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (astro) · at 22:41:37Z · abandoned wrun_01M1Q9AWCGGEP1789GRP1V52CV
  • run-pickup-stall · fire-and-forget: void setAttributes lands without awaiting (sveltekit) · at 22:41:38Z · abandoned wrun_01M1Q9AWSEG3A829M6KYTQMV0W
  • run-pickup-stall · abortFetchInFlightWorkflow: aborting cancels an in-flight fetch (sveltekit) · at 22:41:43Z · abandoned wrun_01M1Q9B288WWCJYWQXYX91NV0X
  • run-pickup-stall · abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works (sveltekit) · at 22:41:46Z · abandoned wrun_01M1Q9B4Z8EE3Y0MB5Q1FHH8BP
  • run-pickup-stall · start: initial attributes are seeded on run creation (nest) · at 22:41:47Z · abandoned wrun_01M1Q9B5CT5TJ7YZGKEHRJDQFB
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (astro) · at 22:41:49Z · abandoned wrun_01M1Q9B7QAAE62SMMQSVH4SZ8X
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (astro) · at 22:41:51Z · abandoned wrun_01M1Q9B98A92R0YQTAKSCG1DNC
  • run-pickup-stall · abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay (sveltekit) · at 22:41:52Z · abandoned wrun_01M1Q9BAQXBBM9SBR9D40SEEDB
  • run-pickup-stall · abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal (sveltekit) · at 22:41:58Z · abandoned wrun_01M1Q9BGJ0PSR1R58T5B1S8A47
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (astro) · at 22:41:58Z · abandoned wrun_01M1Q9BGJD10FK14PDZ4KHCDP2
  • run-pickup-stall · Promise.all of disjoint-key writes: every key lands (sveltekit) · at 22:42:08Z · abandoned wrun_01M1Q9BT2YBK01NNTWTCEEW7AZ
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (hono) · at 22:42:09Z · abandoned wrun_01M1Q9BV5MR7WH9XPGXPH3PA4P
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (astro) · at 22:42:10Z · abandoned wrun_01M1Q9BWJ6D3PN4NMTSAF7VSHP
  • run-pickup-stall · abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries (nest) · at 22:42:17Z · abandoned wrun_01M1Q9C2PBB508QBVAJANZEQ8F
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (hono) · at 22:42:17Z · abandoned wrun_01M1Q9C3H4CFS3B89CWH23D9XG
  • run-pickup-stall · abortReasonTypesWorkflow: various abort reason types propagate correctly (nest) · at 22:42:21Z · abandoned wrun_01M1Q9C73K8BBSW1R07T6RFWND
  • run-pickup-stall · abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries (nest) · at 22:42:24Z · abandoned wrun_01M1Q9C9RPNJ86159XA1FXNJT3
  • run-pickup-stall · start: reserved-prefix initial attributes are seeded with allowReservedAttributes (nest) · at 22:42:26Z · abandoned wrun_01M1Q9CC9CAV0ER4MVD0MKGSB7
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (hono) · at 22:42:33Z · abandoned wrun_01M1Q9CK4JWF0ZZ6SHECDEPHXP
  • run-pickup-stall · sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) (hono) · at 22:42:34Z · abandoned wrun_01M1Q9CKB6S6Q1ND6EM5X7P4TF
  • run-pickup-stall · setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly (nest) · at 22:42:34Z · abandoned wrun_01M1Q9CKZZH3MNPC9SPA64G23J
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (astro) · at 22:42:37Z · abandoned wrun_01M1Q9CPZHG63BM5000PT8ND8G
  • run-pickup-stall · workflow throws after awaited setAttributes: attribute still persists on the failed run (sveltekit) · at 22:42:38Z · abandoned wrun_01M1Q9CQCP2H729YGNEEVDB3ME
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (hono) · at 22:42:41Z · abandoned wrun_01M1Q9CT2Q7R2GH82754PGF4T0
  • run-pickup-stall · abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires (sveltekit) · at 22:42:43Z · abandoned wrun_01M1Q9CWV0EWMXS6T8D1NMA064
  • run-pickup-stall · validation DX: invalid writes throw catchable FatalErrors naming rule and limit (sveltekit) · at 22:42:46Z · abandoned wrun_01M1Q9CZJ8RZPNS5CEQVE4PN62
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (astro) · at 22:42:49Z · abandoned wrun_01M1Q9D2C7XZ39YQRW4QQ1AWPP
  • run-pickup-stall · Promise.all of disjoint-key writes: every key lands (sveltekit) · at 22:42:52Z · abandoned wrun_01M1Q9D5C71QCXRASD8AH6VGD8
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (astro) · at 22:42:55Z · abandoned wrun_01M1Q9D8MDX06J3H8J35HH4NHG
  • run-pickup-stall · setAttributesInsideStepWorkflow: step-body calls append attributed native events (nest) · at 22:42:56Z · abandoned wrun_01M1Q9D9JX3MYZQBJYJXFJ75AQ
  • run-pickup-stall · abortFetchInFlightWorkflow: aborting cancels an in-flight fetch (sveltekit) · at 22:42:58Z · abandoned wrun_01M1Q9DB51MN1DYJG13VERM18A
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (astro) · at 22:42:58Z · abandoned wrun_01M1Q9DB5BXAGQB4C15WGFATEF
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (astro) · at 22:43:01Z · abandoned wrun_01M1Q9DDKYC2B3QZVRMNCK8CV1
  • run-pickup-stall · fire-and-forget: void setAttributes lands without awaiting (nest) · at 22:43:04Z · abandoned wrun_01M1Q9DH9FM4MT0TP3J27EEJ0S
  • run-pickup-stall · abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works (sveltekit) · at 22:43:08Z · abandoned wrun_01M1Q9DMP76GHQKE8C7Y87T3Q0
  • run-pickup-stall · abortTimeoutWorkflow: timeout cancels long-running step (hono) · at 22:43:09Z · abandoned wrun_01M1Q9DNRNG8KZ0KKFCK3WNW2D
  • run-pickup-stall · abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay (sveltekit) · at 22:43:16Z · abandoned wrun_01M1Q9DWVRCQVHW0PF7QP87M8X
  • run-pickup-stall · Promise.all of disjoint-key writes: every key lands (nest) · at 22:43:17Z · abandoned wrun_01M1Q9DX9A8117TQM5X0TM2EE5
  • run-pickup-stall · abortParallelWorkflow: abort cancels all parallel steps (hono) · at 22:43:17Z · abandoned wrun_01M1Q9DY45BHPW7A2BHQRH8SSR
  • run-pickup-stall · abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals (nest) · at 22:43:21Z · abandoned wrun_01M1Q9E1PK4XNWW5J6TAD3RESX
  • run-pickup-stall · abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal (sveltekit) · at 22:43:22Z · abandoned wrun_01M1Q9E2PME2BV67QWKQHZQ7E8
  • run-pickup-stall · abortSurvivesReplayWorkflow: controller state consistent across replay (nest) · at 22:43:24Z · abandoned wrun_01M1Q9E4FRX0X1PERNRQ53FP3Z
  • run-pickup-stall · workflow throws after awaited setAttributes: attribute still persists on the failed run (nest) · at 22:43:26Z · abandoned wrun_01M1Q9E6WETX0HNX3TKGN1J4FS
  • run-pickup-stall · abortFromStepWorkflow: step abort cancels an in-flight sibling step (hono) · at 22:43:33Z · abandoned wrun_01M1Q9EDSERZWEM8KQGM61REXE
  • run-pickup-stall · validation DX: invalid writes throw catchable FatalErrors naming rule and limit (nest) · at 22:43:34Z · abandoned wrun_01M1Q9EEK0XMBAQ07DTFTW4Q09
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (astro) · at 22:43:37Z · abandoned wrun_01M1Q9EHKNCGDMV0PCDEPJM8QP
  • run-pickup-stall · abortAlreadyAbortedWorkflow: pre-aborted signal seen by step (hono) · at 22:43:41Z · abandoned wrun_01M1Q9EMNR12XC9TAHB9WMB4VB
  • run-pickup-stall · workflow throws after awaited setAttributes: attribute still persists on the failed run (sveltekit) · at 22:43:43Z · abandoned wrun_01M1Q9EQDZA7PYFVNB88CCBMBA
  • run-pickup-stall · abortReasonWorkflow: abort reason preserved across boundaries (hono) · at 22:43:44Z · abandoned wrun_01M1Q9EQPW8AJ74DJ8WAGXWFBJ
  • run-pickup-stall · abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries (nest) · at 22:43:47Z · abandoned wrun_01M1Q9ETJTNBH1WNB4WRBDC90V
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (astro) · at 22:43:49Z · abandoned wrun_01M1Q9EWZ7RX2VXKQ6KGTMPXHV
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (astro) · at 22:43:55Z · abandoned wrun_01M1Q9F37ENK006X3R0EB5J6V9
  • run-pickup-stall · abortReasonTypesWorkflow: various abort reason types propagate correctly (nest) · at 22:43:56Z · abandoned wrun_01M1Q9F45Z31SVZF1EDHYCM71C
  • run-pickup-stall · validation DX: invalid writes throw catchable FatalErrors naming rule and limit (sveltekit) · at 22:43:58Z · abandoned wrun_01M1Q9F5R2GVN4BYC9PCTSA8CB
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (astro) · at 22:43:58Z · abandoned wrun_01M1Q9F5RBW8SHJP6YNB9CACEQ
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (astro) · at 22:44:01Z · abandoned wrun_01M1Q9F86YVJAJ4X6W0QAH7RVM
  • run-pickup-stall · abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries (nest) · at 22:44:04Z · abandoned wrun_01M1Q9FBWHSGJV94MWC6Q4F5ZC
  • run-pickup-stall · abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires (sveltekit) · at 22:44:08Z · abandoned wrun_01M1Q9FFA00F444T77QVYR5FPG
  • run-pickup-stall · importMetaUrlWorkflow - import.meta.url is available in step bundles (hono) · at 22:44:09Z · abandoned wrun_01M1Q9FGBQACVDGCYA99MKW6N8
  • run-pickup-stall · abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step (sveltekit) · at 22:44:13Z · abandoned wrun_01M1Q9FMQFYNBFHESYJCCEQD3M
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook (sveltekit) · at 22:44:16Z · abandoned wrun_01M1Q9FQERSD64DW6W1MWT7BS6
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (hono) · at 22:44:18Z · abandoned wrun_01M1Q9FRSRQQA1ASVHVRXEWK2K
  • run-pickup-stall · Promise.all of disjoint-key writes: every key lands (nest) · at 22:44:21Z · abandoned wrun_01M1Q9FWC90ASJRBBFC6G860HM
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort() (sveltekit) · at 22:44:22Z · abandoned wrun_01M1Q9FXAGPXJRXMTKRF1478QR
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (astro) · at 22:44:23Z · abandoned wrun_01M1Q9FXQDAJC8FY0P7MMX69T4
  • run-pickup-stall · workflow throws after awaited setAttributes: attribute still persists on the failed run (nest) · at 22:44:24Z · abandoned wrun_01M1Q9FZ3BSA5XBWSATAGXYSWN
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook (sveltekit) · at 22:44:28Z · abandoned wrun_01M1Q9G31J7X3E5NF2231NWDDG
  • run-pickup-stall · metadataFromHelperWorkflow - getWorkflowMetadata/getStepMetadata work from module-level helper (Vercel World Regression: getWorkflowMetadata() fully breaking runs #1577) (hono) · at 22:44:33Z · abandoned wrun_01M1Q9G8CEJE6EZ03V5C47DT2E
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (astro) · at 22:44:34Z · abandoned wrun_01M1Q9G90JKYZGFVJER6CGHNNK
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (hono) · at 22:44:44Z · abandoned wrun_01M1Q9GJ9WE6F77A7BCG6JCTDV
  • run-pickup-stall · abortFetchInFlightWorkflow: aborting cancels an in-flight fetch (nest) · at 22:44:47Z · abandoned wrun_01M1Q9GN63EHPRB0NK35PQXX7P
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (hono) · at 22:44:51Z · abandoned wrun_01M1Q9GS1CY6VQFXWQT8890MA6
  • run-pickup-stall · validation DX: invalid writes throw catchable FatalErrors naming rule and limit (nest) · at 22:44:51Z · abandoned wrun_01M1Q9GSP92X1K83GGB2WH714T
  • run-pickup-stall · abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works (nest) · at 22:44:54Z · abandoned wrun_01M1Q9GWF3J2RFT0G0HEVDCZNM
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (astro) · at 22:44:55Z · abandoned wrun_01M1Q9GXTFR53C4PA9PM75TTVW
  • run-pickup-stall · abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay (nest) · at 22:44:56Z · abandoned wrun_01M1Q9GYSBNPV794S465KF9BRR
  • run-pickup-stall · start: initial attributes are seeded on run creation (astro) · at 22:44:58Z · abandoned wrun_01M1Q9H0BCXM4D0TQY58RJ0Q02
  • run-pickup-stall · start: reserved-prefix initial attributes are seeded with allowReservedAttributes (astro) · at 22:45:01Z · abandoned wrun_01M1Q9H2SYHNXQPQTZ0HJDTNGS
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook (sveltekit) · at 22:45:01Z · abandoned wrun_01M1Q9H3F671WRP4KKD3PJDX7R
  • run-pickup-stall · abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal (nest) · at 22:45:04Z · abandoned wrun_01M1Q9H6HB1Z4TGMZM1STS5SA4
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort() (sveltekit) · at 22:45:07Z · abandoned wrun_01M1Q9H99K5AHDCZ8QYY72KQ8Z
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort() (sveltekit) · at 22:45:08Z · abandoned wrun_01M1Q9H9X7GQT62VX13TXWCGS2
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (hono) · at 22:45:09Z · abandoned wrun_01M1Q9HB0F0P9CJZPFBYE46K7P
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook (sveltekit) · at 22:45:13Z · abandoned wrun_01M1Q9HF1E76DY3ET6AHD0Y4CZ
  • run-pickup-stall · abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step (sveltekit) · at 22:45:13Z · abandoned wrun_01M1Q9HFANP8ZSH06DF0KZ88AH
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (hono) · at 22:45:18Z · abandoned wrun_01M1Q9HKCR0TZV0PTWZ67MD57K
  • run-pickup-stall · setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly (astro) · at 22:45:19Z · abandoned wrun_01M1Q9HN1ZFDSAQX0Y1CCEVZVP
  • run-pickup-stall · abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires (nest) · at 22:45:21Z · abandoned wrun_01M1Q9HPZS4R04VVH9ZQNQWG6B
  • run-pickup-stall · setAttributesInsideStepWorkflow: step-body calls append attributed native events (astro) · at 22:45:23Z · abandoned wrun_01M1Q9HRAEGK2BKFRJV9KG09DS
  • run-pickup-stall · fire-and-forget: void setAttributes lands without awaiting (astro) · at 22:45:28Z · abandoned wrun_01M1Q9HXMXDDS06KQFXV8HBJX3
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (astro) · at 22:45:31Z · abandoned wrun_01M1Q9J03EXSD07V5R6M7G0KY7
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (hono) · at 22:45:33Z · abandoned wrun_01M1Q9J2ZE77G7W640815A7CNH
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (hono) · at 22:45:36Z · abandoned wrun_01M1Q9J56XZDK5H8FN7EYJCZAF
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (hono) · at 22:45:44Z · abandoned wrun_01M1Q9JCWXENDVWC7TWHNM6316
  • run-pickup-stall · abortFetchInFlightWorkflow: aborting cancels an in-flight fetch (nest) · at 22:45:47Z · abandoned wrun_01M1Q9JFTHHBBXJA3GBRM3XFY9
  • run-pickup-stall · abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals (astro) · at 22:45:49Z · abandoned wrun_01M1Q9JJDH6TDPQ05KY4FJEF00
  • run-pickup-stall · abortSurvivesReplayWorkflow: controller state consistent across replay (astro) · at 22:45:53Z · abandoned wrun_01M1Q9JNKY7JSETJ1N0J319KKN
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort() (sveltekit) · at 22:45:53Z · abandoned wrun_01M1Q9JNWR8DG61HP2RAJ3B0QT
  • run-pickup-stall · abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works (nest) · at 22:45:54Z · abandoned wrun_01M1Q9JQ2C7X6SRW14VJS0JD96
  • run-pickup-stall · distributedAbortController - TTL expiration triggers signal (astro) · at 22:45:55Z · abandoned wrun_01M1Q9JRDF05M150V0GWR1ABE5
  • run-pickup-stall · abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay (nest) · at 22:45:56Z · abandoned wrun_01M1Q9JSCSQ4EDV4V0SRMAWQNX
  • run-pickup-stall · abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries (astro) · at 22:45:58Z · abandoned wrun_01M1Q9JTYCXWGH6Y3ETAXCN56F
  • run-pickup-stall · abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal (nest) · at 22:46:06Z · abandoned wrun_01M1Q9K1VXHAG7WCGTKR00HRHE
  • run-pickup-stall · getterStepWorkflow - getter functions with "use step" directive (hono) · at 22:46:09Z · abandoned wrun_01M1Q9K5NWVAB1F97M9TGRQ29J
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (astro) · at 22:46:16Z · abandoned wrun_01M1Q9KC611VPRPBWNXTYPC1XE
  • run-pickup-stall · distributedAbortController - reconnect to existing controller (hono) · at 22:46:18Z · abandoned wrun_01M1Q9KDZRDQAZS27301WZHPYV
  • run-pickup-stall · abortViaHookWorkflow: external hook triggers abort on in-flight step (hono) · at 22:46:21Z · abandoned wrun_01M1Q9KH9EFWWQ95A09RN6WFVC
  • run-pickup-stall · abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires (nest) · at 22:46:21Z · abandoned wrun_01M1Q9KHKAEGXWXV5BZYQSWCWB
  • run-pickup-stall · abortAfterCompletionWorkflow: abort after step completes is a no-op (hono) · at 22:46:33Z · abandoned wrun_01M1Q9KXJES5639M445YE9ADMQ
  • run-pickup-stall · abortExternalSignalWorkflow: signal passed as workflow input (hono) · at 22:46:44Z · abandoned wrun_01M1Q9M7FWN02GBMZEBJBJ19T0
  • run-pickup-stall · abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step (nest) · at 22:46:47Z · abandoned wrun_01M1Q9MAE1P9J44VFA8NER5DJ9
  • run-pickup-stall · abortReasonTypesWorkflow: various abort reason types propagate correctly (astro) · at 22:46:49Z · abandoned wrun_01M1Q9MD0HTPT9PETJ68VKYENZ
  • run-pickup-stall · start: initial attributes are seeded on run creation (astro) · at 22:46:53Z · abandoned wrun_01M1Q9MG6YEZ0YBF6DY5B4TZ72
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook (nest) · at 22:46:54Z · abandoned wrun_01M1Q9MHNR2S1Z0ZZA7B0T7K5X
  • run-pickup-stall · start: reserved-prefix initial attributes are seeded with allowReservedAttributes (astro) · at 22:46:55Z · abandoned wrun_01M1Q9MK0FSY9ESNZ716D6WWBA
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort() (nest) · at 22:46:56Z · abandoned wrun_01M1Q9MM05TEBYP42GWMC68PF0
  • run-pickup-stall · setAttributesWorkflow: workflow-body calls append native attr_set events and merge correctly (astro) · at 22:46:58Z · abandoned wrun_01M1Q9MNHDRF5PZN2AFPA9SQHG
  • run-pickup-stall · setAttributesInsideStepWorkflow: step-body calls append attributed native events (astro) · at 22:47:01Z · abandoned wrun_01M1Q9MR9V0MYBK652EZVSMMVT
  • run-pickup-stall · abortExternalSignalInFlightWorkflow: external abort fires mid-flight, propagates to nested steps (hono) · at 22:47:03Z · abandoned wrun_01M1Q9MT4KSBF24SNZWFCACPNE
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook (nest) · at 22:47:05Z · abandoned wrun_01M1Q9MWFACHMP8V66RQWNEC18
  • run-pickup-stall · distributedAbortController - manual abort triggers signal (hono) · at 22:47:06Z · abandoned wrun_01M1Q9MXBBWANVMYHSFRSGME2A
  • run-pickup-stall · abortAnyInWorkflowWorkflow: AbortSignal.any composes signals inside the workflow VM (hono) · at 22:47:09Z · abandoned wrun_01M1Q9N08XY2GEXNNQZVDX40X2
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort() (nest) · at 22:47:21Z · abandoned wrun_01M1Q9NC6Q4PW65N5BMRF378SF
  • run-pickup-stall · abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries (astro) · at 22:47:23Z · abandoned wrun_01M1Q9NDGFCR260998S9254RAX
  • run-pickup-stall · fire-and-forget: void setAttributes lands without awaiting (astro) · at 22:47:25Z · abandoned wrun_01M1Q9NG9YXGV1X45SZQJ5HYTR
  • run-pickup-stall · abortAnyInStepWorkflow: AbortSignal.any inside a step composes deserialized signals (astro) · at 22:47:28Z · abandoned wrun_01M1Q9NJTYKN9NNS90ZHD4DCMS
  • run-pickup-stall · abortSurvivesReplayWorkflow: controller state consistent across replay (astro) · at 22:47:31Z · abandoned wrun_01M1Q9NNKBWJTPY3YAXQA5BGH2
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook (nest) · at 22:47:39Z · abandoned wrun_01M1Q9NXN9M21TY0G52PSPSKRP
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort() (nest) · at 22:47:42Z · abandoned wrun_01M1Q9P0505NW21NFVJSSXXZ0Q
  • run-pickup-stall · abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step (nest) · at 22:47:47Z · abandoned wrun_01M1Q9P518AJA32WA9RPNDAB73
  • run-pickup-stall · abortThrowIfAbortedWorkflow: throwIfAborted causes FatalError, no retries (astro) · at 22:47:49Z · abandoned wrun_01M1Q9P7KHKPMVT3N5HYGYM21R
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook (nest) · at 22:47:50Z · abandoned wrun_01M1Q9P8MQHX5EKDHB5JQ2AJYE
  • run-pickup-stall · Promise.all of disjoint-key writes: every key lands (astro) · at 22:47:55Z · abandoned wrun_01M1Q9PDN4WQVRH90V8SAV3SP0
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort() (nest) · at 22:48:07Z · abandoned wrun_01M1Q9PRE4DERQ6G4NEPTHVHAF
  • run-pickup-stall · workflow throws after awaited setAttributes: attribute still persists on the failed run (astro) · at 22:48:23Z · abandoned wrun_01M1Q9Q83GH302XHQ6490A9GVR
  • run-pickup-stall · validation DX: invalid writes throw catchable FatalErrors naming rule and limit (astro) · at 22:48:25Z · abandoned wrun_01M1Q9QAYNRTGXSVCEN2F84M90
  • run-pickup-stall · abortReasonTypesWorkflow: various abort reason types propagate correctly (astro) · at 22:48:28Z · abandoned wrun_01M1Q9QDE2QA5TSGZXAZBAHVF1
  • run-pickup-stall · abortFetchUncaughtWorkflow: uncaught fetch AbortError is FatalError, no retries (astro) · at 22:48:31Z · abandoned wrun_01M1Q9QG7FPKBM6HENQK2RGP7K
  • run-pickup-stall · Promise.all of disjoint-key writes: every key lands (astro) · at 22:48:49Z · abandoned wrun_01M1Q9R26JQ351K0277RF8H87T
  • run-pickup-stall · abortFetchInFlightWorkflow: aborting cancels an in-flight fetch (astro) · at 22:48:53Z · abandoned wrun_01M1Q9R5D07TQMNWR7NC5BDV01
  • run-pickup-stall · abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works (astro) · at 22:48:55Z · abandoned wrun_01M1Q9R885DNQD3M98197S5R7K
  • run-pickup-stall · abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay (astro) · at 22:49:19Z · abandoned wrun_01M1Q9RZH6MEXWXKJ5YY3KVR4N
  • run-pickup-stall · workflow throws after awaited setAttributes: attribute still persists on the failed run (astro) · at 22:49:28Z · abandoned wrun_01M1Q9S812A703NQAR0WTVNWAD
  • run-pickup-stall · validation DX: invalid writes throw catchable FatalErrors naming rule and limit (astro) · at 22:49:31Z · abandoned wrun_01M1Q9SATGS0K3TX15XB3WN0FJ
  • run-pickup-stall · abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal (astro) · at 22:49:53Z · abandoned wrun_01M1Q9T00TEGFZ0M1BR63200F1
  • run-pickup-stall · abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires (astro) · at 22:49:55Z · abandoned wrun_01M1Q9T2V50D0HPW3HMHMPGWAY
  • run-pickup-stall · abortFetchInFlightWorkflow: aborting cancels an in-flight fetch (astro) · at 22:49:58Z · abandoned wrun_01M1Q9T5AJY6JNFB3V78TBWGKE
  • run-pickup-stall · abortVoidSleepTimeoutWorkflow: documented void sleep().then(abort) pattern works (astro) · at 22:50:01Z · abandoned wrun_01M1Q9T84VR53CN89QS54176P3
  • run-pickup-stall · abortDeterministicBranchWorkflow: if-check takes same path on first-run and replay (astro) · at 22:50:19Z · abandoned wrun_01M1Q9TT4E36A9CJ2F39ZVSNYB
  • run-pickup-stall · abortListenerWorkflow: signal.addEventListener fires on the deserialized step signal (astro) · at 22:50:53Z · abandoned wrun_01M1Q9VTM62H53K370VBDBBCGA
  • run-pickup-stall · abortThrowIfAbortedMidFlightWorkflow: throwIfAborted in a polling loop bails when abort fires (astro) · at 22:50:55Z · abandoned wrun_01M1Q9VXED4QA6FVQ5TT5GJ057
  • run-pickup-stall · abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step (astro) · at 22:50:58Z · abandoned wrun_01M1Q9VZXZSBQXPPBSJVVKW3MC
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook (astro) · at 22:51:01Z · abandoned wrun_01M1Q9W2R4697SW69DYH1Y3ZQP
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort() (astro) · at 22:51:19Z · abandoned wrun_01M1Q9WMQQE7DG7ESR3580SHK9
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-abort-first]: addEventListener → hook.then → abort() → resumeHook (astro) · at 22:51:46Z · abandoned wrun_01M1Q9XEV4481W0XBEMSTZ3JXX
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook (astro) · at 22:51:53Z · abandoned wrun_01M1Q9XN7FRRG18S8F5HFC1VHD
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort() (astro) · at 22:51:56Z · abandoned wrun_01M1Q9XR1TG13JW5R0N4VVKDE2
  • run-pickup-stall · abortDeterministicBranchFromStepWorkflow: branches stay consistent when abort comes from a step (astro) · at 22:51:58Z · abandoned wrun_01M1Q9XTH730N3MCGSQVQHTW6P
  • run-pickup-stall · abortHookOrderingWorkflow [listener-first-hook-first]: addEventListener → hook.then → resumeHook → abort() (astro) · at 22:52:05Z · abandoned wrun_01M1Q9Y0VEP5GGDTMRKEDMF4DN
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-abort-first]: hook.then → addEventListener → abort() → resumeHook (astro) · at 22:52:38Z · abandoned wrun_01M1Q9Z194T4J0Y1HSSJHGPZ1Y
  • run-pickup-stall · abortHookOrderingWorkflow [hook-first-hook-first]: hook.then → addEventListener → resumeHook → abort() (astro) · at 22:52:41Z · abandoned wrun_01M1Q9Z450JEXF99Y6BNNMDKKC

E2E Test Summary

Summary
Passed Failed Skipped Total
✅ ▲ Vercel Production 3729 0 834 4563
❌ 💻 Local Development 2905 216 428 3549
❌ 📦 Local Production 2584 263 364 3211
✅ 🐘 Local Postgres 4174 0 558 4732
✅ 🪟 Windows 169 0 0 169
✅ 🌐 Cross-language Conformance 68 0 82 150
✅ vercel-http-transport 871 0 143 1014
✅ vercel-multi-region 27 0 0 27
✅ vercel-ws-transport 589 0 87 676
Total 15116 479 2496 18091
Details by Category

✅ ▲ Vercel Production

App Passed Failed Skipped
✅ astro-node 141 0 28
✅ astro-quickjs 141 0 28
✅ example-node 141 0 28
✅ example-quickjs 141 0 28
✅ express-node 141 0 28
✅ express-quickjs 141 0 28
✅ fastify-node 141 0 28
✅ fastify-quickjs 141 0 28
✅ hono-node 141 0 28
✅ hono-quickjs 141 0 28
✅ nest-node 0 0 169
✅ nest-quickjs 141 0 28
✅ nextjs-turbopack-node 166 0 3
✅ nextjs-turbopack-quickjs 166 0 3
✅ nextjs-webpack-node 166 0 3
✅ nextjs-webpack-quickjs 166 0 3
✅ nitro-node 141 0 28
✅ nitro-quickjs 141 0 28
✅ nuxt-node 141 0 28
✅ nuxt-quickjs 141 0 28
✅ python-node 66 0 103
✅ sveltekit-node 160 0 9
✅ sveltekit-quickjs 160 0 9
✅ tanstack-start-node 141 0 28
✅ tanstack-start-quickjs 141 0 28
✅ vite-node 141 0 28
✅ vite-quickjs 141 0 28

❌ 💻 Local Development

App Passed Failed Skipped
✅ astro-stable-node 143 0 26
✅ express-stable-node 143 0 26
❌ express-stable-quickjs 122 21 26
✅ fastify-stable-node 143 0 26
❌ fastify-stable-quickjs 124 19 26
✅ hono-stable-node 143 0 26
❌ hono-stable-quickjs 101 42 26
✅ nest-stable-node 143 0 26
❌ nest-stable-quickjs 93 50 26
✅ nextjs-turbopack-canary-node 150 0 19
❌ nextjs-turbopack-canary-quickjs 125 25 19
✅ nextjs-turbopack-stable-node 169 0 0
❌ nextjs-turbopack-stable-quickjs 132 37 0
✅ nextjs-webpack-canary-node 150 0 19
✅ nextjs-webpack-stable-node 169 0 0
✅ nitro-stable-node 143 0 26
❌ nitro-stable-quickjs 121 22 26
✅ nuxt-stable-node 143 0 26
✅ sveltekit-stable-node 162 0 7
✅ tanstack-start-node 143 0 26
✅ vite-stable-node 143 0 26

❌ 📦 Local Production

App Passed Failed Skipped
✅ astro-stable-node 143 0 26
❌ astro-stable-quickjs 86 57 26
✅ express-stable-node 143 0 26
❌ express-stable-quickjs 93 50 26
✅ fastify-stable-node 143 0 26
✅ hono-stable-node 143 0 26
✅ nest-stable-node 143 0 26
✅ nextjs-turbopack-canary-node 150 0 19
✅ nextjs-turbopack-stable-node 169 0 0
❌ nextjs-turbopack-stable-quickjs 116 53 0
✅ nextjs-webpack-canary-node 150 0 19
✅ nextjs-webpack-stable-node 169 0 0
✅ nitro-stable-node 143 0 26
❌ nitro-stable-quickjs 85 58 26
✅ nuxt-stable-node 143 0 26
✅ sveltekit-stable-node 162 0 7
❌ sveltekit-stable-quickjs 117 45 7
✅ tanstack-start-node 143 0 26
✅ vite-stable-node 143 0 26

✅ 🐘 Local Postgres

App Passed Failed Skipped
✅ astro-stable-node 143 0 26
✅ astro-stable-quickjs 143 0 26
✅ express-stable-node 143 0 26
✅ express-stable-quickjs 143 0 26
✅ fastify-stable-node 143 0 26
✅ fastify-stable-quickjs 143 0 26
✅ hono-stable-node 143 0 26
✅ hono-stable-quickjs 143 0 26
✅ nest-stable-node 143 0 26
✅ nest-stable-quickjs 143 0 26
✅ nextjs-turbopack-canary-node 150 0 19
✅ nextjs-turbopack-canary-quickjs 150 0 19
✅ nextjs-turbopack-stable-node 169 0 0
✅ nextjs-turbopack-stable-quickjs 169 0 0
✅ nextjs-webpack-canary-node 150 0 19
✅ nextjs-webpack-canary-quickjs 150 0 19
✅ nextjs-webpack-stable-node 169 0 0
✅ nextjs-webpack-stable-quickjs 169 0 0
✅ nitro-stable-node 143 0 26
✅ nitro-stable-quickjs 143 0 26
✅ nuxt-stable-node 143 0 26
✅ nuxt-stable-quickjs 143 0 26
✅ sveltekit-stable-node 162 0 7
✅ sveltekit-stable-quickjs 162 0 7
✅ tanstack-start-node 143 0 26
✅ tanstack-start-quickjs 143 0 26
✅ vite-stable-node 143 0 26
✅ vite-stable-quickjs 143 0 26

✅ 🪟 Windows

App Passed Failed Skipped
✅ nextjs-turbopack-node 169 0 0

✅ 🌐 Cross-language Conformance

App Passed Failed Skipped
✅ python 68 0 82

✅ vercel-http-transport

App Passed Failed Skipped
✅ example 141 0 28
✅ express 141 0 28
✅ hono 141 0 28
✅ nextjs-turbopack 166 0 3
✅ nitro 141 0 28
✅ vite 141 0 28

✅ vercel-multi-region

App Passed Failed Skipped
✅ nextjs-turbopack 27 0 0

✅ vercel-ws-transport

App Passed Failed Skipped
✅ example 141 0 28
✅ express 141 0 28
✅ nextjs-turbopack 166 0 3
✅ vite 141 0 28

📋 View full workflow run

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Sim World

Simulated world deterministic testing for races. Traces

🟠 world-sim scenario book — 1 fail of 41 total

fence=per-spec

scenario outcome events virt replay violations
smoke-no-steps completed 3 0ms ok 0
smoke-one-step completed 6 0ms ok 0
hook-at-step-started completed 12 0ms ok 0
hook-at-step-completed completed 12 0ms ok 0
hook-at-hook-created completed 12 0ms ok 0
deadline-hook-wins completed 7 1.0h ok 0
deadline-expires completed 7 1.0h ok 0
long-sleep completed 11 30.0d ok 0
hook-never-arrives stalled 3 0ms skipped 0
step-retries-twice completed 10 2.0s ok 0
parallel-steps completed 9 0ms ok 0
hook-on-execution-state completed 12 0ms ok 0
peek-hook-before-branch completed 12 0ms ok 0
peek-hook-after-branch completed 12 0ms ok 0
peek-hook-at-registration completed 12 0ms ok 0
race-hook-before-probe completed 12 0ms ok 0
race-hook-after-probe completed 12 0ms ok 0
race-duplicate-delivery completed 13 0ms ok 0
attr-hook-before-step completed 11 0ms ok 0
attr-hook-after-step completed 11 0ms ok 0
attr-from-step-body completed 13 0ms ok 0
fork-hook-after-timeout completed 14 1.0m ok 0
fork-hook-before-timeout completed 14 1.0m ok 0
count-hook-after-timeout completed 17 1.0m ok 0
count-hook-before-timeout completed 20 1.0m ok 0
stale-read-step-count-fork completed 20 1.0m ok 0
stale-read-equal-step-counts completed 14 1.0m ok 0
step-vs-step-fork completed 12 0ms ok 0
step-vs-step-fork-fenced completed 12 0ms ok 0
fence-catches-benign-direction completed 12 5ms ok 0
in-flight-before-decision completed 17 1.0m ok 0
in-flight-before-decision-counted completed 17 1.0m ok 0
in-flight-after-decision completed 19 2.0m ok 0
stale-read-step-count-fork-fenced completed 20 1.0m ok 0
fork-hook-wins completed 13 1.0m ok 0
fork-timeout-wins completed 13 1.0m ok 0
unclaimed-payload-under-fork completed 17 1.0m ok 0
claimed-payload-under-fork completed 17 1.0m ok 0
writers-independent-step-bodies completed 12 0ms ok 0
writers-scripted-tempo completed 12 0ms ok 0
cancel-mid-step cancelled 7 0ms skipped 0

Full trace: world-sim.txt

Copilot AI left a comment

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.

🟡 Changes recommended

The new subscribeInbox helper (and its cookbook snippet) can hang in wait() when the source iterable ends normally, and the cookbook index link path is inconsistent with existing cookbook links.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds stress-test coverage for two common “hook inbox” patterns used by agent-style workflows (background subscribers and merged inboxes), and documents the patterns as a new v5 cookbook recipe.

Changes:

  • Add new e2e workflows demonstrating background hook subscribers, drain/wait inbox loops, and merged async-iterator inboxes (including dynamic hook addition mid-run).
  • Add a new hook inbox patterns e2e test suite that validates determinism via event-log ordering and asserts expected event counts.
  • Add a v5-only cookbook recipe entry and page documenting the patterns, plus a Changeset for @workflow/core.
File summaries
File Description
workbench/example/workflows/99_e2e.ts Adds new workflows and helpers implementing background inbox + merged-hook inbox patterns for e2e.
packages/core/e2e/e2e.test.ts Adds an e2e suite that stresses and validates inbox determinism and event-log integrity under load.
docs/lib/cookbook-tree.ts Registers the new cookbook recipe slug in the cookbook navigation data.
docs/content/docs/v5/cookbook/index.mdx Adds the new recipe to the cookbook index list.
docs/content/docs/v5/cookbook/agent-patterns/meta.json Adds hook-inbox to the agent-patterns page list.
docs/content/docs/v5/cookbook/agent-patterns/hook-inbox.mdx Introduces the new “Hook Inbox & Steering” recipe (v5-only).
.changeset/hook-inbox-e2e.md Declares a patch bump for @workflow/core for the added e2e coverage.
Review details
  • Files reviewed: 7/7 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +4080 to +4090
const done = (async () => {
for await (const value of source) {
if (isEnd(value)) {
ended = true;
bump();
break;
}
buffered.push(value);
bump();
}
})();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch, fixed in 1b6cd3a: the subscriber now sets ended and wakes waiters in a finally, so wait() unblocks whether the source hit the end marker, completed on its own, or threw. Same fix applied to the cookbook snippet, which now lives on the new Background Hook Subscriber page.

Comment on lines +218 to +228
const done = (async () => {
for await (const value of source) {
if (isEnd(value)) {
ended = true;
bump();
break;
}
buffered.push(value);
bump();
}
})();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch, fixed in 1b6cd3a: the subscriber now sets ended and wakes waiters in a finally, so wait() unblocks whether the source hit the end marker, completed on its own, or threw. Same fix applied to the cookbook snippet, which now lives on the new Background Hook Subscriber page.

Comment thread docs/content/docs/v5/cookbook/index.mdx Outdated
Comment on lines +11 to +14
- [**WorkflowAgent**](/cookbook/agent-patterns/durable-agent): Build durable, resumable AI agents with AI SDK's WorkflowAgent
- [**Human-in-the-Loop**](/cookbook/agent-patterns/human-in-the-loop): Pause an agent for human approval, then resume based on the decision
- [**Agent Cancellation**](/cookbook/agent-patterns/agent-cancellation): Stop a running agent immediately via `run.cancel()` or gracefully via a hook + `Promise.race`
- [**Hook Inbox & Steering**](/docs/cookbook/agent-patterns/hook-inbox): Buffer hook payloads in a background subscriber to steer an agent loop, and merge several hooks into one ordered inbox

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Deliberate, and the docs link lint requires it. In docs/lib/geistdocs/source.ts the current docs version is v4, so a bare /cookbook/... href resolves to the v4 cookbook, where this v5-only page does not exist (it is registered with skipVersions: ["v4"]). /docs/cookbook/... is rewritten at render time to /v5/cookbook/... on v5 pages (rewriteLocalDocsUrlForVersion), which is the page that exists. With the bare prefix bun docs/scripts/lint.ts reports the link as not-found; with this prefix it passes. The other entries can use the bare prefix because those recipes exist in both versions.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor
Framework Flow route Step reg. Framework output
hono 203.5 KiB (+1.9 KiB) 41.4 KiB (+651 B) 1.78 MiB (+6.0 KiB)
nextjs-turbopack 208.9 KiB (+1.9 KiB) 439 B (±0) 771.4 KiB (+2.6 KiB)
About these numbers

Sizes are gzip; parentheses show the change against main.
Flow route and Step reg. gate this job, on raw bytes rather than the gzip shown, at max(2%, 50.0 KiB). Framework output is informational.

bff32ad · run

…ding the wait loop

On every Vercel lane the early-return test failed with HookNotFoundError:
each resume is slow enough there that the run finished its four turns and
`using` disposed the hook while the test was still sending. The workflow
now takes a `minMessages` floor and keeps turning until its subscriber has
seen that many payloads, which is as replay-safe as reading the inbox.

The drain-then-wait loop checked `ended` before draining, so payloads pushed
between the last drain and the end marker were left over; it cost one retry
on some Vercel lanes. The workflow and the cookbook example now drain first.
The dynamic-inbox test's thread-hook lookup also gets the 120s budget the
event waits use, since it depends on a step completing first.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`// @setup` marks type-check-only declarations in docs code samples (#846),
originally hidden client-side by a custom CodeBlock that the geistdocs
migration (#2222) dropped, so every marked line has rendered since. A remark
plugin now removes them once at build time, whole multi-line declarations
included, covering the rendered page and the processed-markdown exports.

The Background Hook Subscriber recipe gains the hand-off ending: when the
loop exits on its own, release the hook, commit the release with a step,
drain once more, and start a successor run with anything left. The new
`handoffInboxWorkflow` e2e test drives it with a sender that runs until the
parent completes and follows the successor chain.

That test found a runtime gap the pattern cannot close: `resumeHook` is
accepted until `hook_disposed` commits at the next suspension, but
`hook.dispose()` stops the in-memory iterator immediately, so a payload that
lands in between is buffered with no consumer and lost (2 of 7 postgres runs,
3 of 13 world-local runs, always exactly one payload sitting between the last
turn's `step_completed` and `hook_disposed`). The test asserts today's
guarantee and bounds the loss by counting those log positions; the docs say
so in a callout. Closing it means `dispose()` keeping delivery of payloads
that precede the disposal event, which changes its documented semantics and
is left as a proposal.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
pranaygp and others added 3 commits September 4, 2026 14:45
…gence

On Vercel the return value is polled every 5s, so the sender outlives the
parent and the successor hands off again; the test now follows the chain
instead of asserting two generations. The lanes also showed the disposal
window from the other side: the parent returned late=[2,3,4] while its
successor was started with [2,3], because the successor's arguments were
recorded on the live retained-VM run and the return value came from a fresh
replay that did deliver the window payload. The test asserts the carried set
is a prefix of the parent's late and bounds the excess, like the drops, by
the window payloads in each generation's log. The docs callout says late is
not an exact record of what the successor received until dispose() keeps
delivering pre-disposal payloads.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…engines

`resumeHook` is accepted until `hook_disposed` commits at the run's next
suspension, but `hook.dispose()` stopped the in-memory iterator immediately.
A payload landing in between sat in the log ahead of the disposal with no
consumer left to claim it: lost on the retained-VM path, delivered by a fresh
replay, so the workflow's view was replay-inconsistent too. The hand-off e2e
test hit both (2/7 postgres, 3/13 world-local runs; `late=[2,3,4]` returned
against a successor started with `[2,3]` on Vercel).

Disposal is now the durable event it always was on the world side. After
`dispose()`, awaiters and the `for await` iterator keep receiving payloads
that precede `hook_disposed`, and iteration ends when that event is
observed. node:vm: iterator waiters are tracked with their payload resolvers
so the disposal event ends only the idle ones (a waiter already receiving a
payload ends on its next pull), settled through promiseQueue for log order;
`disposeHook` no longer drops awaiters or schedules a suspension, since a
waiter parked at end of log already does. QuickJS: the host marks the hook
and resolves a parked iterator with a sentinel when it processes
`hook_disposed`; `next()` returns done only once the buffer is drained and
the flag is set, and a plain await stays pending on the sentinel.

Unit test pins the shape; the hand-off e2e test asserts zero loss and
`late == carried` again and logs how many payloads fell in the window.
dispose() docs updated in the JSDoc, API reference, foundations page, and
the cookbook recipe.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e; add ordering stress tests

Two new e2e tests probe the merged inbox where the round-robin test could
not: a seeded, bursty cross-hook send order (A,A,A,B,C,C,A,...) delivered
while each merged item costs a 400 ms step, so payloads buffer across hooks
and a replay must order them at claim time, plus a hook that only ever
receives its done and another that closes early. Both compare the replay's
merge order with the arguments the live run recorded per step.

They failed against the Promise.race helper: replay-deterministic, but
draining one hook at a time. Two causes, both in the helper. A race over
already-settled promises picks by source order, and pulling a source only
when its item is consumed means a payload buffered for hook A cannot be
ordered against hook B's until A's previous item is yielded, which degrades
to round-robin. The helper now records each source's next() result in a
FIFO as it resolves and keeps exactly one next() outstanding per live
source, so the runtime's delivery barriers, which resolve pending hook
awaits in log order, define the merged order. Same change in the cookbook,
with the reasoning.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.

2 participants