From 631136de17fbbb883066038716bce30608ae8ee8 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 10 Feb 2026 20:10:06 -0800 Subject: [PATCH 1/3] Fix projectConfig.projectId containing project name instead of ID --- packages/cli/src/lib/inspect/env.ts | 6 +++++- packages/cli/src/lib/inspect/web.ts | 3 ++- packages/core/src/runtime/world.ts | 1 + packages/web/app/server/workflow-server-actions.server.ts | 5 +++++ packages/world-vercel/src/utils.ts | 3 +++ 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lib/inspect/env.ts b/packages/cli/src/lib/inspect/env.ts index c4137dfbe2..c78d5a3344 100644 --- a/packages/cli/src/lib/inspect/env.ts +++ b/packages/cli/src/lib/inspect/env.ts @@ -40,6 +40,7 @@ export const getEnvVars = (): Record => { WORKFLOW_VERCEL_ENV: env.WORKFLOW_VERCEL_ENV || '', WORKFLOW_VERCEL_AUTH_TOKEN: env.WORKFLOW_VERCEL_AUTH_TOKEN || '', WORKFLOW_VERCEL_PROJECT: env.WORKFLOW_VERCEL_PROJECT || '', + WORKFLOW_VERCEL_PROJECT_NAME: env.WORKFLOW_VERCEL_PROJECT_NAME || '', WORKFLOW_VERCEL_TEAM: env.WORKFLOW_VERCEL_TEAM || '', WORKFLOW_LOCAL_UI: env.WORKFLOW_LOCAL_UI || '', PORT: env.PORT || '', @@ -189,7 +190,10 @@ export const inferVercelEnvVars = async () => { const inferredProject = await inferVercelProjectAndTeam(); if (inferredProject) { const { projectId, projectName, teamId } = inferredProject; - envVars.WORKFLOW_VERCEL_PROJECT = projectName || projectId; + // WORKFLOW_VERCEL_PROJECT is the real project ID (e.g., prj_xxx) + envVars.WORKFLOW_VERCEL_PROJECT = projectId; + // WORKFLOW_VERCEL_PROJECT_NAME is the project slug (e.g., my-app) + envVars.WORKFLOW_VERCEL_PROJECT_NAME = projectName || projectId; envVars.WORKFLOW_VERCEL_TEAM = teamId; writeEnvVars(envVars); } else { diff --git a/packages/cli/src/lib/inspect/web.ts b/packages/cli/src/lib/inspect/web.ts index 34cb77d2db..8915beeb25 100644 --- a/packages/cli/src/lib/inspect/web.ts +++ b/packages/cli/src/lib/inspect/web.ts @@ -98,7 +98,8 @@ export async function launchWebUI( envVars.WORKFLOW_TARGET_WORLD ); const teamSlug = envVars.WORKFLOW_VERCEL_TEAM; - const projectName = envVars.WORKFLOW_VERCEL_PROJECT; + const projectName = + envVars.WORKFLOW_VERCEL_PROJECT_NAME || envVars.WORKFLOW_VERCEL_PROJECT; // Check if user wants local UI via flag or environment variable const useLocalUi = flags.localUi; diff --git a/packages/core/src/runtime/world.ts b/packages/core/src/runtime/world.ts index 1da089e729..8e14940d76 100644 --- a/packages/core/src/runtime/world.ts +++ b/packages/core/src/runtime/world.ts @@ -36,6 +36,7 @@ export const createWorld = (): World => { projectConfig: { environment: process.env.WORKFLOW_VERCEL_ENV, projectId: process.env.WORKFLOW_VERCEL_PROJECT, + projectName: process.env.WORKFLOW_VERCEL_PROJECT_NAME, teamId: process.env.WORKFLOW_VERCEL_TEAM, }, }); diff --git a/packages/web/app/server/workflow-server-actions.server.ts b/packages/web/app/server/workflow-server-actions.server.ts index 3e9709b3dd..5f46202a92 100644 --- a/packages/web/app/server/workflow-server-actions.server.ts +++ b/packages/web/app/server/workflow-server-actions.server.ts @@ -205,6 +205,7 @@ const WORLD_ENV_ALLOWLIST_BY_TARGET_WORLD: Record = { 'WORKFLOW_VERCEL_ENV', 'WORKFLOW_VERCEL_TEAM', 'WORKFLOW_VERCEL_PROJECT', + 'WORKFLOW_VERCEL_PROJECT_NAME', 'WORKFLOW_VERCEL_AUTH_TOKEN', ], '@workflow/world-vercel': [ @@ -212,6 +213,7 @@ const WORLD_ENV_ALLOWLIST_BY_TARGET_WORLD: Record = { 'WORKFLOW_VERCEL_ENV', 'WORKFLOW_VERCEL_TEAM', 'WORKFLOW_VERCEL_PROJECT', + 'WORKFLOW_VERCEL_PROJECT_NAME', 'WORKFLOW_VERCEL_AUTH_TOKEN', ], @@ -432,6 +434,9 @@ async function getWorldFromEnv(userEnvMap: EnvMap): Promise { projectId: userEnvMap.WORKFLOW_VERCEL_PROJECT || process.env.WORKFLOW_VERCEL_PROJECT, + projectName: + userEnvMap.WORKFLOW_VERCEL_PROJECT_NAME || + process.env.WORKFLOW_VERCEL_PROJECT_NAME, teamId: userEnvMap.WORKFLOW_VERCEL_TEAM || process.env.WORKFLOW_VERCEL_TEAM, }, diff --git a/packages/world-vercel/src/utils.ts b/packages/world-vercel/src/utils.ts index d1ad41b47a..5dbe0b6988 100644 --- a/packages/world-vercel/src/utils.ts +++ b/packages/world-vercel/src/utils.ts @@ -34,7 +34,10 @@ export interface APIConfig { token?: string; headers?: RequestInit['headers']; projectConfig?: { + /** The real Vercel project ID (e.g., prj_xxx) */ projectId?: string; + /** The project name/slug (e.g., my-app), used for dashboard URLs */ + projectName?: string; teamId?: string; environment?: string; }; From 87c233b1cccd832353e6010efa166ac7c2041a81 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Sat, 14 Feb 2026 02:38:31 -0800 Subject: [PATCH 2/3] add changeset --- .changeset/fix-project-config.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/fix-project-config.md diff --git a/.changeset/fix-project-config.md b/.changeset/fix-project-config.md new file mode 100644 index 0000000000..ef67206cd5 --- /dev/null +++ b/.changeset/fix-project-config.md @@ -0,0 +1,8 @@ +--- +"@workflow/cli": patch +"@workflow/core": patch +"@workflow/web": patch +"@workflow/world-vercel": patch +--- + +Fix `projectConfig.projectId` to contain the real project ID instead of the project name From 2a6cf4bb0eecfbd60e6e065317e22ecda56fc6ef Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Wed, 18 Feb 2026 01:11:03 -0800 Subject: [PATCH 3/3] Address review: fix changeset description, normalize slug-based project IDs, add clarifying comments --- .changeset/fix-project-config.md | 2 +- packages/cli/src/lib/inspect/env.ts | 15 +++++++++++++-- packages/core/src/runtime/world.ts | 4 ++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.changeset/fix-project-config.md b/.changeset/fix-project-config.md index ef67206cd5..095497e4ba 100644 --- a/.changeset/fix-project-config.md +++ b/.changeset/fix-project-config.md @@ -5,4 +5,4 @@ "@workflow/world-vercel": patch --- -Fix `projectConfig.projectId` to contain the real project ID instead of the project name +Separate project ID and project name into distinct env vars (WORKFLOW_VERCEL_PROJECT and WORKFLOW_VERCEL_PROJECT_NAME) diff --git a/packages/cli/src/lib/inspect/env.ts b/packages/cli/src/lib/inspect/env.ts index c78d5a3344..a4a8c2f7d0 100644 --- a/packages/cli/src/lib/inspect/env.ts +++ b/packages/cli/src/lib/inspect/env.ts @@ -185,7 +185,18 @@ export const inferVercelProjectAndTeam = async () => { export const inferVercelEnvVars = async () => { const envVars = getEnvVars(); - if (!envVars.WORKFLOW_VERCEL_PROJECT || !envVars.WORKFLOW_VERCEL_TEAM) { + // Infer project/team from .vercel folder when: + // - WORKFLOW_VERCEL_PROJECT or WORKFLOW_VERCEL_TEAM is missing, OR + // - WORKFLOW_VERCEL_PROJECT is set but doesn't look like a real project ID + // (e.g., user passed a slug via --project flag), OR + // - WORKFLOW_VERCEL_PROJECT_NAME is missing (need to populate the slug) + const needsInference = + !envVars.WORKFLOW_VERCEL_PROJECT || + !envVars.WORKFLOW_VERCEL_TEAM || + !envVars.WORKFLOW_VERCEL_PROJECT_NAME || + !envVars.WORKFLOW_VERCEL_PROJECT.startsWith('prj_'); + + if (needsInference) { logger.debug('Inferring vercel project and team from .vercel folder'); const inferredProject = await inferVercelProjectAndTeam(); if (inferredProject) { @@ -194,7 +205,7 @@ export const inferVercelEnvVars = async () => { envVars.WORKFLOW_VERCEL_PROJECT = projectId; // WORKFLOW_VERCEL_PROJECT_NAME is the project slug (e.g., my-app) envVars.WORKFLOW_VERCEL_PROJECT_NAME = projectName || projectId; - envVars.WORKFLOW_VERCEL_TEAM = teamId; + envVars.WORKFLOW_VERCEL_TEAM = envVars.WORKFLOW_VERCEL_TEAM || teamId; writeEnvVars(envVars); } else { logger.warn( diff --git a/packages/core/src/runtime/world.ts b/packages/core/src/runtime/world.ts index 8e14940d76..2d1edc13cc 100644 --- a/packages/core/src/runtime/world.ts +++ b/packages/core/src/runtime/world.ts @@ -35,8 +35,8 @@ export const createWorld = (): World => { token: process.env.WORKFLOW_VERCEL_AUTH_TOKEN, projectConfig: { environment: process.env.WORKFLOW_VERCEL_ENV, - projectId: process.env.WORKFLOW_VERCEL_PROJECT, - projectName: process.env.WORKFLOW_VERCEL_PROJECT_NAME, + projectId: process.env.WORKFLOW_VERCEL_PROJECT, // real ID (prj_xxx) + projectName: process.env.WORKFLOW_VERCEL_PROJECT_NAME, // slug (my-app) teamId: process.env.WORKFLOW_VERCEL_TEAM, }, });