
Andrew Hanna

Andrew Hanna

Short answer: an AppExchange release runs in five stages: create a beta package version, validate it, promote it to released, link it to your listing, then move subscribers onto it. Every second-generation managed package version is born a beta, promotion is a one-way door, and only security-reviewed packages can be pushed into subscriber orgs.
sf package version promote turns the beta
into a released version.
Most ISV teams already do all five somewhere. What they usually lack is the ordering, the gate between each stage, and a reliable record of which subscriber org sits on which version.
Upgradability is decided by ancestry, not by the version number you
typed. Each new 2GP version declares an ancestor in sfdx-project.json,
and Salesforce recommends ancestorVersion: HIGHEST so it tracks your
highest promoted version automatically. Existing customers cannot upgrade to a package
version created without a specified ancestor, so one build with a missing ancestor
produces a version nobody can reach.
Promotion is the gate that matters most, because it cannot be undone.
Run promotion from your pipeline behind one explicit human approval, never from whichever laptop is authenticated to the Dev Hub. Grant the promote permission through a permission set, not to everyone with CLI access.
For a first listing, security review sits between validation and publication and it is the long pole in the calendar. For updates the picture is different. You do not need a full security review for every patch or upgrade, and what governs publication is the listing status. If the listing shows Ready to List, you can publish the updated listing without submitting the new version for review. If it shows Security Review Required, you cannot publish until that version passes.
Salesforce also runs periodic re-reviews, and a version with significant change is likelier to trigger one. So budget review time into releases that change architecture, authentication or outbound calls, not into routine bug fixes. Check the current rules in the ISVforce guide to updating a listing before planning a quarter around them.
Three levers, from least to most invasive:
A staged rollout that holds up: your own orgs first, then partner and sandbox orgs, then a small cohort of consenting customers, then everyone else in scheduled off-peak batches. Leave a full business day between cohorts, not an hour.
Teams postpone the fourth item and regret it, because support quality depends on it more than anything else here. Serpent covers 1GP, 2GP and managed-package workflows, cross-package dependency resolution and version management across subscriber orgs on every plan, including the free one. More packaging playbooks live in our SF Guides library.
Can I unpromote a package version?
No. You can promote a version number only once and it cannot be undone, so treat promotion as a release decision, not a build step.
Do I need a new security review for every release?
No. A full review is not required for every patch or upgrade. Publication depends on your listing status, and Salesforce may still ask for a periodic re-review when a version changes significantly.
Why can my customer not upgrade to my newest version?
Usually ancestry. Existing customers cannot upgrade to a version that was created without a specified ancestor, so check the ancestor before you check anything else.
What is the difference between a recommended version and a push upgrade?
A recommended version shows subscribers an Upgrade to Recommended Version option and leaves the timing to them. A push upgrade moves their org for them, on your schedule.
Do beta versions count as releases?
No. Every 2GP version starts as a beta, which is installable for testing only. It becomes a release the moment it is promoted.
Commitment free!