Skip to content

[core] Surface workflowCoreVersion from healthCheck() result#1854

Open
TooTallNate wants to merge 4 commits intomainfrom
nate/healthcheck-coreversion
Open

[core] Surface workflowCoreVersion from healthCheck() result#1854
TooTallNate wants to merge 4 commits intomainfrom
nate/healthcheck-coreversion

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

Summary

Surface the responding deployment's @workflow/core version on the HealthCheckResult returned by healthCheck(). The field is already advertised on the wire by handleHealthCheckMessage (helpers.ts:109) but was dropped at the parse step.

This unlocks pre-flight capability detection for cross-deployment scenarios, where the caller needs to know what a target deployment supports before sending it work — e.g. version-gated decisions via getRunCapabilities().

Diff

export interface HealthCheckResult {
  healthy: boolean;
  error?: string;
  latencyMs?: number;
  specVersion?: number;
+ workflowCoreVersion?: string;
}

parseHealthCheckResponse now extracts the field if it's a string, drops it otherwise. healthCheck() propagates it onto the result.

Backwards compatibility

  • Older deployments with plain-text responses (specVersion < 3) yield { healthy: true } with no version metadata, same as before.
  • Older deployments with JSON responses but no workflowCoreVersion field continue to return { healthy, specVersion? }; the field is simply omitted.
  • Defensive type check rejects non-string values rather than passing them through as garbage.

Tests

  • Unit (helpers.test.ts, 4 new): version present / missing / wrong-type / plain-text legacy response, via a small in-memory mock world that simulates handleHealthCheckMessage writing the response onto a stream.
  • E2E (e2e.test.ts): the existing health check test now asserts typeof workflowResult.workflowCoreVersion === 'string' against the deployed app, so the end-to-end wire propagation is verified.

All 595 core unit tests pass.

Related

PR #1853 (byte-stream framing) builds on this — the cross-deployment start() probe needs workflowCoreVersion to derive whether the target deployment can decode framed byte streams. That PR will be rebased onto this one once it lands.

🤖 Generated with Claude Code

The responding deployment already advertises its `@workflow/core` version
on the wire via `handleHealthCheckMessage` (`helpers.ts:109`), but it was
dropped at the parsing step. Surface it on `HealthCheckResult` so
callers can derive capability metadata about a target deployment before
sending it work — for example, version-gated decisions via
`getRunCapabilities()`.

Backwards compatible:

- Older deployments with plain-text health responses (specVersion < 3)
  yield `{ healthy: true }` with no version metadata, as before.
- Older deployments with JSON responses but no `workflowCoreVersion`
  field continue to return `{ healthy, specVersion? }`; the field is
  simply omitted from the result.
- Defensive type check rejects non-string values rather than passing
  them through as garbage.

Tests cover all four cases (workflowCoreVersion present, missing,
wrong type, plain-text legacy response) via a small in-memory mock
world plus a new e2e assertion.
Copilot AI review requested due to automatic review settings April 25, 2026 07:30
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 25, 2026

🦋 Changeset detected

Latest commit: 415fd16

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

This PR includes changesets to release 17 packages
Name Type
@workflow/core Minor
workflow Minor
@workflow/builders Patch
@workflow/cli Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/vitest Patch
@workflow/web-shared Patch
@workflow/web Patch
@workflow/world-testing Patch
@workflow/ai Major
@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

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 25, 2026

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

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Apr 27, 2026 4:49pm
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 27, 2026 4:49pm
example-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-astro-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-express-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-fastify-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-hono-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-nitro-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workbench-vite-workflow Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workflow-docs Ready Ready Preview, Comment, Open in v0 Apr 27, 2026 4:49pm
workflow-swc-playground Ready Ready Preview, Comment Apr 27, 2026 4:49pm
workflow-web Ready Ready Preview, Comment Apr 27, 2026 4:49pm

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
❌ 💻 Local Development 1052 2 86 1140
✅ 📦 Local Production 1054 0 86 1140
❌ 🐘 Local Postgres 1052 2 86 1140
✅ 📋 Other 267 0 18 285
Total 3425 4 276 3705

❌ Failed Tests

💻 Local Development (2 failed)

vite-stable (2 failed):

  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
🐘 Local Postgres (2 failed)

astro-stable (2 failed):

  • fibonacciWorkflow - recursive workflow composition via start()
  • health check (queue-based) - workflow and step endpoints respond to health check messages

Details by Category

❌ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 89 0 6
✅ express-stable 89 0 6
✅ fastify-stable 89 0 6
✅ hono-stable 89 0 6
✅ nextjs-turbopack-canary 76 0 19
✅ nextjs-turbopack-stable 95 0 0
✅ nextjs-webpack-canary 76 0 19
✅ nextjs-webpack-stable 95 0 0
✅ nitro-stable 89 0 6
✅ nuxt-stable 89 0 6
✅ sveltekit-stable 89 0 6
❌ vite-stable 87 2 6
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 89 0 6
✅ express-stable 89 0 6
✅ fastify-stable 89 0 6
✅ hono-stable 89 0 6
✅ nextjs-turbopack-canary 76 0 19
✅ nextjs-turbopack-stable 95 0 0
✅ nextjs-webpack-canary 76 0 19
✅ nextjs-webpack-stable 95 0 0
✅ nitro-stable 89 0 6
✅ nuxt-stable 89 0 6
✅ sveltekit-stable 89 0 6
✅ vite-stable 89 0 6
❌ 🐘 Local Postgres
App Passed Failed Skipped
❌ astro-stable 87 2 6
✅ express-stable 89 0 6
✅ fastify-stable 89 0 6
✅ hono-stable 89 0 6
✅ nextjs-turbopack-canary 76 0 19
✅ nextjs-turbopack-stable 95 0 0
✅ nextjs-webpack-canary 76 0 19
✅ nextjs-webpack-stable 95 0 0
✅ nitro-stable 89 0 6
✅ nuxt-stable 89 0 6
✅ sveltekit-stable 89 0 6
✅ vite-stable 89 0 6
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 89 0 6
✅ e2e-local-postgres-nest-stable 89 0 6
✅ e2e-local-prod-nest-stable 89 0 6

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

📊 Benchmark Results

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.037s 1.007s 0.970s 10 1.00x
💻 Local Nitro 0.043s 1.005s 0.962s 10 1.16x
🐘 Postgres Express 0.046s 1.009s 0.963s 10 1.23x
💻 Local Next.js (Turbopack) 0.048s 1.005s 0.958s 10 1.27x
🐘 Postgres Nitro 0.065s 1.012s 0.947s 10 1.74x
🐘 Postgres Next.js (Turbopack) 0.072s 1.017s 0.945s 10 1.94x
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.104s 2.005s 0.901s 10 1.00x
🐘 Postgres Express 1.111s 2.008s 0.897s 10 1.01x
💻 Local Next.js (Turbopack) 1.122s 2.005s 0.883s 10 1.02x
💻 Local Nitro 1.128s 2.005s 0.877s 10 1.02x
🐘 Postgres Nitro 1.165s 2.013s 0.848s 10 1.06x
🐘 Postgres Next.js (Turbopack) 1.276s 2.030s 0.754s 10 1.16x
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 10.627s 11.016s 0.389s 3 1.00x
💻 Local Express 10.760s 11.021s 0.261s 3 1.01x
💻 Local Next.js (Turbopack) 10.810s 11.026s 0.216s 3 1.02x
🐘 Postgres Nitro 10.905s 11.022s 0.117s 3 1.03x
💻 Local Nitro 10.943s 11.024s 0.081s 3 1.03x
🐘 Postgres Next.js (Turbopack) 11.668s 12.368s 0.700s 3 1.10x
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.977s 14.222s 0.245s 5 1.00x
💻 Local Express 14.457s 15.028s 0.570s 4 1.03x
🐘 Postgres Nitro 14.525s 15.020s 0.494s 4 1.04x
💻 Local Next.js (Turbopack) 14.699s 15.030s 0.331s 4 1.05x
💻 Local Nitro 15.046s 15.530s 0.484s 4 1.08x
🐘 Postgres Next.js (Turbopack) 16.518s 17.075s 0.557s 4 1.18x
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 12.884s 13.022s 0.138s 7 1.00x
🐘 Postgres Nitro 14.244s 15.026s 0.782s 6 1.11x
💻 Local Express 15.081s 15.694s 0.612s 6 1.17x
🐘 Postgres Next.js (Turbopack) 16.073s 16.562s 0.489s 6 1.25x
💻 Local Next.js (Turbopack) 16.401s 17.032s 0.631s 6 1.27x
💻 Local Nitro 16.849s 17.199s 0.350s 6 1.31x
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.199s 2.009s 0.809s 15 1.00x
🐘 Postgres Nitro 1.276s 2.008s 0.732s 15 1.06x
💻 Local Express 1.410s 2.005s 0.595s 15 1.18x
🐘 Postgres Next.js (Turbopack) 1.473s 2.075s 0.602s 15 1.23x
💻 Local Nitro 1.520s 2.005s 0.485s 15 1.27x
💻 Local Next.js (Turbopack) 1.530s 2.006s 0.477s 15 1.28x
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.281s 3.010s 0.729s 10 1.00x
🐘 Postgres Nitro 2.361s 3.010s 0.649s 10 1.04x
💻 Local Express 2.592s 3.107s 0.515s 10 1.14x
🐘 Postgres Next.js (Turbopack) 2.701s 3.034s 0.333s 10 1.18x
💻 Local Next.js (Turbopack) 3.039s 3.453s 0.414s 9 1.33x
💻 Local Nitro 3.167s 4.011s 0.844s 8 1.39x
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.404s 4.011s 0.606s 8 1.00x
🐘 Postgres Nitro 3.469s 4.011s 0.543s 8 1.02x
🐘 Postgres Next.js (Turbopack) 4.338s 4.825s 0.487s 7 1.27x
💻 Local Express 6.304s 7.015s 0.711s 5 1.85x
💻 Local Next.js (Turbopack) 7.851s 8.519s 0.668s 4 2.31x
💻 Local Nitro 8.360s 9.022s 0.662s 4 2.46x
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.198s 2.007s 0.809s 15 1.00x
🐘 Postgres Nitro 1.245s 2.009s 0.764s 15 1.04x
💻 Local Express 1.424s 2.006s 0.582s 15 1.19x
💻 Local Next.js (Turbopack) 1.546s 2.006s 0.460s 15 1.29x
💻 Local Nitro 1.574s 2.074s 0.500s 15 1.31x
🐘 Postgres Next.js (Turbopack) 1.653s 2.274s 0.621s 14 1.38x
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.270s 3.010s 0.740s 10 1.00x
🐘 Postgres Nitro 2.319s 3.009s 0.690s 10 1.02x
💻 Local Express 2.553s 3.010s 0.457s 10 1.12x
🐘 Postgres Next.js (Turbopack) 2.794s 3.230s 0.436s 10 1.23x
💻 Local Next.js (Turbopack) 2.827s 3.453s 0.627s 9 1.25x
💻 Local Nitro 2.928s 3.760s 0.832s 8 1.29x
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.413s 4.009s 0.596s 8 1.00x
🐘 Postgres Nitro 3.452s 4.011s 0.559s 8 1.01x
🐘 Postgres Next.js (Turbopack) 4.309s 4.759s 0.450s 7 1.26x
💻 Local Express 6.865s 7.515s 0.650s 4 2.01x
💻 Local Next.js (Turbopack) 8.390s 9.020s 0.630s 4 2.46x
💻 Local Nitro 8.585s 9.272s 0.687s 4 2.52x
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.602s 1.006s 0.404s 60 1.00x
🐘 Postgres Nitro 0.820s 1.006s 0.186s 60 1.36x
💻 Local Express 0.829s 1.021s 0.192s 59 1.38x
💻 Local Next.js (Turbopack) 0.884s 1.076s 0.191s 56 1.47x
💻 Local Nitro 0.997s 1.361s 0.364s 45 1.66x
🐘 Postgres Next.js (Turbopack) 1.256s 1.769s 0.513s 35 2.09x
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.416s 2.007s 0.591s 45 1.00x
🐘 Postgres Nitro 1.920s 2.075s 0.155s 44 1.36x
💻 Local Express 2.542s 3.007s 0.465s 30 1.80x
💻 Local Next.js (Turbopack) 2.762s 3.074s 0.313s 30 1.95x
💻 Local Nitro 3.019s 3.649s 0.630s 25 2.13x
🐘 Postgres Next.js (Turbopack) 4.564s 5.113s 0.549s 18 3.22x
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.949s 3.192s 0.243s 38 1.00x
🐘 Postgres Nitro 3.999s 4.454s 0.456s 27 1.36x
🐘 Postgres Next.js (Turbopack) 4.582s 5.101s 0.518s 25 1.55x
💻 Local Express 7.555s 8.148s 0.593s 15 2.56x
💻 Local Next.js (Turbopack) 8.871s 9.090s 0.219s 14 3.01x
💻 Local Nitro 9.211s 10.019s 0.808s 12 3.12x
workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.219s 1.007s 0.788s 60 1.00x
🐘 Postgres Nitro 0.280s 1.007s 0.727s 60 1.28x
💻 Local Express 0.501s 1.004s 0.503s 60 2.29x
🐘 Postgres Next.js (Turbopack) 0.535s 1.107s 0.572s 55 2.44x
💻 Local Next.js (Turbopack) 0.557s 1.005s 0.448s 60 2.54x
💻 Local Nitro 0.617s 1.021s 0.404s 59 2.82x
workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.356s 1.006s 0.650s 90 1.00x
🐘 Postgres Nitro 0.485s 1.006s 0.521s 90 1.36x
🐘 Postgres Next.js (Turbopack) 0.805s 1.274s 0.468s 71 2.26x
💻 Local Express 2.020s 2.765s 0.745s 33 5.67x
💻 Local Nitro 2.549s 3.009s 0.461s 30 7.16x
💻 Local Next.js (Turbopack) 2.606s 3.010s 0.404s 30 7.32x
workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.559s 1.006s 0.447s 120 1.00x
🐘 Postgres Nitro 0.791s 1.007s 0.217s 120 1.41x
🐘 Postgres Next.js (Turbopack) 1.407s 1.985s 0.578s 61 2.52x
💻 Local Express 8.804s 9.419s 0.615s 13 15.75x
💻 Local Next.js (Turbopack) 10.794s 11.572s 0.778s 11 19.31x
💻 Local Nitro 11.255s 11.849s 0.594s 11 20.14x
Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.156s 1.000s 0.001s 1.010s 0.854s 10 1.00x
💻 Local Express 0.164s 1.004s 0.008s 1.013s 0.849s 10 1.05x
💻 Local Next.js (Turbopack) 0.174s 1.003s 0.012s 1.019s 0.845s 10 1.12x
💻 Local Nitro 0.216s 1.004s 0.013s 1.019s 0.803s 10 1.39x
🐘 Postgres Nitro 0.223s 0.995s 0.001s 1.010s 0.788s 10 1.43x
🐘 Postgres Next.js (Turbopack) 0.284s 1.000s 0.434s 1.455s 1.171s 10 1.83x
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.494s 1.006s 0.009s 1.025s 0.532s 59 1.00x
🐘 Postgres Nitro 0.617s 1.005s 0.004s 1.022s 0.405s 59 1.25x
💻 Local Next.js (Turbopack) 0.670s 1.012s 0.009s 1.023s 0.353s 59 1.36x
💻 Local Nitro 0.752s 1.013s 0.010s 1.024s 0.272s 59 1.52x
💻 Local Express 0.754s 1.011s 0.009s 1.115s 0.361s 54 1.53x
🐘 Postgres Next.js (Turbopack) 1.197s 1.729s 0.083s 1.849s 0.651s 33 2.43x
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.871s 1.034s 0.000s 1.045s 0.173s 58 1.00x
🐘 Postgres Nitro 0.937s 1.104s 0.000s 1.122s 0.186s 55 1.07x
💻 Local Express 1.097s 1.834s 0.000s 1.836s 0.739s 33 1.26x
💻 Local Nitro 1.247s 2.021s 0.000s 2.023s 0.776s 30 1.43x
💻 Local Next.js (Turbopack) 1.282s 2.020s 0.000s 2.023s 0.742s 30 1.47x
🐘 Postgres Next.js (Turbopack) 1.686s 2.183s 0.000s 2.225s 0.538s 27 1.94x
fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.671s 2.138s 0.000s 2.165s 0.494s 29 1.00x
🐘 Postgres Nitro 1.743s 2.143s 0.000s 2.164s 0.420s 28 1.04x
💻 Local Express 3.017s 3.617s 0.001s 3.619s 0.603s 17 1.81x
🐘 Postgres Next.js (Turbopack) 3.097s 3.660s 0.000s 3.695s 0.598s 17 1.85x
💻 Local Nitro 3.614s 4.167s 0.000s 4.170s 0.556s 15 2.16x
💻 Local Next.js (Turbopack) 3.829s 4.389s 0.000s 4.394s 0.564s 14 2.29x

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 20/21
🐘 Postgres Express 21/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 19/21
Next.js (Turbopack) 🐘 Postgres 11/21
Nitro 🐘 Postgres 18/21
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run


Some benchmark jobs failed:

  • Local: success
  • Postgres: success
  • Vercel: failure

Check the workflow run for details.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Surfaces the responding deployment’s @workflow/core version (workflowCoreVersion) on the HealthCheckResult returned by healthCheck(), enabling downstream capability detection (e.g., via getRunCapabilities()) in cross-deployment scenarios.

Changes:

  • Extend HealthCheckResult and parseHealthCheckResponse() to extract and propagate workflowCoreVersion when it is a string.
  • Add unit tests covering present/missing/wrong-type/legacy plain-text responses for health check parsing.
  • Strengthen e2e assertions to verify workflowCoreVersion is present on queue-based health checks.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
packages/core/src/runtime/helpers.ts Adds workflowCoreVersion to the public health check result and parses it from JSON responses.
packages/core/src/runtime/helpers.test.ts Adds focused unit tests for healthCheck() parsing behavior around workflowCoreVersion.
packages/core/e2e/e2e.test.ts Ensures e2e health checks assert workflowCoreVersion is present and a string.
.changeset/healthcheck-coreversion.md Publishes the API surface change as a patch for @workflow/core and workflow.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/core/src/runtime/helpers.ts Outdated
Comment thread packages/core/src/runtime/helpers.test.ts Outdated
Comment thread packages/core/src/runtime/helpers.test.ts Outdated
The JSDoc on HealthCheckResult.workflowCoreVersion and the test names
implied a specVersion < 3 → plain-text-response → no version-field
chain that doesn't actually hold. The field is omitted whenever the
responder doesn't provide it as a string, regardless of specVersion.
Reword the docs and test names accordingly.
Surfacing a new field on the public HealthCheckResult interface is an
additive API change, semver-minor rather than patch.
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