Skip to content

Add workflow observability event reporting#2868

Draft
JohnPhamous wants to merge 2 commits into
mainfrom
johnphamous/eve-agent-runs-observability-world
Draft

Add workflow observability event reporting#2868
JohnPhamous wants to merge 2 commits into
mainfrom
johnphamous/eve-agent-runs-observability-world

Conversation

@JohnPhamous

@JohnPhamous JohnPhamous commented Jul 9, 2026

Copy link
Copy Markdown
  • Why: Vercel needs typed issue-source events before Workflow serializes or encrypts stream chunks.
  • What: adds an optional world observability reporter and a best-effort core helper frameworks can call during execution.
  • What: posts those events from the Vercel world without changing workflow execution or stream persistence.

Signed-off-by: John Pham <john.pham@vercel.com>
@vercel

vercel Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

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

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

@changeset-bot

changeset-bot Bot commented Jul 9, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 14b9bb1

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

This PR includes changesets to release 20 packages
Name Type
@workflow/core Patch
@workflow/world Patch
@workflow/world-vercel 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/world-local Patch
@workflow/world-postgres Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/nuxt Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite 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 Jul 9, 2026

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ ▲ Vercel Production 1364 89 230 1683
✅ 💻 Local Development 1617 0 219 1836
✅ 📦 Local Production 1617 0 219 1836
✅ 🐘 Local Postgres 1617 0 219 1836
✅ 🪟 Windows 153 0 0 153
❌ 📋 Other 887 7 177 1071
Total 7255 96 1064 8415

❌ Failed Tests

▲ Vercel Production (89 failed)

astro (11 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KX4KJXBXYKSJC0JRQR1XG28E | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KX4KKANEA0X849TN59MJE61R | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KX4KKH253E4V75RRST699BN8 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KX4KKPV1XHX85Q4C18V1HE1Y | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KX4KKX43X52BHJ98DJRVS9TW | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KX4KM2ZVVCDZ73XRTTWDAXYJ | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KX4KM93634XQVRQJ1PV4CMHQ | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KX4KMKZ770PEQXCNKTCN7J6R | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KX4KN8ZDBH9YADMFVCYXEE0D | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KX4KNX9AKQ6EKKBHRQYB114S | 🔍 observability

example (15 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KX4KJXBXYKSJC0JRQR1XG28E | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KX4KKANEA0X849TN59MJE61R | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KX4KKH253E4V75RRST699BN8 | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KX4KKX43X52BHJ98DJRVS9TW | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KX4KM2ZVVCDZ73XRTTWDAXYJ | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KX4KM93634XQVRQJ1PV4CMHQ | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KX4KMKZ770PEQXCNKTCN7J6R | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KX4KMVFFNNSGEH7S42HBPR7P | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KX4KMXR9EE10Z9JVPT0XRKPT | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KX4KN3W6ZFSKRM9TP8YGHV0A | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KX4KN8ZDBH9YADMFVCYXEE0D | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KX4KNH0AHDRR4Q18A5RHKGXM | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KX4KNX9AKQ6EKKBHRQYB114S | 🔍 observability
  • sleepWithSequentialStepsWorkflow - sequential steps work with concurrent sleep (control) | wrun_01KX4KPG5XZHEQ7TDFQ4WDC8Y9 | 🔍 observability

express (9 failed):

  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KX4KM93634XQVRQJ1PV4CMHQ | 🔍 observability
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KX4KMKZ770PEQXCNKTCN7J6R | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KX4KMVFFNNSGEH7S42HBPR7P | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KX4KMXR9EE10Z9JVPT0XRKPT | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KX4KN3W6ZFSKRM9TP8YGHV0A | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KX4KN8ZDBH9YADMFVCYXEE0D | 🔍 observability
  • hookWithSleepWorkflow - hook payloads delivered correctly with concurrent sleep | wrun_01KX4KNH0AHDRR4Q18A5RHKGXM | 🔍 observability
  • hookWithSleepFinalStepWorkflow - step only on final payload | wrun_01KX4KNX9AKQ6EKKBHRQYB114S | 🔍 observability

fastify (2 failed):

  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KX4KJJXNJZ2CGTPWT16VHC38 | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KX4KKX43X52BHJ98DJRVS9TW | 🔍 observability

hono (9 failed):

  • promiseAnyWorkflow | wrun_01KX4K47TM29KK6TXGRJ7BE75C | 🔍 observability
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_01KX4KHKK31A028QHT7SZRD7CG | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KX4KJ012HFFBSR6G3HZQMR0E | 🔍 observability
  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KX4KJGASHA45S6S2BM3A80G1 | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KX4KJJXNJZ2CGTPWT16VHC38 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KX4KJPQ88ZECRBJT5DP6E1HT | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KX4KJV40WREHH5J5CYHAKV3S | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KX4KJXBXYKSJC0JRQR1XG28E | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KX4KKANEA0X849TN59MJE61R | 🔍 observability

nextjs-turbopack (6 failed):

  • hookClaimOnlyMutexWorkflow - hook works as a pure run mutex without payload data | wrun_01KX4KG2A1ZSAN8TXZX5JJ02CJ | 🔍 observability
  • hookAdoptOwnerResultWorkflow - duplicate adopts the owner result via conflict.returnValue | wrun_01KX4KG5T0CSKXFTCKDCSDNQ9G | 🔍 observability
  • hookSignalOwnerWorkflow - duplicate forwards its payload to the owner via resumeHook | wrun_01KX4KGBEYFYXKENZE5BF9NNGN | 🔍 observability
  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KX4KGFCKZ35D0XQ3QJ76B6N7 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KX4KH3G4REDYEHGMFAVCDA6X | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KX4KJ012HFFBSR6G3HZQMR0E | 🔍 observability

nextjs-webpack (12 failed):

  • hookSupersedeOwnerWorkflow - duplicate cancels the owner and claims the released token | wrun_01KX4KGFCKZ35D0XQ3QJ76B6N7 | 🔍 observability
  • resume-or-start route pattern - resumeHook retried after start() reaches the new run | wrun_01KX4KGRCKH8G4C2KYMFDXB761 | 🔍 observability
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running | wrun_01KX4KH3G4REDYEHGMFAVCDA6X | 🔍 observability
  • hookTokenReuseLoopWorkflow - same run recreates a hook with the same token after dispose() | wrun_01KX4KHKK31A028QHT7SZRD7CG | 🔍 observability
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars) | wrun_01KX4KJ012HFFBSR6G3HZQMR0E | 🔍 observability
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument | wrun_01KX4KJAC3K3DMK1F20GWWSCV5 | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KX4KJJXNJZ2CGTPWT16VHC38 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KX4KJPQ88ZECRBJT5DP6E1HT | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KX4KJV40WREHH5J5CYHAKV3S | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KX4KM2ZVVCDZ73XRTTWDAXYJ | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KX4KM93634XQVRQJ1PV4CMHQ | 🔍 observability

nitro (11 failed):

  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KX4KKANEA0X849TN59MJE61R | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KX4KKH253E4V75RRST699BN8 | 🔍 observability
  • AllInOneService.processNumber - static workflow method using sibling static step methods | wrun_01KX4KKPV1XHX85Q4C18V1HE1Y | 🔍 observability
  • ChainableService.processWithThis - static step methods using this to reference the class | wrun_01KX4KKX43X52BHJ98DJRVS9TW | 🔍 observability
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KX4KM2ZVVCDZ73XRTTWDAXYJ | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9 | 🔍 observability
  • instanceMethodStepWorkflow - instance methods with "use step" directive | wrun_01KX4KM93634XQVRQJ1PV4CMHQ | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KX4KMVFFNNSGEH7S42HBPR7P | 🔍 observability
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument | wrun_01KX4KMXR9EE10Z9JVPT0XRKPT | 🔍 observability
  • cancelRun - cancelling a running workflow | wrun_01KX4KN3W6ZFSKRM9TP8YGHV0A | 🔍 observability
  • cancelRun via CLI - cancelling a running workflow | wrun_01KX4KN8ZDBH9YADMFVCYXEE0D | 🔍 observability

nuxt (5 failed):

  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KX4KJPQ88ZECRBJT5DP6E1HT | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KX4KJV40WREHH5J5CYHAKV3S | 🔍 observability
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KX4KJXBXYKSJC0JRQR1XG28E | 🔍 observability
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KX4KKANEA0X849TN59MJE61R | 🔍 observability
  • errorSubclassRoundTripWorkflow - first-class Error subclasses survive every serialization boundary | wrun_01KX4KMVFFNNSGEH7S42HBPR7P | 🔍 observability

sveltekit (5 failed):

  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KX4KJGASHA45S6S2BM3A80G1 | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KX4KJJXNJZ2CGTPWT16VHC38 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KX4KJPQ88ZECRBJT5DP6E1HT | 🔍 observability
  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KX4KJV40WREHH5J5CYHAKV3S | 🔍 observability
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KX4KKH253E4V75RRST699BN8 | 🔍 observability

vite (4 failed):

  • closureVariableWorkflow - nested step functions with closure variables | wrun_01KX4KJGASHA45S6S2BM3A80G1 | 🔍 observability
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step | wrun_01KX4KJJXNJZ2CGTPWT16VHC38 | 🔍 observability
  • runClassSerializationWorkflow - Run instances serialize across workflow/step boundaries | wrun_01KX4KJPQ88ZECRBJT5DP6E1HT | 🔍 observability
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9 | 🔍 observability
📋 Other (7 failed)

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

  • startFromWorkflow - calling start() directly inside a workflow function with hook communication | wrun_01KX4KJV40WREHH5J5CYHAKV3S
  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KX4KJXBXYKSJC0JRQR1XG28E
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly | wrun_01KX4KKANEA0X849TN59MJE61R
  • Calculator.calculate - static workflow method using static step methods from another class | wrun_01KX4KKH253E4V75RRST699BN8
  • thisSerializationWorkflow - step function invoked with .call() and .apply() | wrun_01KX4KM2ZVVCDZ73XRTTWDAXYJ
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE | wrun_01KX4KKJN34D0GNQ81D75SYED9
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context | wrun_01KX4KMKZ770PEQXCNKTCN7J6R

Details by Category

❌ ▲ Vercel Production
App Passed Failed Skipped
❌ astro 115 11 27
❌ example 111 15 27
❌ express 117 9 27
❌ fastify 124 2 27
❌ hono 117 9 27
❌ nextjs-turbopack 144 6 3
❌ nextjs-webpack 138 12 3
❌ nitro 115 11 27
❌ nuxt 121 5 27
❌ sveltekit 140 5 8
❌ vite 122 4 27
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 128 0 25
✅ express-stable 128 0 25
✅ fastify-stable 128 0 25
✅ hono-stable 128 0 25
✅ nextjs-turbopack-canary 134 0 19
✅ nextjs-turbopack-stable 153 0 0
✅ nextjs-webpack-canary 134 0 19
✅ nextjs-webpack-stable 153 0 0
✅ nitro-stable 128 0 25
✅ nuxt-stable 128 0 25
✅ sveltekit-stable 147 0 6
✅ vite-stable 128 0 25
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 128 0 25
✅ express-stable 128 0 25
✅ fastify-stable 128 0 25
✅ hono-stable 128 0 25
✅ nextjs-turbopack-canary 134 0 19
✅ nextjs-turbopack-stable 153 0 0
✅ nextjs-webpack-canary 134 0 19
✅ nextjs-webpack-stable 153 0 0
✅ nitro-stable 128 0 25
✅ nuxt-stable 128 0 25
✅ sveltekit-stable 147 0 6
✅ vite-stable 128 0 25
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 128 0 25
✅ express-stable 128 0 25
✅ fastify-stable 128 0 25
✅ hono-stable 128 0 25
✅ nextjs-turbopack-canary 134 0 19
✅ nextjs-turbopack-stable 153 0 0
✅ nextjs-webpack-canary 134 0 19
✅ nextjs-webpack-stable 153 0 0
✅ nitro-stable 128 0 25
✅ nuxt-stable 128 0 25
✅ sveltekit-stable 147 0 6
✅ vite-stable 128 0 25
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 153 0 0
❌ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 128 0 25
✅ e2e-local-dev-tanstack-start- 128 0 25
✅ e2e-local-postgres-nest-stable 128 0 25
✅ e2e-local-postgres-tanstack-start- 128 0 25
✅ e2e-local-prod-nest-stable 128 0 25
✅ e2e-local-prod-tanstack-start- 128 0 25
❌ e2e-vercel-prod-tanstack-start 119 7 27

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

📊 Workflow Benchmarks

commit fa3ca70 · Thu, 09 Jul 2026 23:41:23 GMT · run logs

Backend: vercel · app: nextjs-turbopack

Metric Scenario Avg (ms) P75 (ms) P90 (ms) P99 (ms) Samples
TTFS stream 1396 (+25%) 1674 🔴 1714 🔴 1918 🔴 30
TTFS hook + stream 1440 (+12%) 1870 🔴 1924 🔴 2115 🔴 30
STSO 1020 steps (1-20) 318 (+17%) 309 🔴 610 🔴 933 🔴 19
STSO 1020 steps (101-120) 398 (-3.2%) 442 🔴 489 🔴 493 🔴 19
STSO 1020 steps (1001-1020) 972 (+11%) 905 🔴 1183 🔴 3489 🔴 19
WO stream 1396 (+25%) 1674 1714 1918 30
WO hook + stream 1440 (+12%) 1870 1924 2115 30
SL stream 4553 (-2.6%) 5024 🔴 5763 🔴 5973 🔴 30
SL hook + stream 5121 (+1.8%) 5609 🔴 5773 🔴 5893 🔴 30

Avg deltas compare against the most recent benchmark run on main at the time of this run.

Metrics — TTFS: time to first step body execution · STSO: step-to-step overhead (gap between consecutive step bodies) · WO: workflow overhead (time outside step bodies, client start → last step body exit) · SL: stream latency (first chunk write → visible to the reader)

Scenarios — stream: one step that streams chunks back to the client; no hooks, so the run stays in turbo mode · hook + stream: registers a hook before the same streaming step, which exits turbo mode · 1020 steps: 1020 trivial sequential steps; STSO is measured between consecutive steps in the given step ranges

🟢/🔴 mark percentiles within/above target. Targets (p75/p90/p99, ms) — TTFS 200/300/600 · SL 50/60/125 · STSO (1-20) 20/30/60 · STSO (101-120) 30/45/90 · STSO (1001-1020) 40/60/120

TTFS/WO compare client vs deployment clocks and SL compares the step runner’s clock vs the client’s (NTP-synced in CI). WO ends at the last step body exit, the closest observable proxy for the final step-completion request.

@vercel vercel Bot 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.

Additional Suggestion:

experimental_reportObservabilityEvent is exported from index.ts but missing from the workflow/index.ts entrypoint, causing an unresolved named import (bundle failure) for files mixing use step and use workflow functions.

Fix on Vercel

Signed-off-by: John Pham <john.pham@vercel.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.

1 participant