Skip to content

fix(cli): Require product slug for multi-product integrations in non-TTY#15047

Merged
tonypan2 merged 1 commit intomainfrom
tonypan/remove-interactive-product-select
Feb 13, 2026
Merged

fix(cli): Require product slug for multi-product integrations in non-TTY#15047
tonypan2 merged 1 commit intomainfrom
tonypan/remove-interactive-product-select

Conversation

@tonypan2
Copy link
Copy Markdown
Contributor

@tonypan2 tonypan2 commented Feb 13, 2026

Fixes: MKT-2775

Summary

  • In the auto-provision path (add-auto-provision.ts), require a product slug for multi-product integrations in non-TTY mode (CI, agents) — error with actionable guidance listing available products in slash syntax
  • In TTY mode (human terminal), keep the interactive product selector so humans can still pick interactively
  • Legacy add path is unchanged

Non-TTY (agents/CI): actionable error

$ echo "" | FF_AUTO_PROVISION_INSTALL=1 vc integration add upstash
Error: Integration "upstash" has multiple products. Specify one with:

  upstash/upstash-qstash
  upstash/upstash-search
  upstash/upstash-vector
  upstash/upstash-kv

Example: vercel integration add upstash/upstash-qstash

TTY (humans): interactive selector preserved

$ FF_AUTO_PROVISION_INSTALL=1 vc integration add upstash
? Select a product (Use arrow keys)
❯ Upstash QStash/Workflow
  Upstash Search
  Upstash Vector
  Upstash for Redis

Test plan

Unit tests

$ cd packages/cli && pnpm vitest run test/unit/commands/integration/add-auto-provision.test.ts

 ✓ test/unit/commands/integration/add-auto-provision.test.ts  (60 tests) 3535ms

 Test Files  1 passed (1)
      Tests  60 passed (60)

Manual testing

Scenario Command Expected Actual
FF=1, multi-product, no slug, TTY FF_AUTO_PROVISION_INSTALL=1 vc integration add upstash Interactive product selector Select a product prompt shown with 4 products
FF=1, multi-product, no slug, non-TTY echo "" | FF_AUTO_PROVISION_INSTALL=1 vc integration add upstash Error with product list ✅ Error with slash syntax choices
FF=1, multi-product, slash syntax FF_AUTO_PROVISION_INSTALL=1 vc integration add upstash/upstash-kv Selects product, proceeds Installing Upstash for Redis by Upstash...

Code paths covered

Path Verified by
Auto-provision: multiple products + no slug + non-TTY → error Unit + manual
Auto-provision: multiple products + no slug + TTY → interactive selector Unit + manual
Auto-provision: multiple products + slash syntax → direct select Unit + manual
Auto-provision: single product + no slug → auto-select Unit
Legacy: multiple products → interactive prompt (unchanged) Unit

🤖 Generated with Claude Code

Note

Low Risk Change

This PR adds a defensive check that rejects multi-product integrations in non-TTY mode when no product slug is specified, requiring explicit user input rather than allowing ambiguous behavior.

  • Adds non-TTY check to error out when multiple products exist without explicit slug
  • Error message lists available products in slash syntax format
  • Test updates verify new non-TTY error behavior

Risk assessment for commit 4acdc8d.

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 13, 2026

🦋 Changeset detected

Latest commit: 4acdc8d

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

This PR includes changesets to release 1 package
Name Type
vercel 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

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 13, 2026

📦 CLI Tarball Ready

The Vercel CLI tarball for this PR is now available!

Quick Test

You can test this PR's CLI directly by running:

npx https://vercel-gxjzprbtg.vercel.sh/tarballs/vercel.tgz --help

Use in vercel.json

To use this CLI version in your project builds, add to your vercel.json:

{
  "build": {
    "env": {
      "VERCEL_CLI_VERSION": "vercel@https://vercel-gxjzprbtg.vercel.sh/tarballs/vercel.tgz"
    }
  }
}

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 13, 2026

🧪 Unit Test Strategy

Comparing: 6f3fd0a4acdc8d (view diff)

Strategy: Affected packages only

✅ Only testing packages that have been modified or depend on modified packages.

Affected packages - 1 (3%)
  1. vercel
Unaffected packages - 39 (98%)
  1. @vercel-internals/get-package-json
  2. @vercel/backends
  3. @vercel/build-utils
  4. @vercel/cervel
  5. @vercel/cli-auth
  6. @vercel/client
  7. @vercel/config
  8. @vercel/detect-agent
  9. @vercel/edge
  10. @vercel/elysia
  11. @vercel/error-utils
  12. @vercel/express
  13. @vercel/fastify
  14. @vercel/firewall
  15. @vercel/frameworks
  16. @vercel/fs-detectors
  17. @vercel/functions
  18. @vercel/gatsby-plugin-vercel-builder
  19. @vercel/go
  20. @vercel/h3
  21. @vercel/hono
  22. @vercel/hydrogen
  23. @vercel/koa
  24. @vercel/nestjs
  25. @vercel/next
  26. @vercel/node
  27. @vercel/oidc
  28. @vercel/oidc-aws-credentials-provider
  29. @vercel/python
  30. @vercel/python-analysis
  31. @vercel/redwood
  32. @vercel/related-projects
  33. @vercel/remix-builder
  34. @vercel/routing-utils
  35. @vercel/ruby
  36. @vercel/rust
  37. @vercel/static-build
  38. @vercel/static-config
  39. examples

Results

  • Unit tests: Only affected packages will run unit tests
  • E2E tests: Running in parallel via E2E Tests workflow
  • Type checks: Only affected packages will run type checks

This comment is automatically generated based on the affected testing strategy

@tonypan2 tonypan2 force-pushed the tonypan/remove-interactive-product-select branch from 28a5e84 to a752ad7 Compare February 13, 2026 19:13
@tonypan2 tonypan2 force-pushed the tonypan/remove-interactive-product-select branch from a752ad7 to 915525f Compare February 13, 2026 20:34
@tonypan2 tonypan2 changed the title fix(cli): Remove interactive product selection from integration add fix(cli): Remove interactive product selection from auto-provision path Feb 13, 2026
@tonypan2 tonypan2 marked this pull request as ready for review February 13, 2026 20:35
@tonypan2 tonypan2 requested review from a team as code owners February 13, 2026 20:35
@tonypan2 tonypan2 force-pushed the tonypan/remove-interactive-product-select branch from 915525f to cf226b1 Compare February 13, 2026 20:37
Copy link
Copy Markdown

@t-mdo t-mdo left a comment

Choose a reason for hiding this comment

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

Following our discussion, i think it'd be cool to keep it, based on TTY = interactive, non-TTY fails fast

Replace the interactive `client.input.select()` prompt in `selectProduct`
with an error message showing available products and slash syntax when
multiple products exist without a specified slug.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@tonypan2 tonypan2 force-pushed the tonypan/remove-interactive-product-select branch from cf226b1 to 4acdc8d Compare February 13, 2026 21:19
@tonypan2 tonypan2 changed the title fix(cli): Remove interactive product selection from auto-provision path fix(cli): Require product slug for multi-product integrations in non-TTY Feb 13, 2026
@tonypan2 tonypan2 merged commit b9846dc into main Feb 13, 2026
138 of 143 checks passed
@tonypan2 tonypan2 deleted the tonypan/remove-interactive-product-select branch February 13, 2026 21:41
mehulkar pushed a commit that referenced this pull request Feb 16, 2026
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 publish to npm
yourself or [setup this action to publish
automatically](https://github.com/changesets/action#with-publishing). 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.18.0

### Minor Changes

- Support easier auth from cursor / claude
([#15050](#15050))

### Patch Changes

- non-interactive mode for link
([#14884](#14884))

- Add experimental manual deployment support
([#14857](#14857))

- Fix `integration remove`, `integration balance`, and `integration
open` commands failing to find integrations by explicitly passing
`teamId` to the configurations API
([#15054](#15054))

- Require slash syntax for multi-product integrations in non-TTY mode,
keep interactive product selector for TTY
([#15047](#15047))

- Move builders back into bundle
([#15059](#15059))

- Updated dependencies
\[[`463395162462988e7d3276781d2fdff0685e225b`](4633951),
[`6e58410ff849c281735c6acae59b3b0e86136f15`](6e58410)]:
    -   @vercel/go@3.4.1
    -   @vercel/ruby@2.3.1
    -   @vercel/python@6.13.0
    -   @vercel/static-build@2.8.37

## @vercel/python@6.13.0

### Minor Changes

- Add runtime dependency install to support larger Python functions
([#14976](#14976))

This adds logic to calculate the total size of a lambda at build time
and offload dependencies
to a \_runtime_requirements.txt file so they can be installed at runtime
by uv. This allows us to
    deploy functions up to the total size of the /tmp folder.

## @vercel/client@17.2.42

### Patch Changes

- Add experimental manual deployment support
([#14857](#14857))

## @vercel/fs-detectors@5.8.7

### Patch Changes

- [services] infer workspace from manifest: when workspace is not
explicitly configured, infer from nearest manifest to entrypoint
([#14986](#14986))

## @vercel/go@3.4.1

### Patch Changes

- Forward Go and Ruby dev server output through `startDevServer`
stdout/stderr callbacks so service logs are correctly prefixed in
multi-service `vercel dev`.
([#14989](#14989))

## @vercel/ruby@2.3.1

### Patch Changes

- Forward Go and Ruby dev server output through `startDevServer`
stdout/stderr callbacks so service logs are correctly prefixed in
multi-service `vercel dev`.
([#14989](#14989))

## @vercel/python-runtime@0.4.1

### Patch Changes

- fix PyPI publication integration in release flow
([#15033](#15033))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

2 participants