Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Don't shadow globalThis - #649

Merged
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_
Dec 18, 2025
Merged

Don't shadow globalThis#649
TooTallNate merged 1 commit into
mainfrom
12-18-don_t_shadow_globalthis_

Conversation

@TooTallNate

@TooTallNateTooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
Member

Fixes biome lint error

@changeset-bot

changeset-botBot commented Dec 18, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 54b9f63

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

This PR includes changesets to release 12 packages
NameType
@workflow/corePatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/web-sharedPatch
workflowPatch
@workflow/astroPatch
@workflow/sveltekitPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/aiPatch

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

vercelBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

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

ProjectDeploymentReviewUpdated (UTC)
example-nextjs-workflow-turbopackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-nextjs-workflow-webpackReadyReadyPreview, CommentDec 18, 2025 11:39pm
example-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-astro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-express-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-fastify-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-hono-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nitro-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-nuxt-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-sveltekit-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workbench-vite-workflowReadyReadyPreview, CommentDec 18, 2025 11:39pm
workflow-docsReadyReadyPreview, CommentDec 18, 2025 11:39pm

@github-actions

github-actionsBot commented Dec 18, 2025

Copy link
Copy Markdown
Contributor

🧪 E2E Test Results

Some tests failed

Summary

PassedFailedSkippedTotal
✅ ▲ Vercel Production286011297
✅ 💻 Local Development26208270
❌ 📦 Local Production26028270
✅ 🐘 Local Postgres26208270
✅ 🪟 Windows270027
❌ 🌍 Community Worlds109110120
Total120613351254

❌ Failed Tests

📦 Local Production (2 failed)

astro-stable (1 failed):

  • webhookWorkflow

sveltekit-stable (1 failed):

  • webhookWorkflow
🌍 Community Worlds (11 failed)

mongodb (1 failed):

  • webhookWorkflow

redis (1 failed):

  • webhookWorkflow

starter (8 failed):

  • addTenWorkflow
  • addTenWorkflow
  • retryAttemptCounterWorkflow
  • crossFileErrorWorkflow - stack traces work across imported modules
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step

turso (1 failed):

  • webhookWorkflow

Details by Category

✅ ▲ Vercel Production
AppPassedFailedSkipped
✅ astro2601
✅ example2601
✅ express2601
✅ fastify2601
✅ hono2601
✅ nextjs-turbopack2601
✅ nextjs-webpack2601
✅ nitro2601
✅ nuxt2601
✅ sveltekit2601
✅ vite2601
✅ 💻 Local Development
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
❌ 📦 Local Production
AppPassedFailedSkipped
❌ astro-stable2511
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
❌ sveltekit-stable2511
✅ vite-stable2601
✅ 🐘 Local Postgres
AppPassedFailedSkipped
✅ astro-stable2601
✅ express-stable2601
✅ fastify-stable2601
✅ hono-stable2601
✅ nextjs-turbopack-stable2700
✅ nextjs-webpack-stable2700
✅ nitro-stable2601
✅ nuxt-stable2601
✅ sveltekit-stable2601
✅ vite-stable2601
✅ 🪟 Windows
AppPassedFailedSkipped
✅ nextjs-turbopack2700
❌ 🌍 Community Worlds
AppPassedFailedSkipped
✅ mongodb-dev300
❌ mongodb2610
✅ redis-dev300
❌ redis2610
✅ starter-dev300
❌ starter1980
✅ turso-dev300
❌ turso2610

📋 View full workflow run


Some E2E test jobs failed:

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

Check the workflow run for details.

@TooTallNateGraphite App

TooTallNate commented Dec 18, 2025

Copy link
Copy Markdown
MemberAuthor

This stack of pull requests is managed by Graphite. Learn more about stacking.

CopilotAI 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.

Pull request overview

This PR fixes a biome lint error by renaming function parameters from globalThis to global to avoid shadowing the JavaScript global globalThis object.

Key changes:

  • Renamed globalThis parameter to global in ProcessHookParams and ProcessStepParams interfaces
  • Updated all function parameters and references throughout the suspension handler
  • Moved @opentelemetry/api import to the top for better organization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

FileDescription
packages/core/src/runtime/suspension-handler.tsRenamed globalThis parameter to global in interfaces and functions to avoid shadowing the global object
.changeset/grumpy-apes-rescue.mdAdded changeset documenting the fix

The changes are consistent and complete. All references to the renamed parameter have been properly updated, and the naming choice global aligns with the existing codebase pattern (e.g., WorkflowSuspension constructor in global.ts already uses global as the parameter name). No issues were identified.


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

@vercelvercelBot 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.

🔧 Build Fix:

The withRetry function returns void | T instead of T because bail() is called but its return value is not thrown, allowing the handler to return void. The fix ensures that after calling bail(), the error is explicitly thrown so the function always either returns T or throws.

View Details
📝 Patch Details
diff --git a/packages/core/src/runtime/retry.ts b/packages/core/src/runtime/retry.ts
index f0f7c94..b1f8d15 100644
--- a/packages/core/src/runtime/retry.ts+++ b/packages/core/src/runtime/retry.ts@@ -130,7 +130,9 @@ export async function withRetry<T>(
} catch (error) {
// If the error is not retryable, bail immediately
if (!isRetryableError(error)) {
- return bail(error as Error);+ bail(error as Error);+ // Ensure we never return after calling bail+ throw error;
}
// Otherwise, throw to trigger a retry
throw error;

Analysis

TypeScript type error in retry handler function

What fails: TypeScript compilation fails in the withRetry function due to the retry handler returning void | T instead of the expected return type T.

How to reproduce:

cd /vercel/sandbox/primary
pnpm turbo run build --filter=@workflow/core

Result:

src/runtime/retry.ts(126,3): error TS2322: Type 'void | T' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'void | T'.

Root cause: The bail() callback in the retry handler returns void. When bail() is called to exit early without retrying, the code returns the result of bail() which is void, creating a union type void | T. The async function signature expects to return a value of type T, not void | T.

Fix: After calling bail(), explicitly throw the error to ensure the handler never returns void. This ensures the handler either returns T or throws an exception, satisfying the type constraint.

Fix on Vercel

@TooTallNate
TooTallNate changed the base branch from 12-18-add_retry_logic_to_world_operations to graphite-base/649December 18, 2025 23:37
@TooTallNate
TooTallNateforce-pushed the 12-18-don_t_shadow_globalthis_ branch from 8d6e98b to 54b9f63CompareDecember 18, 2025 23:37
Sign up for freeto 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.

3 participants

@TooTallNate@adriandlam