Preview branch and CLI deployments are always classified as Production

Hello,

I am experiencing a reproducible deployment-target issue on a Vercel Hobby project.

Project details:

  • Project name: fipi-desk-preview
  • Project ID: prj_R8lOXkGLiSXS265uPj4AxukW4kEn
  • GitHub repository: private personal repository
  • GitHub default branch: main
  • Vercel Production Branch: main
  • Test branch: preview
  • Current active deployments: none
  • Current active aliases: none
  • Custom domains: none

Expected behavior:

  • A CLI deployment without --prod should create a Preview deployment.
  • A GitHub deployment from the non-production branch preview should create a Preview deployment.

Actual behavior:

All three deployment methods were classified as Production.

Attempt 1 — Prebuilt CLI deployment

vercel deploy --prebuilt --target=preview --scope smux84s-projects

Deployment ID:

dpl_2LZUiKVaT46xwr79t9YK1nXJsewK

Result: production

Attempt 2 — Standard CLI deployment

vercel deploy --scope smux84s-projects

No --prod flag was used.

Deployment ID:

dpl_6r71yz92SES1XuUHz4BBJQENsa2Q

Result: production

Attempt 3 — GitHub deployment from a non-production branch

A commit was pushed to the branch:

preview

Commit:

93fc4b7

Deployment ID:

dpl_Bgiq1pCgEJW46KNgWd6TrBHE7S2r

The Vercel Activity Log recorded the commit from the preview branch as deployed “to production”.

All three deployments were immediately deleted.

Read-only diagnostics performed

The visible project configuration appears correct:

  • link.productionBranch: main
  • Production target: branch tracking main
  • Preview target: All unassigned git branches
  • previewDeploymentsDisabled: not enabled
  • Git integration: enabled
  • Correct GitHub repository connected
  • No custom environments
  • No branch matcher assigning preview to Production
  • No local VERCEL_* environment variables
  • No vercel.json
  • No vercel.ts
  • No .vercelignore
  • No repository scripts using --prod
  • No repository configuration forcing the Production target
  • Preview environment variables target only Preview
  • Vercel Authentication remains enabled

The project was initially created through an app integration. Vercel’s support assistant identified the related integration as:

cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp

The support assistant confirmed that the visible configuration is correct and suggested a possible stale or inconsistent internal project state, potentially involving a deprecated github.autoAlias setting or app-integration metadata that is not exposed through the standard API.

Questions

  1. Why is a branch other than main being deployed to Production?
  2. Why is --target=preview being ignored?
  3. Can the project’s internal deployment target state be reset?
  4. Is disconnecting and reconnecting GitHub sufficient?
  5. Should the project be recreated by importing it directly from GitHub?
  6. Is there a hidden or deprecated github.autoAlias configuration affecting this project?

I do not authorize or need another Production deployment for troubleshooting.

I can provide sanitized screenshots of:

  • Production branch tracking set to main
  • Preview set to all unassigned Git branches
  • Git repository connection
  • Activity Log showing 93fc4b7 in preview deployed “to production”
  • Empty Deployments page

No credentials, environment-variable values, passwords or tokens are included.

I experienced the same behavior on a newly created Vercel Hobby project.

Environment:

  • Vercel CLI 56.3.2

  • Node.js 24.18.0

  • GitHub integration not enabled

  • Two synthetic environment variables configured only for Preview

  • No Production environment variables configured

  • No deployments existed before the test

I ran:

vercel deploy --yes

I did not include --prod. I expected a Preview deployment, but Vercel reported:

Deployed to production

It also assigned a production alias.

I immediately removed the deployment and verified that the project now has zero deployments and no Production URL.

These Preview-targeted local commands completed successfully without creating a remote deployment:

vercel pull --environment=preview --yes
vercel build --target=preview

Can Vercel confirm whether this is a known CLI or platform issue and provide a workflow that guarantees a remote deployment will be classified as Preview rather than Production?

I will not attempt another remote deployment until Preview classification can be guaranteed.

I independently reproduced the same behavior on a newly created Hobby project.

Environment:

  • Vercel CLI 56.3.2 / Node.js 24.16.0
  • Production branch tracking: main
  • Preview branch tracking: all unassigned Git branches
  • Vercel Authentication: Standard Protection
  • Preview-only environment variables; no Production variables
  • No custom environment, branch matcher, or deployment-target setting

Reproduction:

  1. An explicit vercel deploy --target=preview --yes request was classified as Production and assigned the project alias.
  2. After connecting a private GitHub repository, a real pull request from a non-main branch was also classified as Production.

Neither deployment was used for QA. Both were deleted immediately, Git auto-deploy was disconnected, and the project now has zero deployments and zero domains.

The in-dashboard Vercel Agent confirmed that both results are unexpected and noted an empty targets: {} history. It recommended engineering investigation, but the Hobby case form does not allow dedicated CI/CD → Environments support. A git-metadata command was suggested only as something that should route to Preview, not as a guarantee, so I have not retried it.

Can Vercel confirm whether this first-deployment/empty-target behavior is intentional, and provide a supported request that guarantees built-in Preview classification? I do not authorize or need another Production deployment for troubleshooting. No project, repository, deployment, credential, or environment-variable identifiers are included here.

Additional diagnostic update:

I used Vercel’s authenticated Support Agent to inspect the affected project. The Agent confirmed:

  • The project is correctly detected as Next.js

  • Preview environment variables are configured correctly

  • No Git integration is connected

  • The project currently has zero deployments

  • No Production alias is assigned

  • The local .vercel/project.json contains no target, Production, alias, or Git-related settings

  • No root vercel.json exists

  • The observed behavior contradicts Vercel’s documented CLI behavior

  • No configuration issue was found that explains the Production classification

The Agent described the incident as anomalous and prepared a platform support case, but the Hobby-plan case form prevented submission for a Vercel CLI issue and redirected back to the Community.

vercel@56.4.1 is now available. The original unintended Production deployment occurred with 56.3.2. I have not repeated the deployment with 56.4.1 because I have found no release note or staff confirmation that this classification issue was fixed, and another test could create another unintended Production deployment.

The project remains preserved with zero deployments. Could a Vercel staff member confirm whether 56.4.1 contains a relevant fix or provide a Preview-safe verification procedure that cannot create a Production deployment?