Commit Graph

654 Commits

Author SHA1 Message Date
Vercel Release Bot 339c44fe1a Version Packages (beta) (#1131) workflow@4.1.0-beta.59 2026-02-20 15:17:31 -08:00
Nathan Rajlich b65bb072b5 Add AES-256-GCM encryption primitives and HKDF key derivation (#956)
* Add browser-compatible AES-GCM to core and HKDF key derivation to world-vercel

* update changeset

* Move HKDF key derivation server-side: API returns per-run derived key

* Refactor encrypt/decrypt to accept CryptoKey, export importKey for callers to import once per run

* Pass WorkflowRun entity to getEncryptionKeyForRun where available (avoids redundant lookup)

* .

* Refactor handleSuspension to accept WorkflowRun, pass run entity to getEncryptionKeyForRun

* Overload getEncryptionKeyForRun: accept context for start(), fetch WorkflowRun in resume-hook

* Split changeset into per-package descriptions for world, world-vercel, and core

* Remove unnecessary Uint8Array.from() wrapper around Buffer.from()

* Use zod to parse Vercel API response

* Address peter's comment
2026-02-20 22:47:54 +00:00
Peter Wielander c75de973fd Handle 409 errors gracefully for step_completed/failed/retrying (#1120) 2026-02-20 14:43:04 -08:00
Karthik Kalyan 289fc46a1c Add back sitemap code and add docs unit test (#1136)
* Bring back sitemap

* Bring back sitemap

* Add pre commit hooks for sitemap

* Add pre commit hooks for sitemap

* Fix failing queue test

* Revert queue test failure

* Add unit tests
2026-02-20 12:52:43 -08:00
Karthik Kalyan e82142f522 Fix failing queue test (#1139)
* Fix world-vercel queue header-injection tests.

Align mocked sendMessage assertions with the current QueueClient call shape and restore the shared setup helper so the new header tests run reliably in CI.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Add unit tests

* Update .changeset/chubby-symbols-return.md

Signed-off-by: Nathan Rajlich <n@n8.io>

---------

Signed-off-by: Nathan Rajlich <n@n8.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Nathan Rajlich <n@n8.io>
2026-02-20 11:09:51 -08:00
John Lindquist f63a944a6b docs(skills): add workflow-init skill (#1129)
Adds a workflow-init skill that guides users through setting up Vercel
Workflow DevKit. Auto-detects the user's framework from package.json,
then directs the agent to fetch the official getting-started guide from
useworkflow.dev. After setup, hands off to the /workflow skill.
2026-02-19 18:23:26 -08:00
Pranay Prakash ae6b81c412 Add tests for auto-injected VQS workflow/step ID headers (#1099)
Tests cover:
- Workflow payload -> x-workflow-run-id header
- Step payload -> x-workflow-run-id + x-workflow-step-id headers
- Health check payload -> no workflow headers
- Caller headers override auto-injected headers
- Delayed re-enqueue inherits headers for both payload types

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:06:17 -08:00
Pranay Prakash 14863bf622 fix(workflow): improve runtime API stub error message and fix SKILL.md streaming docs (#1077)
* fix(workflow): improve error message for runtime API usage in workflow context and fix SKILL.md streaming docs

The workflow stub error now tells users to move calls to a step function or outside the workflow context. Also corrects the SKILL.md streaming section which incorrectly stated getWritable() only works in steps.

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

* chore: add changeset

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

* fix(skill): address PR feedback on SKILL.md

- Remove `npx workflow start` from debugging section (args can't easily be passed via CLI)
- Mention --json and --help flags for CLI inspection
- Add reminder to check AI docs for DurableAgent details

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

* fix(skill): fix SKILL.md debugging section CLI commands

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

* other improvements

* fix(skill): address Copilot PR feedback on streaming examples

- Add missing imports and define all referenced variables
- Wrap writer.releaseLock() in finally blocks for safety
- Remove undefined `data`/`agent`/`messages` references
- Simplify examples to be self-contained and copy-pasteable

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

* chore(skill): bump SKILL.md version to 1.1

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

* docs: add skill version bump rule to CLAUDE.md

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: John Lindquist <johnlindquist@gmail.com>
2026-02-19 15:17:04 -08:00
Vercel Release Bot f4d168b012 Version Packages (beta) (#1045) workflow@4.1.0-beta.58 2026-02-19 15:16:28 -08:00
Casey Gowrie 29347b79ea New vercel queue client with v2beta consumers (#1096) 2026-02-19 22:24:15 +00:00
Peter Wielander 852e3f1788 Do not re-throw error when multiple workflow invocations race to complete/fail the workflow (#1118) 2026-02-18 14:00:47 -08:00
Nathan Rajlich ea3254e7ce Fix projectConfig.projectId containing project name instead of ID (#999)
* Fix projectConfig.projectId containing project name instead of ID

* add changeset

* Address review: fix changeset description, normalize slug-based project IDs, add clarifying comments
2026-02-18 02:03:31 -08:00
Nathan Rajlich 6e72b295e7 Add World.getEncryptionKeyForRun and thread encryption key through serialization (#979)
## Summary

- Adds `World.getEncryptionKeyForRun(run)` returning `Uint8Array | undefined` as the interface for retrieving per-run encryption keys
- Updates all 8 dehydrate/hydrate serialization functions to accept `key: Uint8Array | undefined`
- Updates runtime callers, CLI, and tests to thread the key parameter through
2026-02-18 00:53:49 -08:00
Nathan Rajlich 0d5323c0a7 Make serialization functions async (#978)
## Summary

- Makes all 8 dehydrate/hydrate serialization functions in `@workflow/core` async (returning `Promise<...>`)
- Updates all call sites across runtime, CLI, and test code to `await` the results
- Pure mechanical refactor — no functional changes, prerequisite for encryption support

Part 1 of the end-to-end encryption PR stack.
2026-02-17 23:18:44 -08:00
Karthik Kalyan 323da45b14 [web-shared] Minor perf hardening to minimize renders (#1104)
* [web-shared] reduce redundant render

* [web-shared] add changeset
2026-02-17 18:44:16 -08:00
Pranay Prakash 704661078f Auto-inject workflow run/step ID VQS headers from queue payload (#1098)
Move `x-workflow-run-id` and `x-workflow-step-id` header injection into
`world-vercel` queue implementation so callers don't need to set them
manually. The headers are extracted from the queue payload itself.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:44:06 +00:00
Karthik Kalyan 8a03a93b62 [web-shared] Improve liveness updates and fix bugs in Trace Viewer (#1086)
* [workflow o11y] Fix traceviewer bugs

* [workflow o11y] Fix traceviewer bugs - add changeset

* [workflow o11y] Fix react inspector state for open/close items

* [workflow o11y] Fix react inspector state for open/close items
2026-02-17 10:04:40 -08:00
Nathan Rajlich 54879835f3 Fix pages router default args: use empty array instead of [42] (#1081) 2026-02-17 01:47:48 -08:00
Nathan Rajlich 262ef3a21a Fix CLI missing specVersion in "run_cancelled" event payload (#1078)
The CLI's `cancelRun` in `packages/cli/src/lib/inspect/run.ts` sent `{ eventType: 'run_cancelled' }` without `specVersion`, causing the Vercel API's `/v2/runs/{id}/events` endpoint to reject the request with a 400 error. The core runtime's `cancelRun` already handled this correctly, so the fix removes the redundant CLI wrapper and calls the core implementation directly.

The bug was introduced in 4966b72 ("implement event-sourced architecture (#621)") which changed the CLI cancel from `world.runs.cancel(runId)` to `world.events.create(runId, ...)` but omitted `specVersion` from the payload. The same commit correctly included it in `Run#cancel()` in core — it was simply missed in the CLI path. A later commit (86a7930) added v1Compat branching but still never added specVersion. The final merged state in a2b688d (PR #894) still omits it.

Also adds a CLI cancel e2e test that starts a long-running workflow, cancels it via the CLI command, and verifies the run status.
2026-02-16 18:16:06 -08:00
JJ Kasper b733e2a173 Unlock canary Next.js version in tests and bump min deferred version (#1088)
* Unlock canary Next.js version

* bump min version
2026-02-16 17:27:16 -08:00
yao bcbdd024ef [nest] Support CommonJS compilation for NestJS projects (#982)
Signed-off-by: yao <zhangyaoruo@outlook.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 17:18:45 -08:00
Pranay Prakash 5e06a7c833 Materialize waits as entities to prevent duplicate wait_completed events (#1057)
* Handle 409 conflict when completing waits that were already completed

When multiple concurrent workflow invocations race to complete the same
wait, the server returns 409 (conflict) for duplicates. This change
handles the 409 gracefully in both runtime.ts (sleep elapsed check) and
runs.ts (wakeUpRun), preventing crashes and treating already-completed
waits as successful.

Also updates event-sourcing docs to reflect that waits are now
materialized as entities in storage with atomic completion guarantees.

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

* Point e2e tests at workflow-server preview for wait materialization branch

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

* Materialize waits as entities in local and postgres worlds to prevent duplicate wait_completed events

Adds Wait type/schema to the shared world package and implements wait entity
materialization in both local (filesystem) and postgres world implementations,
matching the DynamoDB behavior. wait_created creates a wait entity with status
'waiting', and wait_completed transitions it to 'completed' with guards that
reject duplicates (409).

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

* Fix waitId to use composite key for consistency with postgres world

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

* Clean up wait entities on terminal run states and register waits migration

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

* Clear WORKFLOW_SERVER_URL_OVERRIDE for merge

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

* Update changeset for all affected packages and restore server URL override

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

* Clear WORKFLOW_SERVER_URL_OVERRIDE now that server PR is merged

The server-side changes (vercel/workflow-server#265) have been merged to main
and deployed to production, so we no longer need to point at the preview URL.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:46:49 -08:00
Nathan Rajlich 0946dad01b Remove "workflow/internal/serialization" export (#1082)
* Remove "workflow/internal/serialization" export

Was only being used in these two e2e test files and the data being passed in those tests don't rely on any specialized data types, so just use JSON there.

* Fix: Removing the `workflow/internal/serialization` export from package.json breaks 5 files in `packages/world-testing` that still import `hydrateWorkflowReturnValue` from that path.

Co-authored-by: TooTallNate <n@n8.io>

* lockfile

---------

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2026-02-16 11:50:57 -08:00
Pranay Prakash f934e52c22 add closure comment in sleep test helper (#1071)
Per TooTallNate's review on #1055: the setupWorkflowContext helper
has a circular reference where ctx.onWorkflowError is accessed via
closure before it's defined on the object. Add a clarifying comment.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:48:18 -08:00
Peter Wielander 0edcccf84d [ci] Skip for CI checks when doing vercel backend testing only (#1063) 2026-02-15 18:37:17 +00:00
Nathan Rajlich 89f96306ea fix(docs): correct retry instructions in corrupted-event-log error page (#1059)
Remove reference to non-existent 'npx workflow runs start' CLI command.
The correct way to retry is via the Re-run button in the Workflow Dashboard.
2026-02-14 01:07:00 -08:00
Pranay Prakash c2b4fe9906 fix(core): detect and fatal error on orphaned/invalid events (#1055)
* fix(core): detect and fatal error on orphaned/invalid events in EventsConsumer

When an event log has duplicate or invalid events (e.g., 2 wait_completed for a single wait_created), the EventsConsumer gets stuck: the orphaned event has no callback to consume it, so eventIndex never advances, blocking all subsequent events and hanging the workflow forever. This adds deferred orphaned event detection that raises a WorkflowRuntimeError instead.

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

* add corrupted-event-log error slug and docs page

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

* add changeset for orphaned event detection

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

* address PR feedback on docs and JSDoc

- Add JSDoc to EventsConsumer constructor's onUnconsumedEvent parameter
- Rewrite docs to clarify this is a SDK/server bug, not user code
- Remove cancel/programmatic retry advice; run is already marked failed
- Emphasize error is uncatchable inside workflow code
- Add steps: upgrade package, retry via dashboard/CLI, report issue on GitHub

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

* address PR review: structured options, required callback, reorder docs

- Change EventsConsumer constructor to use structured EventsConsumerOptions object
- Make onUnconsumedEvent required (all callsites provide it)
- Move corrupted-event-log card to last position in errors index
- Update all callsites in tests

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

* fix docs code sample to pass type-checking

Use correct imports (getRun from workflow/api) and declare variables
to satisfy the docs-typecheck CI job.

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

* add e2e test for parallel sleep (Promise.all with 10x sleep)

Adds parallelSleepWorkflow that does Promise.all with 10 concurrent
sleep('1s') calls, and an e2e test asserting it completes or fails
within a reasonable time (not hanging).

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

* fix parallelSleep e2e test: await returnValue instead of checking status

run.status returns immediately and the workflow is still 'running'.
Use run.returnValue which polls until completion.

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

* fix parallelSleep e2e: assert parallel completion under 10s

The test verifies 10 concurrent sleep('1s') calls complete in parallel
(~1s) rather than serially (10s) or hanging indefinitely. 30s timeout
is sufficient since the workflow should finish in ~1-2s.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:31:39 -08:00
JJ Kasper c6b75b7698 test(core): stream and capture build logs in local e2e (#1050) 2026-02-14 02:33:09 +00:00
JJ Kasper 550997659d Update tests.yml triggers for release PR (#1048) 2026-02-14 02:31:22 +00:00
Peter Wielander 9f77380493 Fix 429 retry (#1051) 2026-02-13 17:10:14 -08:00
Karthik Kalyan befc01d7cb Fix sidebar title (#1053)
* Fix sidebar title

* Fix sidebar title

* Fix sidebar title

* Fix sidebar title

* Fix sidebar title
2026-02-14 01:09:58 +00:00
JJ Kasper 565e5ebd56 Lock Next.js canary version (#1054) 2026-02-13 23:13:44 +00:00
JJ Kasper 26399c107a ci: add 30-minute timeouts to test jobs (#1052) 2026-02-13 14:45:23 -08:00
Nathan Rajlich 5213309073 Fix "dev" script in web package (#1039)
* Fix "dev" script in `web` package

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Nathan Rajlich <n@n8.io>

---------

Signed-off-by: Nathan Rajlich <n@n8.io>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-13 14:24:27 -08:00
Nathan Rajlich 260f77e023 Retheme <DataInspector> to match Node.js util.inspect() colors (#1033)
Replaces the Chrome DevTools color scheme with one inspired by
Node.js util.inspect() ANSI stylizing: green strings, yellow
numbers/booleans, grey undefined, magenta dates, cyan functions,
and neutral property names. Adds an extended theme context to
color Date instances (react-inspector has no built-in theme key
for dates). Removes color-hash dependency which is no longer used.
2026-02-13 14:21:18 -08:00
Nathan Rajlich dbf8434907 Extract reusable <DataInspector> component and fix class instance rendering (#1032)
Consolidate all ObjectInspector usage into a single DataInspector component
with shared theming, custom nodeRenderer for StreamRef/ClassInstanceRef, and
stream click context. Update all consumers (attribute-panel, events-list,
event-list-view, stream-viewer, conversation-view) to use DataInspector
instead of direct ObjectInspector or JSON.stringify. Fix class instance
hydration to create objects with dynamically-named constructors so
react-inspector shows proper class names via constructor.name.
2026-02-13 14:20:24 -08:00
JJ Kasper f5ae600db4 fix(e2e): stabilize 5xx step_completed fault injection (#1046) 2026-02-13 14:03:06 -08:00
Pranay Prakash c9b4547b0b claude fix demo (#1047) 2026-02-13 13:53:42 -08:00
Nathan Rajlich 8cfb43808b Use @vercel/cli-auth for auth token reading and OAuth refresh (#1043)
* Use `@vercel/cli-auth` for auth token reading and OAuth refresh

Replace the manual auth.json reading logic in the CLI with the `@vercel/cli-auth` package, which handles credential storage via CredentialsStore and OAuth token refresh via the OAuth client.

Previously, the CLI would read the token from disk but had no refresh logic — if the token was expired, API calls would fail.
Now, getAuthToken() checks token expiry and automatically refreshes it using the stored refresh token before returning it.

* Remove dead logging
2026-02-13 21:46:11 +00:00
Karthik Kalyan 1c1157340d [builders][web-shared] Improvements to o11y and fixes to graph generation code path (#1031)
* [workflow o11y] rebase on latest main and keep targeted UI/builders changes

Rebase the branch intent onto latest main by preserving web-shared UI refactors and builders base-builder updates while taking main for hydration and data-fetching behavior elsewhere.

Co-authored-by: Cursor <cursoragent@cursor.com>

* [workflow o11y] align web-shared hydration revivers with main

Revert the hydration reviver delta for URL, URLSearchParams, and Headers so web-shared matches main behavior while keeping the targeted UI/builders-only scope on this branch.

Co-authored-by: Cursor <cursoragent@cursor.com>

* [workflow o11y] restore PR #1017 detail-panel decoupling

Bring the web-shared trace/detail panel files back in sync with main so PR #1017 behavior is preserved and not regressed on this branch.

Co-authored-by: Cursor <cursoragent@cursor.com>

* [workflow o11y] restore PR #1018 react-inspector sidebar updates

Bring web-shared o11y rendering files back in sync with main so ObjectInspector-based sidebar rendering and related UI behavior from PR #1018 remain intact on this branch.

Co-authored-by: Cursor <cursoragent@cursor.com>

* [workflow o11y] keep custom viewers and apply inspector rendering

Preserve the branch-specific event list and stream viewer UX while applying react-inspector rendering to payload/chunk data so complex hydrated values render correctly without reverting custom UI behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>

* [workflow o11y] trace viewer UX improvements and Geist alignment

- Add live tick animation, context menu, and cancel run support from PR #984
- Decouple side panel styling to use Geist design tokens (inline styles)
- Fix sleep span detail panel showing events instead of wait entity attributes
- Fix stream viewer flickering by removing unstable object deps
- Remove Chunks/Output toggle from stream viewer, show only chunks
- Add resolve hook modal, wake-up sleep, and cancel run plumbing
- Add loading skeleton for stream viewer

Co-authored-by: Cursor <cursoragent@cursor.com>

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

* Bug fixes

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 13:27:16 -08:00
Vercel Release Bot cf98219931 Version Packages (beta) (#1037)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
workflow@4.1.0-beta.57
2026-02-13 13:26:11 -08:00
JJ Kasper 30076ecea8 Enable lazyDiscovery in workbench (#1044) 2026-02-13 12:45:46 -08:00
JJ Kasper b0464b6af2 Always run canary Next.js tests (#1042) 2026-02-13 18:36:18 +00:00
JJ Kasper f4a1994c4b Fix condition for lazy discovery with canary (#1038)
* Fix condition for lazy discovery with canary

* revert test change
2026-02-13 10:13:36 -08:00
JJ Kasper 01e8e80462 Make lazy discovery in Next.js opt-in (#1036) 2026-02-13 16:36:24 +00:00
Hayden Bleasel 6da8e2358b Update Docs (#1028)
* Remove math and mermaid

* Add alternates
2026-02-13 05:59:28 +00:00
Vercel Release Bot 295f6cd0b6 Version Packages (beta) (#1013)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
workflow@4.1.0-beta.56
2026-02-12 20:09:35 -08:00
Pranay Prakash ff9fcc25ad Fix benchmark history continuity and caching (#1034)
* Fix benchmark history continuity across metric name rename

The concurrent step benchmarks were renamed in beta.53 (dropping the
"stress test: " prefix), which broke the history API's exact-name lookup
against older gh-pages data. Add legacy alias fallbacks so charts show
continuous history across the rename boundary.

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

* Paginate GitHub API calls and use generic legacy name fallback

Three fixes:
- Paginate gh-pages commits (was fetching 100 of 216, missing most history)
- Paginate tags (workflow@ tags were cut off beyond page 1)
- Paginate main branch commits for commits mode
- Replace hardcoded LEGACY_METRIC_ALIASES with generic "stress test: "
  prefix fallback

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

* Cache benchmark history with unstable_cache and aggressive CDN TTLs

The snapshot map (200+ GitHub API fetches) is now cached via
unstable_cache for 1 hour, shared across all parameter combinations.
Tags are cached separately. Individual fetch calls use force-cache
with long revalidation periods since historical data is immutable.

CDN cache bumped from 5min to 1h with 24h stale-while-revalidate,
matching how infrequently benchmark data changes.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:57:18 -08:00
Pranay Prakash 8d117cd219 Retry 5xx errors from workflow-server in step handler (#1011)
* Retry 5xx errors from workflow-server in step handler

Add `withServerErrorRetry` helper that retries world calls on 5xx errors
with exponential backoff (500ms, 1s, 2s ≈ 3.5s total). Applied to all
`world.events.create` calls in the step handler so transient
workflow-server errors don't consume step attempts.

If retries are exhausted, the error is thrown to the queue for
higher-level retry without burning a step attempt.

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

* Address PR review comments on 5xx retry handling

- Fix misleading `maxAttempts` log field to `maxRetries` in withServerErrorRetry
- Update step-handler comment to accurately note that queue retries may
  still consume step attempts since step_started has already incremented
- Add unit tests for withServerErrorRetry (7 tests covering success,
  retry/backoff, exhaustion, and non-5xx passthrough)

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

* Add tests for 429/5xx retry handling

Unit tests for withThrottleRetry and withServerErrorRetry helpers, plus
an e2e test that exercises the 5xx retry codepath during step execution
via run-scoped fault injection.

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

* Wrap VQS errors in WorkflowAPIError and add retry to queueMessage

VQS throws its own error types (InternalServerError, ConsumerDiscoveryError,
ConsumerRegistryNotConfiguredError) that don't match WorkflowAPIError.is().
Wrapping them at the world-vercel boundary enables withServerErrorRetry in
queueMessage() to automatically retry transient queue failures.

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

* Update changeset to include @workflow/world-vercel

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

* Remove queue retry logic per review feedback

Queue retrying will be handled natively by the @vercel/queue client
instead. Reverts VQS error wrapping and withServerErrorRetry in
queueMessage().

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:42:36 -08:00
JJ Kasper 94760b4640 Track loader transform deps instead of clearing Next cache (#1029)
* Track loader transform dependencies and remove SWC cache invalidation

* changeset
2026-02-12 17:41:47 -08:00