Skip to content

fix(cli): read orgId from project entry in repo.json, not root#1263

Merged
TooTallNate merged 1 commit into
mainfrom
fix/cli-team-id-from-repo-link
Mar 4, 2026
Merged

fix(cli): read orgId from project entry in repo.json, not root#1263
TooTallNate merged 1 commit into
mainfrom
fix/cli-team-id-from-repo-link

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

@TooTallNate TooTallNate commented Mar 4, 2026

Summary

Fixes CLI 401 errors when using --backend=vercel with projects linked via vc link in a monorepo.

Problem

The Vercel CLI recently moved orgId from the root level of .vercel/repo.json to each project entry (see vercel/vercel#14967):

// New format (vercel/vercel#14967):
{
  "remoteName": "origin",
  "projects": [
    {
      "id": "prj_xxx",
      "name": "my-app",
      "directory": "workbench/nextjs-turbopack",
      "orgId": "team_xxx"  ← moved here
    }
  ]
}

// Old format:
{
  "orgId": "team_xxx",  ← was here
  "remoteName": "origin",
  "projects": [...]
}

The workflow CLI was only reading repoConfig.orgId (root level), which is now undefined with the new format. Without teamId, world-vercel uses the direct vercel-workflow.com URL instead of the api.vercel.com proxy, causing 401 because vercel-workflow.com only accepts OIDC tokens.

Fix

  • Prefer project.orgId (new per-project format), fall back to repoConfig.orgId (legacy root format) for backwards compatibility
  • Update RepoProjectConfig type to include optional orgId
  • Keep RepoProjectsConfig.orgId as optional for legacy support
  • Return null if neither location has orgId

@TooTallNate TooTallNate requested a review from a team as a code owner March 4, 2026 22:15
Copilot AI review requested due to automatic review settings March 4, 2026 22:15
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Mar 4, 2026

🦋 Changeset detected

Latest commit: 870c6b5

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

This PR includes changesets to release 14 packages
Name Type
@workflow/cli Patch
workflow Patch
@workflow/world-testing Patch
@workflow/core Patch
@workflow/builders Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/web-shared Patch
@workflow/astro Patch
@workflow/nest Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
@workflow/nuxt Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Mar 4, 2026

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 4, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 538 0 67 605
✅ 💻 Local Development 576 0 84 660
✅ 📦 Local Production 576 0 84 660
✅ 🐘 Local Postgres 576 0 84 660
✅ 🪟 Windows 52 0 3 55
❌ 🌍 Community Worlds 116 49 15 180
✅ 📋 Other 138 0 27 165
Total 2572 49 364 2985

❌ Failed Tests

🌍 Community Worlds (49 failed)

mongodb (1 failed):

  • webhookWorkflow

turso (48 failed):

  • addTenWorkflow
  • addTenWorkflow
  • wellKnownAgentWorkflow (.well-known/agent)
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • importedStepOnlyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 48 0 7
✅ example 48 0 7
✅ express 48 0 7
✅ fastify 48 0 7
✅ hono 48 0 7
✅ nextjs-turbopack 53 0 2
✅ nextjs-webpack 53 0 2
✅ nitro 48 0 7
✅ nuxt 48 0 7
✅ sveltekit 48 0 7
✅ vite 48 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 46 0 9
✅ express-stable 46 0 9
✅ fastify-stable 46 0 9
✅ hono-stable 46 0 9
✅ nextjs-turbopack-canary 52 0 3
✅ nextjs-turbopack-stable 52 0 3
✅ nextjs-webpack-canary 52 0 3
✅ nextjs-webpack-stable 52 0 3
✅ nitro-stable 46 0 9
✅ nuxt-stable 46 0 9
✅ sveltekit-stable 46 0 9
✅ vite-stable 46 0 9
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 46 0 9
✅ express-stable 46 0 9
✅ fastify-stable 46 0 9
✅ hono-stable 46 0 9
✅ nextjs-turbopack-canary 52 0 3
✅ nextjs-turbopack-stable 52 0 3
✅ nextjs-webpack-canary 52 0 3
✅ nextjs-webpack-stable 52 0 3
✅ nitro-stable 46 0 9
✅ nuxt-stable 46 0 9
✅ sveltekit-stable 46 0 9
✅ vite-stable 46 0 9
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 46 0 9
✅ express-stable 46 0 9
✅ fastify-stable 46 0 9
✅ hono-stable 46 0 9
✅ nextjs-turbopack-canary 52 0 3
✅ nextjs-turbopack-stable 52 0 3
✅ nextjs-webpack-canary 52 0 3
✅ nextjs-webpack-stable 52 0 3
✅ nitro-stable 46 0 9
✅ nuxt-stable 46 0 9
✅ sveltekit-stable 46 0 9
✅ vite-stable 46 0 9
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 52 0 3
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 3 0 2
❌ mongodb 51 1 3
✅ redis-dev 3 0 2
✅ redis 52 0 3
✅ turso-dev 3 0 2
❌ turso 4 48 3
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 46 0 9
✅ e2e-local-postgres-nest-stable 46 0 9
✅ e2e-local-prod-nest-stable 46 0 9

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 4, 2026

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.032s (-5.3% 🟢) 1.005s (~) 0.973s 10 1.00x
💻 Local Nitro 0.032s (-2.4%) 1.005s (~) 0.973s 10 1.00x
💻 Local Next.js (Turbopack) 0.043s 1.006s 0.963s 10 1.33x
🌐 Redis Next.js (Turbopack) 0.046s 1.005s 0.959s 10 1.44x
🐘 Postgres Express 0.052s (-15.5% 🟢) 1.012s (~) 0.960s 10 1.62x
🐘 Postgres Nitro 0.055s (+1.7%) 1.013s (~) 0.958s 10 1.72x
🌐 MongoDB Next.js (Turbopack) 0.107s 1.008s 0.901s 10 3.33x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 0.369s (-21.1% 🟢) 1.837s (-15.9% 🟢) 1.468s 10 1.00x
▲ Vercel Nitro 0.437s (-20.9% 🟢) 1.920s (-3.1%) 1.483s 10 1.18x
▲ Vercel Next.js (Turbopack) 0.456s (-9.0% 🟢) 1.998s (-6.1% 🟢) 1.542s 10 1.24x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 1.099s (~) 2.006s (~) 0.906s 10 1.00x
💻 Local Nitro 1.103s (~) 2.006s (~) 0.903s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.103s 2.007s 0.903s 10 1.00x
💻 Local Next.js (Turbopack) 1.105s 2.007s 0.902s 10 1.01x
🐘 Postgres Express 1.123s (-0.5%) 2.011s (~) 0.888s 10 1.02x
🐘 Postgres Nitro 1.136s (~) 2.013s (~) 0.876s 10 1.03x
🌐 MongoDB Next.js (Turbopack) 1.298s 2.008s 0.711s 10 1.18x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.902s (-11.8% 🟢) 3.005s (-13.4% 🟢) 1.104s 10 1.00x
▲ Vercel Nitro 1.990s (-17.9% 🟢) 3.359s (-3.0%) 1.370s 10 1.05x
▲ Vercel Next.js (Turbopack) 2.006s (-7.8% 🟢) 3.606s (+1.4%) 1.599s 10 1.06x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 10.646s 11.023s 0.377s 3 1.00x
💻 Local Next.js (Turbopack) 10.729s 11.024s 0.295s 3 1.01x
💻 Local Express 10.751s (~) 11.022s (~) 0.271s 3 1.01x
💻 Local Nitro 10.766s (~) 11.023s (~) 0.257s 3 1.01x
🐘 Postgres Express 10.790s (-0.6%) 11.042s (~) 0.252s 3 1.01x
🐘 Postgres Nitro 10.852s (~) 11.044s (~) 0.192s 3 1.02x
🌐 MongoDB Next.js (Turbopack) 12.262s 13.021s 0.759s 3 1.15x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 16.488s (-2.5%) 17.705s (-1.6%) 1.217s 2 1.00x
▲ Vercel Nitro 17.111s (+1.2%) 18.750s (+3.8%) 1.639s 2 1.04x
▲ Vercel Next.js (Turbopack) 18.328s (+9.1% 🔺) 19.640s (+8.7% 🔺) 1.312s 2 1.11x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 26.580s 27.052s 0.472s 3 1.00x
🐘 Postgres Nitro 26.893s (-0.7%) 27.065s (-2.4%) 0.172s 3 1.01x
🐘 Postgres Express 26.921s (-0.6%) 27.059s (-3.6%) 0.139s 3 1.01x
💻 Local Next.js (Turbopack) 26.986s 27.054s 0.067s 3 1.02x
💻 Local Express 27.124s (~) 28.050s (~) 0.926s 3 1.02x
💻 Local Nitro 27.166s (~) 28.052s (~) 0.886s 3 1.02x
🌐 MongoDB Next.js (Turbopack) 30.481s 31.041s 0.560s 2 1.15x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 43.190s (-2.9%) 45.142s (-1.1%) 1.953s 2 1.00x
▲ Vercel Express 43.561s (~) 44.979s (~) 1.418s 2 1.01x
▲ Vercel Next.js (Turbopack) 45.446s (-2.8%) 46.854s (-3.6%) 1.408s 2 1.05x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 53.070s 53.597s 0.527s 2 1.00x
🐘 Postgres Express 53.759s (-0.7%) 54.093s (-1.0%) 0.334s 2 1.01x
🐘 Postgres Nitro 53.919s (~) 54.107s (~) 0.187s 2 1.02x
💻 Local Express 55.852s (~) 56.097s (~) 0.245s 2 1.05x
💻 Local Next.js (Turbopack) 55.858s 56.106s 0.249s 2 1.05x
💻 Local Nitro 55.976s (~) 56.099s (-1.8%) 0.123s 2 1.05x
🌐 MongoDB Next.js (Turbopack) 60.700s 61.068s 0.369s 2 1.14x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 92.692s (~) 93.803s (~) 1.111s 1 1.00x
▲ Vercel Nitro 94.383s (-0.8%) 95.402s (-0.7%) 1.019s 1 1.02x
▲ Vercel Next.js (Turbopack) 95.199s (+1.6%) 96.883s (+2.0%) 1.684s 1 1.03x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.272s 2.007s 0.735s 15 1.00x
🐘 Postgres Nitro 1.335s (-3.4%) 2.011s (~) 0.676s 15 1.05x
🐘 Postgres Express 1.388s (-1.3%) 2.011s (~) 0.622s 15 1.09x
💻 Local Express 1.390s (-2.0%) 2.005s (~) 0.615s 15 1.09x
💻 Local Nitro 1.408s (-0.7%) 2.006s (~) 0.598s 15 1.11x
💻 Local Next.js (Turbopack) 1.449s 2.006s 0.557s 15 1.14x
🌐 MongoDB Next.js (Turbopack) 2.130s 3.009s 0.879s 10 1.67x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.244s (~) 3.081s (-11.5% 🟢) 0.837s 10 1.00x
▲ Vercel Next.js (Turbopack) 2.550s (+10.7% 🔺) 3.603s (+1.0%) 1.053s 9 1.14x
▲ Vercel Nitro 2.853s (+10.9% 🔺) 4.162s (+8.8% 🔺) 1.309s 8 1.27x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.022s (-3.7%) 2.516s (-3.4%) 0.494s 12 1.00x
🐘 Postgres Express 2.034s (-1.4%) 2.599s (~) 0.565s 12 1.01x
🌐 Redis Next.js (Turbopack) 2.512s 3.008s 0.496s 10 1.24x
💻 Local Express 2.577s (~) 3.008s (~) 0.431s 10 1.27x
💻 Local Next.js (Turbopack) 2.582s 3.008s 0.426s 10 1.28x
💻 Local Nitro 2.643s (-0.5%) 3.007s (~) 0.364s 10 1.31x
🌐 MongoDB Next.js (Turbopack) 4.657s 5.177s 0.520s 6 2.30x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.833s (+19.3% 🔺) 3.983s (+18.3% 🔺) 1.151s 8 1.00x
▲ Vercel Next.js (Turbopack) 2.869s (-2.5%) 3.852s (-5.6% 🟢) 0.982s 8 1.01x
▲ Vercel Express 3.263s (+17.2% 🔺) 3.933s (-2.0%) 0.670s 8 1.15x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 3.439s (-13.7% 🟢) 4.145s (-12.5% 🟢) 0.706s 8 1.00x
🐘 Postgres Express 3.970s (+8.0% 🔺) 4.744s (+6.4% 🔺) 0.774s 7 1.15x
🌐 Redis Next.js (Turbopack) 4.280s 5.013s 0.733s 6 1.24x
💻 Local Express 7.460s (-1.7%) 8.016s (~) 0.556s 4 2.17x
💻 Local Nitro 7.507s (-2.2%) 8.019s (~) 0.512s 4 2.18x
💻 Local Next.js (Turbopack) 7.541s 8.016s 0.475s 4 2.19x
🌐 MongoDB Next.js (Turbopack) 9.900s 10.350s 0.449s 3 2.88x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.634s (-12.7% 🟢) 4.625s (+20.7% 🔺) 1.991s 7 1.00x
▲ Vercel Nitro 3.363s (-11.3% 🟢) 4.495s (-9.3% 🟢) 1.131s 7 1.28x
▲ Vercel Next.js (Turbopack) 3.429s (-9.3% 🟢) 4.688s (-5.1% 🟢) 1.259s 8 1.30x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.268s 2.006s 0.738s 15 1.00x
🐘 Postgres Nitro 1.385s (~) 2.013s (~) 0.628s 15 1.09x
🐘 Postgres Express 1.397s (-2.0%) 2.010s (~) 0.614s 15 1.10x
💻 Local Express 1.409s (-3.5%) 2.005s (~) 0.596s 15 1.11x
💻 Local Nitro 1.428s (-0.6%) 2.005s (~) 0.577s 15 1.13x
💻 Local Next.js (Turbopack) 1.431s 2.006s 0.575s 15 1.13x
🌐 MongoDB Next.js (Turbopack) 2.149s 3.008s 0.859s 10 1.69x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.069s (-23.6% 🟢) 3.130s (-24.4% 🟢) 1.061s 10 1.00x
▲ Vercel Next.js (Turbopack) 2.161s (-2.6%) 3.264s (-6.1% 🟢) 1.102s 10 1.04x
▲ Vercel Nitro 2.209s (-17.4% 🟢) 3.547s (-2.5%) 1.338s 9 1.07x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.039s (+0.9%) 2.599s (+3.2%) 0.560s 12 1.00x
🐘 Postgres Nitro 2.079s (+1.8%) 2.520s (-3.0%) 0.441s 12 1.02x
🌐 Redis Next.js (Turbopack) 2.514s 3.008s 0.494s 10 1.23x
💻 Local Next.js (Turbopack) 2.636s 3.008s 0.372s 10 1.29x
💻 Local Express 2.685s (-3.2%) 3.008s (~) 0.324s 10 1.32x
💻 Local Nitro 2.694s (-3.0%) 3.008s (~) 0.314s 10 1.32x
🌐 MongoDB Next.js (Turbopack) 4.643s 5.177s 0.534s 6 2.28x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.476s (~) 3.279s (-5.4% 🟢) 0.803s 10 1.00x
▲ Vercel Nitro 2.482s (+5.8% 🔺) 3.654s (+8.6% 🔺) 1.172s 9 1.00x
▲ Vercel Next.js (Turbopack) 2.631s (+4.1%) 3.695s (+3.9%) 1.064s 9 1.06x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.649s (-11.4% 🟢) 4.315s (-11.8% 🟢) 0.666s 7 1.00x
🐘 Postgres Nitro 4.094s (+18.9% 🔺) 4.887s (+17.7% 🔺) 0.793s 7 1.12x
🌐 Redis Next.js (Turbopack) 4.330s 5.013s 0.683s 6 1.19x
💻 Local Next.js (Turbopack) 7.726s 8.267s 0.541s 4 2.12x
💻 Local Express 8.020s (+1.2%) 8.520s (-2.8%) 0.500s 4 2.20x
💻 Local Nitro 8.072s (-1.6%) 8.520s (-5.6% 🟢) 0.448s 4 2.21x
🌐 MongoDB Next.js (Turbopack) 9.968s 10.687s 0.718s 3 2.73x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - -

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 2.690s (-18.0% 🟢) 3.778s (-19.7% 🟢) 1.088s 8 1.00x
▲ Vercel Nitro 2.840s (+5.6% 🔺) 3.859s (-2.5%) 1.018s 8 1.06x
▲ Vercel Next.js (Turbopack) 3.075s (-13.0% 🟢) 4.367s (-10.0% 🟢) 1.292s 7 1.14x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Next.js (Turbopack) 0.148s 1.001s 0.012s 1.018s 0.870s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.157s 0.999s 0.001s 1.008s 0.851s 10 1.07x
💻 Local Express 0.166s (-2.7%) 1.003s (~) 0.011s (-3.5%) 1.017s (~) 0.850s 10 1.13x
💻 Local Nitro 0.168s (-6.3% 🟢) 1.003s (~) 0.011s (-6.0% 🟢) 1.016s (~) 0.848s 10 1.14x
🐘 Postgres Express 0.195s (-7.2% 🟢) 0.994s (~) 0.002s (-5.6% 🟢) 1.012s (~) 0.817s 10 1.32x
🐘 Postgres Nitro 0.196s (-2.6%) 0.995s (~) 0.002s (+15.4% 🔺) 1.013s (~) 0.817s 10 1.33x
🌐 MongoDB Next.js (Turbopack) 0.510s 0.934s 0.002s 1.009s 0.499s 10 3.45x
🐘 Postgres Next.js (Turbopack) ⚠️ missing - - - - -

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.543s (-7.9% 🟢) 2.461s (-3.5%) 0.596s (+31.2% 🔺) 63.369s (+1738.7% 🔺) 61.827s 10 1.00x
▲ Vercel Next.js (Turbopack) 1.570s (+1.8%) 2.220s (+0.8%) 0.150s (+2.9%) 2.793s (-1.1%) 1.223s 10 1.02x
▲ Vercel Nitro 1.688s (-19.9% 🟢) 2.428s (-17.4% 🟢) 0.154s (+7.5% 🔺) 3.104s (-90.7% 🟢) 1.416s 10 1.09x

🔍 Observability: Express | Next.js (Turbopack) | Nitro

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Express 7/12
🐘 Postgres Express 7/12
▲ Vercel Express 10/12
Fastest World by Framework

Winner determined by most benchmark wins

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

Worlds:

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

📋 View full workflow run

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes Vercel-backed CLI auth failures in monorepos by reading orgId from the matched project entry in .vercel/repo.json (Vercel’s monorepo schema), instead of assuming orgId exists at the repo root.

Changes:

  • Update RepoProjectConfig to include orgId and remove orgId from the root RepoProjectsConfig type.
  • Use project.orgId (matched project entry) when constructing the ProjectLink from repo.json.

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

You can also share your feedback on Copilot code review. Take the survey.

Comment thread packages/cli/src/lib/inspect/vercel-link.ts
Comment thread packages/cli/src/lib/inspect/vercel-link.ts
The Vercel CLI's repo.json format puts orgId on each project entry,
not at the root level. The CLI was reading repoConfig.orgId (undefined)
instead of project.orgId, which meant teamId was never set. Without
teamId, the world-vercel URL selector used the direct vercel-workflow.com
URL instead of the api.vercel.com proxy, causing 401 errors because
vercel-workflow.com only accepts OIDC tokens (not CLI auth tokens).

Also fix the RepoProjectConfig/RepoProjectsConfig type definitions
to match the actual repo.json structure.
@TooTallNate TooTallNate enabled auto-merge (squash) March 4, 2026 22:30
@TooTallNate TooTallNate merged commit b68ed63 into main Mar 4, 2026
164 of 166 checks passed
@TooTallNate TooTallNate deleted the fix/cli-team-id-from-repo-link branch March 4, 2026 23:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants