Commit Graph

370 Commits

Author SHA1 Message Date
Peter Wielander 187225fa64 Fix release target (#644) workflow@4.0.1-beta.33 2025-12-18 20:46:38 +01:00
Peter Wielander 2a3bbb79e8 Fix releasing as latest on npm, but not within changeset (#643) 2025-12-18 20:41:46 +01:00
Vercel Release Bot b4132d0895 Version Packages (beta) (#635) 2025-12-18 20:07:06 +01:00
Peter Wielander 28224fff13 Compile release note summaries using custom script in CI (#637) 2025-12-18 19:06:05 +01:00
Pranay Prakash ea2a67e19c perf: parallelize suspension handler for high-concurrency (#544)
The current implementation of suspension handler processes the invocation queue sequentially which is really slow. Now we process is in parallel:

- Process hooks first, then steps and waits in parallel to prevent race conditions
- Refactor runtime.ts into modular files: `suspension-handler.ts`, `step-handler.ts`, `helpers.ts`
- nit: Add otel attributes for hooks created (`workflow.hooks.created`) and waits created (`workflow.waits.created`)
- nit: Update suspension status from `pending_steps` to `workflow_suspended`
2025-12-17 18:43:09 -08:00
Adrian ab55ba2d61 fix: disable RSC dedupe request through world-vercel (#639)
* fix: add request header for world-vercel

* changeset
2025-12-17 15:43:10 -08:00
Peter Wielander 712f6f86b1 [worlds] [runtime] Change serialized stream ID gen from v4 UUIDs to ULIDs and fix stream list endpoint (#625) 2025-12-17 20:44:34 +01:00
Peter Wielander 4bdd3e5086 Move auth error messages into @workflow/errors package (#638) 2025-12-17 16:54:29 +01:00
Peter Wielander c6f33ee9d3 [web] Show event markers for step_started events (#636) 2025-12-17 10:35:09 +01:00
Nathan Rajlich c4402a12cc Reduce flaky idempotency test timeout on Windows (#581)
The `idempotency` test was running **110 concurrent steps** (10 + 100), with each step requiring multiple filesystem operations in the local world:

1. **Step creation** - writes step JSON file
2. **Step update** - reads and overwrites step JSON file
3. **Event creation** - writes event JSON file

That's ~3-4 file operations per step × 110 steps = **330-440 total file operations**.

On Windows, this is especially slow because:
- **NTFS** is slower than ext4/APFS for small file writes
- **Windows Defender** real-time scanning adds latency to new file creation
- The **atomic write pattern** (write temp file → rename) is slower on Windows

Reduced the number of steps from **110 to 20** (5 + 15 instead of 10 + 100):

**`workflows/noop.ts`**:
- First batch: 10 → 5 steps
- Second batch: 100 → 15 steps

**`src/idempotency.mts`**:
- Updated assertion to expect 20 numbers instead of 110

This is ~5.5x fewer file operations while still testing the same concurrent step execution and idempotency behavior. The test should now complete well within the 60-second timeout even on slow Windows CI machines.
2025-12-17 00:03:56 -08:00
Peter Wielander ce7d428a07 [world-local] Fix step queries not returning new items for live pagination (#623) 2025-12-17 08:58:42 +01:00
Peter Wielander a84f0db227 [web] Visually distinguish createdAt vs startedAt for run/steps (#622) 2025-12-17 08:58:18 +01:00
Vercel Release Bot fc6a32d6dc Version Packages (beta) (#607) @workflow/nitro@4.0.1-beta.30 @workflow/next@4.0.1-beta.31 workflow@4.0.1-beta.32 @workflow/world-testing@4.0.1-beta.33 @workflow/world-postgres@4.1.0-beta.20 @workflow/world-local@4.0.1-beta.18 @workflow/ai@4.0.1-beta.32 @workflow/web-shared@4.0.1-beta.28 @workflow/utils@4.0.1-beta.7 @workflow/sveltekit@4.0.0-beta.24 @workflow/world-vercel@4.0.1-beta.20 @workflow/web@4.0.1-beta.17 @workflow/builders@4.0.1-beta.26 @workflow/errors@4.0.1-beta.9 @workflow/core@4.0.1-beta.27 @workflow/cli@4.0.1-beta.32 @workflow/nuxt@4.0.1-beta.19 @workflow/astro@4.0.0-beta.9 2025-12-16 21:05:18 +01:00
Adrian 29967bff90 fix: nitro duplicate building workflows on startup (#619) 2025-12-16 12:04:05 -08:00
Peter Wielander deaf0193e9 [world-vercel] Allow skipping vercel backend proxy for e2e tests where CLI runs in runtime env (#627) 2025-12-16 20:44:05 +01:00
Adrian 89ad239516 remove react-router workbench (#631) 2025-12-16 10:46:31 -08:00
Adrian 1ef6b2fdc8 fix: use workflow health endpoint to check for port (#616)
* chore: use workflow health endpoint to check for port

* chore: update comment

* changeset

* Fix: The JSDoc comment for the `probePort` function is outdated and doesn't match the implementation. It claims the function returns true for "non-404 response" but the code now checks for exactly 200 status.

This commit fixes the issue reported at packages/utils/src/get-port.ts:251

## Outdated JSDoc comment in probePort() function doesn't match implementation

**What fails:** The JSDoc comment at line 251 of `packages/utils/src/get-port.ts` claims the `probePort()` function `@returns true if the port responds as a workflow server (non-404 response)`, but the actual implementation at line 269 explicitly checks `return response.status === 200;`

**How to reproduce:**
1. Read the JSDoc comment for `probePort()` function in `packages/utils/src/get-port.ts` (line 251)
2. Read the implementation at lines 268-269
3. Observe the mismatch: the comment says "non-404 response" but code checks for exactly status 200

**What happened vs expected behavior:**
- The code behavior was changed in commit `34cb235` (Dec 15, 2025) from checking `response.status !== 404` to checking `response.status === 200`
- The internal code comments were updated in commit `5840ab2`, but the JSDoc was left outdated
- Developers reading the JSDoc would incorrectly believe the function accepts any non-404 response (400, 405, etc.) when it actually requires exactly 200

**Fix:** Updated the JSDoc `@returns` line to accurately reflect the implementation: `@returns true if the port responds with a 200 status from the health check endpoint`

**Verification:** All 19 tests in `packages/utils/src/get-port.test.ts` pass with the updated documentation.

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>

---------

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2025-12-15 16:34:44 -08:00
Nathan Rajlich 4d7a393906 Add workflow endpoints health check query parameter (#613)
* Add workflow endpoints health check query parameter

* .

* .

* Add e2e
2025-12-15 15:14:29 -08:00
Peter Wielander 05ea6789e5 [web] Add actions for waking up workflow from sleep and re-enqueue runs for debugging (#582) 2025-12-14 17:39:25 -08:00
Copilot b56aae3fe9 Override timeout functions in workflow VM context to throw helpful errors (#505)
* Initial plan

* Override timeout functions in workflow VM context to throw helpful errors

Co-authored-by: TooTallNate <71256+TooTallNate@users.noreply.github.com>

* Use WorkflowRuntimeError instead of vmGlobalThis.Error for timeout functions

Co-authored-by: pranaygp <1797812+pranaygp@users.noreply.github.com>

* Add docs page for timeout-in-workflow error

Co-authored-by: pranaygp <1797812+pranaygp@users.noreply.github.com>

* Reorder unavailable functions list: set* functions first, then clear* functions

Co-authored-by: TooTallNate <71256+TooTallNate@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: TooTallNate <71256+TooTallNate@users.noreply.github.com>
Co-authored-by: pranaygp <1797812+pranaygp@users.noreply.github.com>
2025-12-13 01:47:03 -08:00
Vishal Yathish 3198f6d1b7 [docs] bump @ai/react version to stop schema validation errors (#606) 2025-12-13 01:25:31 -08:00
Daniel Erickson 795c0f38e7 Update README.md (#601) 2025-12-12 23:44:26 -08:00
Vercel Release Bot 5f61987a58 Version Packages (beta) (#605) @workflow/ai@4.0.1-beta.31 workflow@4.0.1-beta.31 @workflow/world-testing@4.0.1-beta.32 @workflow/web@4.0.1-beta.16 @workflow/next@4.0.1-beta.30 @workflow/cli@4.0.1-beta.31 2025-12-12 19:16:54 -08:00
Peter Wielander 6265534d6b CVE-2025-55184 changeset (#604) 2025-12-12 19:09:08 -08:00
Peter Wielander f5db6ed52c CVE-2025-55184 (#603) 2025-12-12 19:07:21 -08:00
Vercel Release Bot 7018f490e6 Version Packages (beta) (#589)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@workflow/nuxt@4.0.1-beta.18 @workflow/world-postgres@4.1.0-beta.19 @workflow/astro@4.0.0-beta.8 @workflow/builders@4.0.1-beta.25 @workflow/cli@4.0.1-beta.30 @workflow/core@4.0.1-beta.26 @workflow/errors@4.0.1-beta.8 @workflow/next@4.0.1-beta.29 @workflow/nitro@4.0.1-beta.29 @workflow/ai@4.0.1-beta.30 @workflow/sveltekit@4.0.0-beta.23 @workflow/utils@4.0.1-beta.6 @workflow/web-shared@4.0.1-beta.27 @workflow/world-local@4.0.1-beta.17 workflow@4.0.1-beta.30 @workflow/world-vercel@4.0.1-beta.19 @workflow/world-testing@4.0.1-beta.31
2025-12-12 18:11:25 -08:00
Adrian c9b8d843fd fix: improve port detection reliability with HTTP probing (#590)
* add logs

* fix: sveltekit type error

* feat: add polling for ports

* cleanup logs

* changeset

* fix test

* test

* test

* trigger

* trigger

* trigger

* trigger
2025-12-10 13:06:19 -08:00
Adrian 8d2cabe27e fix: externalize virtual modules in sveltekit builder (#573)
* fix: add virtual modules to sveltekit builder

* add test dynamic import

* changeset

* revert
2025-12-10 11:49:02 -08:00
Peter Wielander 30c0274cdb Fix changelog generation on changeset publish (#585) 2025-12-09 18:03:18 -08:00
Karthik Kalyanaraman a4b67a9b3a [web] Show chat conversation UI when detecting step spans from DurableAgent (#586)
---------

Signed-off-by: Karthik Kalyanaraman <karthik@scale3labs.com>
2025-12-09 16:35:46 -08:00
Peter Wielander 696e7e31e8 [core] Fix runs getting stuck due to step status edge case (#588) 2025-12-09 15:04:29 -08:00
Vercel Release Bot 76795b0cd0 Version Packages (beta) (#561) @workflow/world@4.0.1-beta.10 workflow@4.0.1-beta.29 2025-12-09 09:26:51 -08:00
Peter Wielander 161c54ca13 [web] [cli] Add Web and CLI UI for listing and viewing streams (#575) 2025-12-08 18:10:02 -08:00
Peter Wielander c82b46720c [world] Add Streamer.listByRunId method to list all streams for a run (#574) 2025-12-08 16:05:44 -08:00
Nathan Rajlich 656a5027ab Check step maxRetries at the beginning of the step handler (#532) 2025-12-08 15:42:34 -08:00
Nathan Rajlich 8ff4b3a508 Enable Vercel Deployment Protection bypass secret for E2E tests (#580)
This allows us to enable the Deployment Protection feature for the
Vercel test projects.
2025-12-08 14:44:41 -08:00
JJ Kasper b29d8a80e0 Revert "fix: import stripping in client mode for step functions (#563)" (#577)
This reverts commit 8b8135fb37.
2025-12-08 14:23:05 -08:00
Adrian 451b67256c docs: fix port getting started for vite and astro (#578) 2025-12-08 14:14:43 -08:00
Adrian 3064fbfa7d fix: force devalue version (#576) 2025-12-08 13:29:15 -08:00
Peter Wielander 33c254c82c [web] Clean up error handling and surface status code (#572) 2025-12-08 12:59:05 -08:00
Ariel Weinberger 8b8135fb37 fix: import stripping in client mode for step functions (#563)
* fix client output

* inputs

* add fixtures

* test: wip

* fix: update step-with-imports fixture to match transform output

* DCO Remediation Commit for Ariel Weinberger <weinberger.ariel@gmail.com>

I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: 949bc0cc68
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: 79e31ad4b2
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: 5f6a825815
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: fb20e60836
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: ed8e944f0b

Signed-off-by: Ariel Weinberger <weinberger.ariel@gmail.com>

* add changeset

Signed-off-by: Ariel Weinberger <weinberger.ariel@gmail.com>

---------

Signed-off-by: Ariel Weinberger <weinberger.ariel@gmail.com>
2025-12-08 12:49:06 -08:00
Peter Wielander 058757c476 [web] Tidy time helper functions (#562) 2025-12-08 12:16:53 -08:00
Gal Schlezinger c35b445875 core: do not treat workflow suspensions as errors in otel (#567) 2025-12-08 11:00:11 -08:00
Nathan Rajlich d3fd81dffd Enhance serialization falure error reporting (#571) 2025-12-08 10:21:47 -08:00
Peter Wielander d42a9681a1 [world-local] Bump undici dependency to latest minor version (#568) 2025-12-07 13:58:46 -08:00
Pranay Prakash ad7d14e6e1 Fix asset upload in CI 2025-12-06 19:41:13 -08:00
Pranay Prakash ee4fff6814 benchmarking: make steps simulate real work (+ misc improvements) (#565)
* perf: add 5s delay to benchmark steps to simulate real work

* perf: add realistic workloads to benchmark steps

Add realistic workloads to benchmark step functions:
- doWork() - 1 second delay to simulate real computation
- stressTestStep() - 1 second delay to simulate real computation
- genBenchStream() - generates ~5KB of data in 50 chunks
- transformStream() - uppercases stream content (renamed from doubleNumbers)

Add "Slurp Time" metric to stream benchmarks measuring time from
first byte to complete stream consumption, complementing TTFB.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(e2e): increase dev test timeouts for Windows

Windows file watching and rebuilding is slower than macOS/Linux,
causing the 10s timeouts to fail. Increased to 30s to accommodate.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(ci): treat community world failures as warnings, not errors

Community world tests/benchmarks are now non-blocking:
- Removed from has_failures check in both tests.yml and benchmarks.yml
- Added separate has_warnings output for community failures
- Split PR comment notices: ❌ for failures, ⚠️ for community warnings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: apply PR review suggestions

- Fix chunk size calculation: chunkSize - 11 for ~100 bytes per chunk
- Remove redundant metadata check (always truthy)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-06 19:27:02 -08:00
Pranay Prakash 516f16fe98 fix(ci): ensure publish-results job runs when E2E tests fail
The publish-results job was being skipped because it depends on the
summary job which uses `if: always()`. When a job uses `always()`,
downstream jobs need to also use `always()` in their condition,
otherwise GitHub Actions skips them when any upstream job fails.

This was causing e2e-results.json to never be published to gh-pages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 19:04:21 -08:00
Pranay Prakash b28cd847de fix: step.ts handling corrupted step invocation log 2025-12-06 18:43:39 -08:00
Pranay Prakash 54ba1888cd fix: compare benchmarks against PR base branch instead of main (#560)
* fix: compare benchmarks against PR base branch instead of main

- Use github.event.pull_request.base.ref instead of hardcoded main
- Remove search_artifacts: true to ensure most recent baseline is used
- For stacked PRs, this compares against the parent PR's baseline

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: group failed e2e tests by category and app in summary

Instead of listing each failed test as a separate item, group them by:
1. Category (world): e.g., "Community Worlds", "Vercel Production"
2. App (framework): e.g., "mongodb", "turso", "nextjs-turbopack"

This makes the summary much more readable when there are many failures.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: ensure local E2E tests always produce JSON output

- Add 'fastify' to app detection list in aggregate-e2e-results.js
- Change && to ; so e2e tests run even if dev.test.ts fails
- This ensures local-dev, local-prod, and local-postgres categories
  appear in the E2E summary comment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: ensure local E2E tests always produce JSON output

- Add 'fastify' to app detection list in aggregate-e2e-results.js
- Change && to ; so e2e tests run even if dev.test.ts fails
- This ensures local-dev, local-prod, and local-postgres categories
  appear in the E2E summary comment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: publish CI results to GitHub Pages for docs

- Add generate-docs-data.js script to create JSON summaries from CI artifacts
- Add publish-results job to tests.yml and benchmarks.yml workflows
- Update docs/lib/worlds-data.ts to fetch from GitHub Pages URLs
- Results published to https://vercel.github.io/workflow/ci/

This allows the docs worlds page to display actual test/benchmark
results without requiring a GITHUB_TOKEN.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: correct outputFile path for local E2E test artifacts

The --outputFile path was using ../../ which placed files outside the
repo because pnpm run test:e2e executes from workspace root, not from
the cd'd workbench directory. This prevented local-dev, local-prod, and
local-postgres test results from being uploaded as artifacts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: show green checkmark for skipped tests instead of warning

Skipped tests are intentional and shouldn't show as warnings in the
E2E test summary comments.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: use collapsible sections in benchmark PR comment

Wrap each benchmark, stream benchmarks section, and summary tables in
<details> toggles to make the PR comment more compact and readable.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: add Vercel observability links to benchmark PR comments

- Store runId in benchmark timing data
- Add project-slug to Vercel benchmark matrix
- Pass WORKFLOW_VERCEL_PROJECT_SLUG env var to benchmarks
- Store Vercel metadata (teamSlug, projectSlug, environment) in timing files
- Generate observability deep links for each Vercel world benchmark
- Show observability links below Production (Vercel) tables

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: use correct Vercel project slugs for observability links

- nextjs-turbopack → example-nextjs-workflow-turbopack
- nitro-v3 → workbench-nitro-workflow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-06 18:30:25 -08:00