Preview branch and PR deployments incorrectly classified as Production

Project/account: carbon-standard-research
Private repository: CarbonStandard1/carbon-os

Vercel incorrectly classifies every non-production Git deployment as Production.

Original project tests:

  • Production tracked main only.
  • Preview tracked All unassigned git branches.
  • Test branch was iphone-preview.
  • iphone-preview was never merged into main.
  • PREVIEW_BRANCH.md existed on iphone-preview and returned 404 on main.
  • A PR from iphone-preview into main was open and unmerged.
  • vercel.json contained only a cron configuration with no Git or environment override.
  • I disconnected and reconnected the Git integration.
  • New iphone-preview commits were still classified as Production.

Replacement project test:

  • Created a brand-new empty project named carbon-os-preview.
  • Enabled Deployment Protection before connecting Git.
  • Configured Preview environment variables before connecting Git.
  • Connected the same private repository.
  • Changed Production Branch Tracking to the nonexistent branch production-disable.
  • Preview remained enabled for All unassigned git branches.
  • Committed directly to iphone-preview.
  • Vercel still classified the deployment as Production in both the dashboard and CLI.

I immediately removed every incorrect deployment. There are currently no deployments.

This appears to be an account-level or GitHub App integration defect. How can I make iphone-preview commits create protected Preview deployments? Please do not trigger a deployment while investigating.

There’s another community post with 404 debugging tips that might be helpful. Please give these solutions a try and let us know how it goes.

A human should be around soon to offer more advice. But you can also get helpful information quickly by asking v0.

A plain vercel deploy from the locally linked carbon-os-preview project was classified as Production, assigned the production alias, and reported “Deployed to production.” No --prod flag was used. The deployment was immediately removed. Git branch tracking is configured with main as Production and all unassigned branches as Preview. This reproduces the issue outside the Git integration.

Additional reproduction details:

  • The replacement project is now correctly configured with Framework Preset: Next.js.
  • Production branch is main.
  • Preview tracks all unassigned Git branches.
  • Local checkout was switched to a clean non-production branch named iphone-preview-cli.
  • Preview environment variables and project settings were refreshed with vercel pull --yes --environment=preview.
  • vercel deploy was still classified and aliased as Production.
  • Most importantly, vercel deploy --target=preview was also classified and aliased as Production.
  • The CLI reported: “Deployed to production.”
  • No --prod flag was used.
  • Every incorrect deployment was immediately removed.

This confirms that the explicit Preview target is being overridden. Please investigate the project/account deployment-target mapping. There are currently no deployments, and please do not trigger one during investigation.