product_spec_domain: deployment
CLI Default with Experimental API Mode
Track: cli-default-experimental-api-20260430
Overview
Restore the Vercel CLI as the default deployment client, and provide the @vercel/client API-based deployment as an opt-in experimental feature gated by a new experimental-api action input.
The previous track (api-based-deployment-20260329) made API the default when vercel-args was empty. However, @vercel/client is an internal Vercel package without semver guarantees, so users should explicitly opt in to the API path rather than have it imposed as the default.
Requirements
Functional Requirements
Non-functional Requirements
Acceptance Criteria
Out of Scope
- Removing the
vercel CLI npm dependency or the @actions/exec dependency.
- Removing or migrating
@vercel/client away from internal-package status.
Track: cli-default-experimental-api-20260430
Plan: .please/docs/tracks/active/cli-default-experimental-api-20260430/plan.md
product_spec_domain: deployment
CLI Default with Experimental API Mode
Overview
Restore the Vercel CLI as the default deployment client, and provide the
@vercel/clientAPI-based deployment as an opt-in experimental feature gated by a newexperimental-apiaction input.The previous track (
api-based-deployment-20260329) made API the default whenvercel-argswas empty. However,@vercel/clientis an internal Vercel package without semver guarantees, so users should explicitly opt in to the API path rather than have it imposed as the default.Requirements
Functional Requirements
experimental-apiboolean input toaction.yml(default:false).createVercelClient()returnsVercelCliClientwhenexperimental-apiisfalse(or unset).experimental-apiistrue,createVercelClient()returnsVercelApiClientand emits acore.warningline stating that API mode is experimental and may break across@vercel/clientupdates.experimental-apiistrueANDvercel-argsis non-empty, the action MUST fail fast with a clear configuration error explaining that the two inputs are mutually exclusive, and instruct the user to choose one.vercel-argsis non-empty andexperimental-apiisfalse, route toVercelCliClient(legacy passthrough preserved).deprecationMessageblock fromvercel-argsandscopeinputs inaction.yml— CLI is now the standard mode and these inputs are no longer deprecated.ActionConfigtype andgetActionConfig()parser insrc/config.tsto surface the newexperimentalApi: booleanfield.README.mdwith: (a) a new "Deployment Mode" section explaining CLI is default andexperimental-apiopt-in, (b) the warning that API mode is experimental, (c) the mutual exclusion rule withvercel-args.Non-functional Requirements
experimental-api, deployment outputs (preview-url,preview-name,deployment-id) must match the previous API-default behavior.vercel-argscontinue unchanged; users who relied on API as default must opt in, but this is a behavior change documented in release notes, not an API contract change).Acceptance Criteria
pnpm test— new unit tests cover all four routing matrix cases:experimental-api=false,vercel-args=""→VercelCliClientexperimental-api=false,vercel-args="--prod"→VercelCliClientexperimental-api=true,vercel-args=""→VercelApiClient(with warning)experimental-api=true,vercel-args="--prod"→ throws config error before client constructionpnpm test:integration— emulator-backed test confirmsexperimental-api=trueend-to-end deployment still produces the expected preview URL.pnpm buildsucceeds anddist/index.jsrebuilds cleanly.pnpm lintpasses with no new warnings.experimental-api, novercel-args) on a sample workflow uses CLI mode (verifiable viacore.infolog line).core.warningis emitted exactly once per action run whenexperimental-api=true.Out of Scope
vercelCLI npm dependency or the@actions/execdependency.@vercel/clientaway from internal-package status.Track: cli-default-experimental-api-20260430
Plan: .please/docs/tracks/active/cli-default-experimental-api-20260430/plan.md