fix(cli): fix missing planId in non-subscription plan web fallback#15152
fix(cli): fix missing planId in non-subscription plan web fallback#15152
Conversation
🦋 Changeset detectedLatest commit: ebed50f The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
📦 CLI Tarball ReadyThe Vercel CLI tarball for this PR is now available! Quick TestYou can test this PR's CLI directly by running: npx https://vercel-hhkl2jvja.vercel.sh/tarballs/vercel.tgz --helpUse in vercel.jsonTo use this CLI version in your project builds, add to your {
"build": {
"env": {
"VERCEL_CLI_VERSION": "vercel@https://vercel-hhkl2jvja.vercel.sh/tarballs/vercel.tgz"
}
}
}Python Runtime WheelA Python runtime wheel was also built for this PR. |
🧪 Unit Test StrategyComparing: Strategy: Affected packages only ✅ Only testing packages that have been modified or depend on modified packages. Affected packages - 1 (3%)
Unaffected packages - 39 (98%)
Results
This comment is automatically generated based on the affected testing strategy |
When a user interactively selects a non-subscription billing plan, the web checkout fallback was passing `billingPlanId` (the raw --plan flag value, undefined when not passed) instead of `billingPlan.id` (the plan the user actually selected). This meant the web UI wouldn't pre-select the chosen plan.
317ce51 to
c7233da
Compare
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## vercel@50.22.0 ### Minor Changes - feat(cli): add `vercel integration guide` command ([#15108](#15108)) Adds a new `vercel integration guide` subcommand that displays getting started guides, code snippets, and resource links for marketplace integrations directly in the terminal. Supports single-product and multi-product integrations with interactive product and framework selection. Includes `--framework` flag for non-interactive framework selection (useful for CI/agents). Output is raw markdown written to stdout for easy piping to files or other tools. ### Patch Changes - fix(cli): fix missing planId in non-subscription plan web fallback ([#15152](#15152)) - [services]([#15093](#15093)) - consolidate `workspace` and `entrypoint` from `experimentalServices` `vercel.json` schema - make `framework` config in service optional -- infer framework from service workspace when not explicitly provided - Updated dependencies \[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540), [`fc56fb91b4dafabe0f68f86efeabbaf98b2642bc`](fc56fb9)]: - @vercel/build-utils@13.4.3 - @vercel/python@6.15.0 - @vercel/backends@0.0.36 - @vercel/elysia@0.1.39 - @vercel/express@0.1.48 - @vercel/fastify@0.1.42 - @vercel/go@3.4.1 - @vercel/h3@0.1.48 - @vercel/hono@0.2.42 - @vercel/hydrogen@1.3.5 - @vercel/koa@0.1.22 - @vercel/nestjs@0.2.43 - @vercel/next@4.15.31 - @vercel/node@5.6.6 - @vercel/redwood@2.4.9 - @vercel/remix-builder@5.5.10 - @vercel/ruby@2.3.1 - @vercel/rust@1.0.5 - @vercel/static-build@2.8.40 ## @vercel/python@6.15.0 ### Minor Changes - Optimize cold starts for lambdas >250MB ([#15080](#15080)) 1. Remove `uv pip install` and replace it with `uv sync --inexact --frozen` 2. Pack the lambda zip with dependencies up to 245MB then only install the remaining ones at runtime ### Patch Changes - Updated dependencies \[[`fc56fb91b4dafabe0f68f86efeabbaf98b2642bc`](fc56fb9)]: - @vercel/python-analysis@0.6.0 ## @vercel/python-analysis@0.6.0 ### Minor Changes - Optimize cold starts for lambdas >250MB ([#15080](#15080)) 1. Remove `uv pip install` and replace it with `uv sync --inexact --frozen` 2. Pack the lambda zip with dependencies up to 245MB then only install the remaining ones at runtime ## @vercel/backends@0.0.36 ### Patch Changes - Updated dependencies \[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]: - @vercel/build-utils@13.4.3 ## @vercel/build-utils@13.4.3 ### Patch Changes - [services]([#15093](#15093)) - consolidate `workspace` and `entrypoint` from `experimentalServices` `vercel.json` schema - make `framework` config in service optional -- infer framework from service workspace when not explicitly provided - Updated dependencies \[[`fc56fb91b4dafabe0f68f86efeabbaf98b2642bc`](fc56fb9)]: - @vercel/python-analysis@0.6.0 ## @vercel/cervel@0.0.23 ### Patch Changes - Updated dependencies \[]: - @vercel/backends@0.0.36 ## @vercel/client@17.2.45 ### Patch Changes - Updated dependencies \[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]: - @vercel/build-utils@13.4.3 ## @vercel/elysia@0.1.39 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 ## @vercel/express@0.1.48 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 - @vercel/cervel@0.0.23 ## @vercel/fastify@0.1.42 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 ## @vercel/fs-detectors@5.8.9 ### Patch Changes - [services]([#15093](#15093)) - consolidate `workspace` and `entrypoint` from `experimentalServices` `vercel.json` schema - make `framework` config in service optional -- infer framework from service workspace when not explicitly provided ## @vercel/gatsby-plugin-vercel-builder@2.0.138 ### Patch Changes - Updated dependencies \[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]: - @vercel/build-utils@13.4.3 ## @vercel/h3@0.1.48 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 ## @vercel/hono@0.2.42 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 ## @vercel/koa@0.1.22 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 ## @vercel/nestjs@0.2.43 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.6 ## @vercel/node@5.6.6 ### Patch Changes - Updated dependencies \[[`09b3540742ac86b768de9775929fef1ef36db412`](09b3540)]: - @vercel/build-utils@13.4.3 ## @vercel/static-build@2.8.40 ### Patch Changes - Updated dependencies \[]: - @vercel/gatsby-plugin-vercel-builder@2.0.138 ## @vercel/python-runtime@0.5.0 ### Minor Changes - Optimize cold starts for lambdas >250MB ([#15080](#15080)) 1. Remove `uv pip install` and replace it with `uv sync --inexact --frozen` 2. Pack the lambda zip with dependencies up to 245MB then only install the remaining ones at runtime <!-- VADE_RISK_START --> > [!NOTE] > Low Risk Change > > This PR is an automated Changesets release that only updates version numbers in package.json files and CHANGELOG.md files across multiple packages, with no logic changes. > > - Version bumps across ~25 packages (patch and minor versions) > - CHANGELOG.md updates documenting previous changes > - Deleted changeset markdown files consumed by release process > > <sup>Risk assessment for [commit f054c83](https://github.com/vercel/vercel/commit/f054c83041bfd8d833afeb59bac76918875f980e).</sup> <!-- VADE_RISK_END --> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

Summary
vercel integration add, the web checkout fallback was passingbillingPlanId(the raw--planflag,undefinedwhen not passed) instead ofbillingPlan.id(the actually-selected plan)Root cause
Introduced in #14965 ("Add --plan flag to vercel integration add"). When threading
billingPlanIdthrough the non-subscription web fallback inprovisionResourceViaCLI, the wrong variable was passed:Why TypeScript didn't catch it: Both
billingPlanId(flags['--plan']) andbillingPlan.idarestring | undefined, so the type checker sees them as interchangeable.Why the existing unit test didn't catch it: The test at
add.test.ts:1399only exercises--plan pro(explicit flag), wherebillingPlanId === billingPlan.id. There was no test for the interactive selection path (no--planflag) wherebillingPlanIdisundefinedbutbillingPlan.idis the selected plan.billingPlanIdbillingPlan.id--plan pro(tested)"pro""pro"undefined"pro"planIdparam missing from URLTest plan
Unit tests
New test added: "should include planId in web UI URL for non-subscription plan selected interactively"
acme-prepayment(no--planflag)planId=prois present in the URL passed toopen()expected null to deeply equal 'pro'— confirms the bugplanId=propresent in URLManual testing
The non-subscription billing plan → web fallback path is unit-only because no available real integration has prepayment-type plans on the test team. Verified by testing:
vc integration add prisma --scope team_ZrswwWlkgu3cRre7Tk7Rr0HV): has billing plans (Free, Starter, Pro, Business) but all aresubscriptiontype → goes to CLI provisioning, never hits the web fallbackvc integration add upstash/upstash-kv --scope team_ZrswwWlkgu3cRre7Tk7Rr0HV): unsupported wizard → browser fallback (different code path, no billing plan selection)vc integration add neon --scope team_ZrswwWlkgu3cRre7Tk7Rr0HV): unsupported wizard → browser fallback (different code path)Code paths covered
--planflag → non-subscription → web fallback (regression)🤖 Generated with Claude Code
Note
Low Risk Change
Simple bug fix changing a variable reference from
billingPlanIdtobillingPlan.idto pass the correct plan ID, with corresponding test coverage added.billingPlan.idinstead ofbillingPlanIdin web fallbackRisk assessment for commit ebed50f.