Markdown Editor

Versioning and Release Policy Template (SemVer, CalVer, CRA)

Versioning policy: SemVer or CalVer rules, release types and cadence, changelog conventions, support tiers, LTS, CRA support period, backports, yanking

Logiciel & IngénierieCompletSemVer 2.0.0; CalVer 26.0; Conventional Commits 1.0.0; Keep a Changelog 1.1.0; CRA Art. 13(8)-(11)versioningreleasepolicy

Mode d'emploi: Use it when you need one organisation-wide rule set for version numbers, release cadence and how long each version is supported. Fill the product inventory and the scheme per product first, then the support windows you can actually staff. The main pitfall is promising support windows without owners or a backport budget.

Aperçu

Versioning and Release Policy: [Organisation or product line]

Policy that sets how [Organisation] numbers, releases, supports and retires its software: the versioning scheme (Semantic Versioning 2.0.0 or Calendar Versioning spec 26.0), release types and cadence, commit and changelog conventions (Conventional Commits 1.0.0, Keep a Changelog 1.1.0), support tiers and end-of-life windows, long-term support, security-fix backports, deprecation, publication and yanking. It includes the support-period duty of the EU Cyber Resilience Act (Regulation (EU) 2024/2847, Article 13(8) to 13(11) and 13(19), with the related points of Annex I, Part II) for products with digital elements. Replace every [bracketed] value and every row marked Example. The CRA parts are a documentation format, not legal advice: check the consolidated text and confirm scope with counsel.

Document control

FieldValue
Document ID[POL-REL-001]
Version[0.1]
Status[Draft / Approved / Superseded]
Owner[@release-engineering-lead]
Approvers/reviewers[@vp-engineering], [@head-of-product], [@product-security-lead], [@head-of-support], [@legal-counsel]
Last updatedYYYY-MM-DD
Classification[Public / Internal]
Applies to[Product lines, repositories and artefact types in section 1]
Effective fromYYYY-MM-DD
Next scheduled reviewYYYY-MM-DD
Public support page[https://example.com/support-lifecycle]
CRA in scope[Yes, for products listed in section 7.4 / No / Under assessment]

Approvals

RoleNameDecisionDate
VP Engineering[@name][Approve / Approve with conditions / Reject]YYYY-MM-DD
Head of Product[@name][Decision]YYYY-MM-DD
Product Security Lead[@name][Decision]YYYY-MM-DD
Head of Support[@name][Decision]YYYY-MM-DD
Legal counsel (CRA and contracts)[@name][Decision]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]First draft
1.0YYYY-MM-DD[@name]Example: Approved; Corvid Edge Agent moved to an LTS train with a 5-year support period
1.1YYYY-MM-DD[@name]Example: Storefront web app moved from SemVer to CalVer YYYY.0M.MICRO

Contents

1. Purpose, scope and principles

1.1 Purpose

This policy makes version numbers a reliable promise. A consumer who reads a version must be able to tell whether an upgrade is safe, how long that version will receive fixes, and where the list of changes is. A team that ships must know which numbers it may use, how often it may release, and what it owes to customers on older versions.

1.2 Scope

The policy covers every artefact that [Organisation] publishes or deploys and that carries a version: libraries and SDKs, command-line tools, installable agents and appliances, container images, Helm charts and other deployment packages, mobile and desktop applications, and the release labels of continuously deployed services. It does not cover internal build numbers that never leave the pipeline, and it does not set HTTP API version numbers, which follow the API Versioning and Deprecation Policy (architecture/api-deprecation-policy).

1.3 Product inventory

Product IDProductArtefact typesConsumersScheme (section 4)Support model (section 7)
PRD-001 (Example)Corvid Checkout SDK (JavaScript, Java, Python)npm, Maven, PyPI packagesExternal merchants and partnersSemVer 2.0.0Current major Active; earlier majors Security-only until 5 years after their first release
PRD-002 (Example)Corvid Storefront web appContainer image deployed by CorvidEnd users through the browser; no installed versionsCalVer YYYY.0M.MICROLatest only (continuous delivery)
PRD-003 (Example)Corvid Edge AgentSigned installer and container image run on customer premisesEnterprise merchants in the EU and USSemVer; every major is an LTS trainLTS 5 years from first release of each train; CRA support period
PRD-004 (Example)Corvid CLIHomebrew, winget and tarballsDevelopersSemVer 2.0.0Latest minor only
[PRD-NNN][Product][Artefacts][Consumers][Scheme][Model]

1.4 Principles

  • The source repository and its signed tags are the source of truth for what a version contains.
  • A published version is immutable. A mistake is fixed by a new version, never by replacing the old one.
  • Version numbers describe compatibility for consumers, not effort or marketing. Marketing names may exist alongside, but never instead.
  • Support promises are public, dated and staffed.
  • Security fixes reach every supported version, not only the newest.

2. Roles and responsibilities

ActivityRelease engineeringProduct ownerEngineering team (product)Product security (PSIRT)SupportLegal
Choose and change versioning schemeACRIII
Decide version number for a releaseCIA/RII-
Approve a major releaseCARCCI
Publish release calendarA/RCCII-
Set support tiers and end-of-life datesCARCCC
Backport security fixesCIRAI-
Publish support lifecycle pageRACCCC
Declare and communicate end of lifeRACIRC
Approve exceptions (section 11)CARCCC

R = responsible, A = accountable, C = consulted, I = informed.

RoleNamed holderDuties
Release engineering lead[@name]Owns this policy, tooling, tag protection, release calendar and compliance metrics
Product owner (per product)[@name]Owns the support lifecycle and end-of-life decisions for the product
Engineering team lead (per product)[@name]Applies the scheme, writes changelog entries, staffs backports
Product security lead[@name]Decides which supported versions receive which security fix and when; links to the Security Advisory (security/security-advisory)
Head of support[@name]Aligns support contracts and customer communication with section 7

3. Policy statements

IDStatementChecked by
VRP-01Every published artefact MUST carry a version that follows the scheme recorded for its product in section 1.3.Pipeline version lint
VRP-02A product with external consumers of a programmatic interface MUST use Semantic Versioning 2.0.0, or document in section 4.1 why another scheme fits better.Policy review
VRP-03A breaking change to a public interface MUST NOT ship in a minor or patch release of a SemVer product at 1.0.0 or later.API diff check, review
VRP-04Every release MUST be built from a signed, protected tag whose name equals the version, prefixed by v where the ecosystem expects it.Tag protection rules
VRP-05A published version MUST NOT be overwritten or re-tagged; corrections ship as a new version (section 10).Registry immutability settings
VRP-06Every release MUST have a changelog entry in Keep a Changelog 1.1.0 form before it is published.Release checklist
VRP-07Commit messages on the default branch SHOULD follow Conventional Commits 1.0.0 so that version bumps and changelog drafts can be derived.Commit lint
VRP-08Each product MUST publish a support lifecycle with the end date of every supported version, at least month and year.Support page audit
VRP-09A fix for a vulnerability rated High or Critical MUST be released for every version in Active or Security-only support within the target in section 8.2.PSIRT metrics
VRP-10A deprecation MUST be announced at least one minor release and the notice period in section 9.2 before removal.Changelog Deprecated entries
VRP-11End of life MUST be announced at least [6] months in advance for products with installed versions.Support page history
VRP-12Products in CRA scope MUST record the support-period determination in their technical documentation and meet sections 7.4 and 8.CRA technical file review
VRP-13Pre-release versions SHOULD NOT be used in production by customers and MUST be labelled as such in every channel.Registry dist-tags, release notes

4. Versioning scheme

4.1 Choosing a scheme

CriterionSemantic Versioning 2.0.0Calendar Versioning (spec 26.0)
Main signal to consumerCompatibility of the public APIAge of the release and position in a release train
Best fitLibraries, SDKs, CLIs, agents and plug-ins with a declared public interfaceContinuously deployed services, OS-style distributions, data and content bundles, products with time-boxed support
Breaking change signalIncrement MAJORMust be communicated separately (changelog, upgrade notes)
Support policy fitSupport by major lineSupport by year or train, for example two latest year releases
Registry compatibilityNative in npm, Cargo, Go modules and most package managersOnly if the chosen format is also a valid version string for that registry

Decision for each product is recorded in section 1.3. A product that changes scheme MUST make the new numbers sort after the old ones (for example from 4.9.2 to 2026.10.0), and MUST state the change in its changelog and release notes.

4.2 Semantic Versioning rules

For products using Semantic Versioning 2.0.0 (semver.org):

  1. The version has the form MAJOR.MINOR.PATCH, three non-negative integers without leading zeros.
  2. The product MUST declare its public API in its documentation. Without a declared public API, compatibility claims are meaningless.
  3. Increment PATCH for backward-compatible bug fixes, MINOR for backward-compatible new functionality or a deprecation, and MAJOR for any incompatible change to the public API. Lower components reset to zero when a higher one increments.
  4. Major version zero (0.y.z) is initial development: anything may change. A product MUST reach 1.0.0 before it is offered to external customers under a support contract.
  5. Treat the following as public API for compatibility purposes, in addition to the code interface: configuration file keys, CLI flags and exit codes, environment variables, on-disk and wire formats, and the minimum supported runtime (dropping a runtime version is a MAJOR change unless the runtime itself is end of life and this was announced under section 9; on an LTS train, section 7.3 applies).

4.3 Calendar Versioning rules

For products using Calendar Versioning (calver.org, spec 26.0):

  1. Choose the format from the CalVer tokens: YYYY (full year), YY (short year), 0Y (zero-padded year), M and 0M (month), W and 0W (week of year), D and 0D (day), plus non-date parts such as MAJOR, MINOR and MICRO.
  2. Spec 26.0 deprecates the MM, WW and DD tokens because a doubled letter is commonly read as two digits. Write 0M, 0W or 0D for zero-padded fields and M, W or D otherwise.
  3. Zero-padded fields are not valid SemVer numbers. For artefacts published to a SemVer-only registry (npm, Cargo) use the non-padded tokens, for example YYYY.M.MICRO.
  4. The date in the version is the date of the release cut, in UTC, not the deployment date.
  5. A MICRO (or other non-date) segment starts at 0 for the first release in each date period and resets when the date part changes, so 2026.10.0 is the first release cut in October 2026.
  6. Go modules: avoid CalVer. Go treats a major version of 2 or more as part of the module path, so every new year would need a new /vYYYY import path and an edit in every consumer.
ProductFormatExample versionMeaning
PRD-002 (Example)YYYY.0M.MICRO2026.10.3Fourth release cut in October 2026
[PRD-NNN][Format][Version][Meaning]

4.4 Pre-release and build metadata

  • Pre-release identifiers follow the patch number after a hyphen, for example 3.2.0-rc.1. They have lower precedence than the release, so 3.2.0-rc.1 sorts before 3.2.0.
  • Allowed pre-release labels: alpha.N, beta.N, rc.N. Numbered identifiers sort numerically, so use rc.10 safely after rc.9.
  • Build metadata follows a plus sign, for example 3.2.0+sha.4f2a9c1. Build metadata is ignored for precedence and MUST NOT be the only difference between two published artefacts.
  • Pre-releases MUST be published to a pre-release channel (for example an npm dist-tag next) so that default installs never receive them.

4.5 Version source of truth and tags

ItemRule
Source of truthThe signed annotated git tag; manifests (package.json, pom.xml, pyproject.toml) are stamped from it by the pipeline
Tag formatv<version> for SemVer products, <version> for CalVer products, <component>/v<version> in monorepos
Tag protectionOnly the release pipeline identity can create tags matching the release pattern; deletion is blocked
Version in artefactExposed by --version, an HTTP /version endpoint or image labels, matching the tag exactly
ProvenanceEach release artefact has build provenance referencing the tag and commit (see Software Supply Chain Security, security/supply-chain-security)

5. Release types and cadence

5.1 Release types

TypeSemVer effectContents allowedTriggerApproval
MajorMAJOR + 1Breaking changes, removals announced under section 9, new features, fixesPlanned, on the major calendarProduct owner and release engineering
MinorMINOR + 1New backward-compatible features, deprecations, fixesRelease train or on demandEngineering team lead
PatchPATCH + 1Backward-compatible fixes onlyOn demandEngineering team lead
SecurityPATCH + 1 on each supported lineSecurity fix and the minimum needed to ship it, kept separate from functionality changes where technically feasiblePSIRT decision (section 8)Product security lead
HotfixPATCH + 1Fix for a production incident, outside the trainIncident commander or team leadTeam lead plus one reviewer; retrospective approval within [2] business days
Pre-release-alpha.N, -beta.N, -rc.NAnything planned for the target versionOn demandTeam lead

5.2 Cadence

ProductMajorMinorPatchFreeze before release
PRD-001 (Example)At most once per 24 monthsEvery 4 weeks (train)As neededFeature freeze 5 business days before the train date
PRD-002 (Example)Not used (CalVer)Not usedContinuous, several per day; CalVer MICRO incrementsNone; feature flags gate unfinished work (Feature Flag Policy, dev/feature-flag-policy)
PRD-003 (Example)New LTS train (major) every 36 monthsQuarterly, on the Active LTS train onlyMonthly patch bundle plus security releases on every supported trainCode freeze 10 business days before a minor
[PRD-NNN][Cadence][Cadence][Cadence][Freeze rule]

The release calendar for the next two quarters is published at [calendar link]. Moving a train date by more than [5] business days needs product owner approval and a note to customers on the support page.

5.3 Release flow

Each release runs the Release Checklist (dev/release-checklist). The checklist is per release; this flow is the policy view of it.

6. Commit conventions, changelog and release notes

6.1 Commit messages

Teams SHOULD write commits in Conventional Commits 1.0.0 form: <type>[optional scope][!]: <description>, with optional body and footers. The mapping to version increments is:

Commit signalVersion effectChangelog section
fix:PATCHFixed
feat:MINORAdded or Changed
! after type or scope, or a BREAKING CHANGE: (or synonym BREAKING-CHANGE:) footerMAJOR (house rule: MINOR while in 0.y.z)Changed or Removed, plus upgrade notes
perf:, refactor:PATCH when user-visible, otherwise noneChanged, or omitted
docs:, test:, ci:, build:, chore:NoneOmitted unless user-visible
revert:Same as the reverted changeSame section as the reverted change
Footer Deprecated: (house convention)MINORDeprecated
Footer Security: with advisory ID (house convention)PATCHSecurity

Only feat and fix and the breaking-change markers carry meaning in the specification; the other types and the Deprecated: and Security: footers are conventions of this policy. Squash merges MUST produce a compliant subject, because the squash commit is what tools read.

6.2 Changelog

  • Each product keeps a CHANGELOG.md in Keep a Changelog 1.1.0 form: an Unreleased section at the top, then one section per version with an ISO 8601 date, newest first, and change groups Added, Changed, Deprecated, Removed, Fixed and Security.
  • Entries are written for the consumer: what changed and what to do, not which file was edited. Use the Changelog template (dev/changelog).
  • A yanked version stays in the changelog, marked [YANKED] after the date, with the reason (section 10.3).
  • Generated drafts from commit messages are allowed; a human from the owning team MUST edit and approve the entry before release.

6.3 Release notes

Major and minor releases of products with external consumers have release notes written from the Release Notes template (dev/release-notes): highlights, breaking changes with migration steps, deprecations, security fixes with advisory and CVE references, and known issues. Patch releases MAY rely on the changelog entry alone.

7. Support tiers, LTS and end of life

7.1 Support tiers

TierIncludesExcludes
ActiveBug fixes, security fixes, new minor features, documentation updates, support ticketsNone
Security-only (maintenance)Fixes for vulnerabilities and for critical defects causing data loss or outage; support ticketsNew features, non-critical bug fixes
Extended (contract only)Security fixes for named customers under a paid extended support agreementEverything else
End of life (EOL)Archived artefacts remain downloadable with a warningFixes, support tickets, compatibility testing

7.2 Support windows by product

This table is the single source of truth for support windows. Sections 1.3, 7.3, 7.4 and the public support page restate it and MUST be updated in the same change when it changes.

ProductActiveSecurity-onlySupport period (CRA where in scope)EOL ruleNotice before EOL
PRD-001 (Example)Current majorEvery earlier major, from the release of the next major until 5 years after the earlier major's first release5 years from the first release of each majorA major reaches EOL 5 years after its first release6 months
PRD-002 (Example)Latest deployed release onlyNot applicableNot applicable (service, no installed versions)Previous releases are replaced by deploymentNot applicable
PRD-003 (Example)Current LTS trainPrevious LTS train, from the release of the next train until 5 years after its own first release5 years from the first release of each LTS trainA train reaches EOL 5 years after its first release12 months
PRD-004 (Example)Latest minorNone[Not set: CRA scope assessment pending with counsel; if in scope, latest-minor-only support cannot meet Article 13(8) and must change]Any older minorNot applicable; users are told to upgrade
[PRD-NNN][Window][Window][Period][Rule][Notice]

Capacity check (Example): PRD-001 ships a major at most every 24 months (section 5.2) and supports each for 5 years, so at most three majors are supported at once (the current one and two in Security-only). PRD-003 ships a train every 36 months with a 5-year period, so at most two trains overlap, which matches the LTS limit in section 7.3. Recompute this check whenever the cadence or the period changes.

7.3 Long-term support (LTS)

  • An LTS train is a major release line designated for long-term support. The first release of an LTS train is designated LTS on the day it is published, never retroactively.
  • While a train is Active it receives minor and patch releases. Once the next LTS train ships, the previous train receives PATCH releases only (security fixes and critical defect fixes) until its support period ends. Features never backport into a train in Security-only support.
  • At most [2] LTS trains of one product are supported at the same time. More trains multiply backport cost and test matrices; set the train cadence so that this limit holds (section 7.2 capacity check).
  • Runtime and dependency support: an LTS train names the runtimes and operating systems it supports. When one of those reaches its own end of life, the product owner decides, under section 9, whether to keep it until the end of the train or drop it in the next LTS train. Dropping a runtime inside a train needs an exception under section 11.
LTS trainFirst releaseActive untilSecurity-only untilSupport period end (month and year)
Corvid Edge Agent 5.x (Example)2025-03-18Release of 6.0 (2028-03, planned)2030-03March 2030
Corvid Edge Agent 6.x (Example)2028-03 (planned)Release of 7.0 (2031-03, planned)2033-03March 2033
[Train]YYYY-MM-DD[Event or date]YYYY-MM[Month year]

7.4 EU Cyber Resilience Act support period

Regulation (EU) 2024/2847 (Cyber Resilience Act) applies in general from 11 December 2027; the reporting obligations of Article 14 apply from 11 September 2026. Check the consolidated text on EUR-Lex for current dates and any delegated acts. The provisions below are paraphrased from the Official Journal text. This is a documentation format, not legal advice.

ProvisionDuty, paraphrasedHow this policy meets it
Article 13(8), first subparagraphWhen placing the product on the market and for the whole support period, handle vulnerabilities of the product and its components effectively and in line with the vulnerability handling requirements of Annex I, Part II.Sections 7.2 and 8
Article 13(8), support period determinationSet the support period to the time the product is expected to be in use, taking into account in particular reasonable user expectations, the nature and intended purpose of the product, and relevant Union law on product lifetime. The manufacturer may also consider support periods of comparable products from other manufacturers, the availability of the operating environment, the support periods of third-party components that provide core functions, and guidance from the ADCO and the Commission. Apply these factors proportionately.Determination table below; factors recorded in the CRA Technical Documentation (security/cra-technical-documentation)
Article 13(8), minimumThe support period is at least five years. Where the product is expected to be in use for less than five years, the support period equals the expected use time. The Commission may set minimum support periods for specific product categories by delegated act.Section 7.2 support period column; section 13 review trigger for delegated acts
Article 13(8), records and CVDRecord the information used to determine the support period in the Annex VII technical documentation. Keep policies and procedures, including a coordinated vulnerability disclosure policy (Annex I, Part II, point (5)), to process and remediate reported vulnerabilities.CRA technical file; Vulnerability Disclosure Policy (security/vulnerability-disclosure-policy) and PSIRT process (section 8)
Article 13(9)Each security update (Annex I, Part II, point (8)) made available during the support period remains available for at least ten years after it is issued, or for the rest of the support period if that is longer.Section 10.2 retention
Article 13(10)Where the manufacturer has placed later, substantially modified versions of a software product on the market, it may meet the vulnerability remediation requirement of Annex I, Part II, point (2) for the version last placed on the market only, provided that users of earlier versions can get that version free of charge and do not incur extra costs to adapt the hardware and software environment in which they use the original version. All other duties, including the other points of Annex I, Part II, continue to apply.Section 8.3 records where this route is used instead of a backport
Article 13(11)Public archives of historical versions are allowed if users are clearly and accessibly told the risks of using unsupported software.Section 10.2 archive warning
Article 13(19)Show the end date of the support period, at least month and year, clearly at the time of purchase, and on the product, its packaging or digitally where applicable; where technically feasible, notify users when support ends.Support lifecycle page, in-product notice of PRD-003 (Example)
Annex I, Part II, point (2)Address and remediate vulnerabilities without delay in relation to the risk, including by security updates; where technically feasible, ship security updates separately from functionality updates.Section 5.1 Security release type; section 8.2 targets
Annex I, Part II, point (8)Disseminate available security updates without delay and free of charge (unless otherwise agreed with a business user for a tailor-made product), with advisory messages telling users what to do.Section 8.1 coordinated release; Security Advisory template

Support period determination for each CRA product (the support period itself is set in section 7.2):

ProductExpected use time and evidenceSupport period (from section 7.2)End of earliest supported line (month and year)Recorded in
PRD-003 (Example)Customers run agents a median of 4 years before hardware refresh; enterprise contracts run 3 to 5 years; base operating system images are supported upstream for at least 5 years5 years from first release of each LTS train (expected use time is below 5 years, so the 5-year minimum applies)March 2030 for 5.xCRA technical file, section 5
PRD-001 (Example)Libraries embedded in merchant apps typically stay pinned for 2 to 4 years; comparable payment SDKs publish support of 3 to 5 years5 years from first release of each major[Month year] for 4.xCRA technical file
[PRD-NNN][Evidence][Period][Month year][Reference]

Vulnerability handling and reporting under Articles 13 and 14 are run through CRA Vulnerability Handling (security/cra-vulnerability-handling) and the PSIRT process (security/psirt-vulnerability-handling).

7.5 End-of-life process

  1. The product owner proposes the EOL date and records it in the support lifecycle table at least the notice period in section 7.2 ahead.
  2. Support informs affected customers through account contacts, the support page and, where available, in-product notices.
  3. Release engineering marks the version line EOL in registries where supported (for example deprecation messages on packages) and on the download archive, with a pointer to the supported upgrade path.
  4. On the EOL date, CI stops building the line, branch protection is kept, and the branch is archived read-only.
  5. Within [10] business days after EOL, the product owner confirms the step list above in the revision history of the support page.

8. Security fixes and backports

8.1 Backport rules

  1. A security fix is developed on the default branch first, unless the affected code exists only on older lines.
  2. The PSIRT decides the affected version range and the target lines.
  3. Fixes are cherry-picked to every affected release line in Active, Security-only or contracted Extended support.
  4. Each backport ships as a PATCH release on its line, with a changelog Security entry referencing the advisory.
  5. Coordinated release: all supported lines are published in the same release window, so the fix in one line does not disclose the vulnerability in another.

8.2 Targets

Severity (from the Vulnerability Management Policy)Fix released on all supported lines withinCommunication
Critical (Example)7 calendar days from confirmationSecurity advisory and direct notice to contracted customers
High (Example)30 calendar daysSecurity advisory
Medium (Example)Next scheduled minor or patch, at most 90 daysChangelog Security entry; advisory if exploitable
Low (Example)Next scheduled releaseChangelog entry

Severity ratings and exploitation context come from the Vulnerability Management Policy (security/vulnerability-management-policy) and the PSIRT process. Advisories use the Security Advisory template (security/security-advisory), and VEX statements follow the SBOM and VEX Policy (security/sbom-vex-policy).

8.3 When a backport is not possible

If a fix cannot be made safely on an older line (for example it needs a breaking change), the PSIRT and the product owner record an exception under section 11 with the compensating guidance for customers, and offer a free upgrade path to a fixed line. For CRA products this may use the Article 13(10) route, which covers only the remediation requirement of Annex I, Part II, point (2), is available only where later, substantially modified versions of the software have been placed on the market, and requires that users can move to the latest version free of charge and without extra costs to adapt their hardware and software environment. Record the decision and the evidence for each condition in the technical file; every other CRA duty, including disclosure of fixed vulnerabilities and the support period itself, still applies to the older line.

9. Deprecation and breaking changes

9.1 Rules

  • A feature, option, interface or supported platform is deprecated in a MINOR release with a Deprecated changelog entry, documentation note and, where technically possible, a runtime warning naming the replacement.
  • Removal happens only in a MAJOR release (SemVer products) or after the notice period (CalVer products), never in a patch.
  • Each breaking change in a major release has upgrade notes with before and after examples and, where possible, an automated migration tool or codemod.

9.2 Notice periods

Product typeMinimum notice between deprecation and removal
Public SDK or library (Example)6 months and at least one major release boundary
Installable product on an LTS train (Example)Not removed within the LTS train
CLI (Example)3 months
HTTP or event APIPer API Versioning and Deprecation Policy (architecture/api-deprecation-policy)

9.3 Breaking change register

IDProductChangeDeprecated inRemoved inMigration aid
BRK-001 (Example)PRD-001createCheckout(options) callback form removed in favour of promises4.6.0 (2026-04)5.0.0 (2026-11)Codemod corvid-migrate v5
BRK-002 (Example)PRD-003Support for Node.js 20 dropped after its upstream end of life5.8.06.0.0Upgrade guide section 2
[BRK-NNN][Product][Change][Version][Version][Aid]

10. Publication, immutability and yanking

10.1 Publication

  • Releases are published only by the release pipeline identity; no personal tokens publish to production registries.
  • Artefacts are signed and carry build provenance; SBOMs are produced as set in the SBOM and VEX Policy (security/sbom-vex-policy).
  • Container images are referenced by digest in deployment manifests. Moving tags (latest, stable, 5) MAY exist for convenience but never for production deployment.

10.2 Retention and archives

ArtefactRetention
Release artefacts, signatures, provenance and SBOMsAt least 10 years after release, and for CRA products at least 10 years after each security update or the rest of the support period if longer (Example values; align with legal)
Pre-releases12 months after the final release (Example)
EOL versionsKept in the archive with a visible warning that they are unsupported and may contain known vulnerabilities

10.3 Yanking and corrections

  1. If a release is broken or dangerous, publish a corrected version immediately (PATCH + 1); never re-publish the same number.
  2. Mark the bad version as yanked or deprecated in the registry where supported, so new installs avoid it while existing lock files still resolve.
  3. Add [YANKED] and the reason to its changelog heading.
  4. Delete an artefact only for legal reasons or leaked secrets, with release engineering and legal approval, and record it as an incident.

11. Exceptions and risk acceptance

An exception request states the policy statement affected (section 3), product and versions, reason, risk to consumers, compensating measures, and expiry date. Exceptions expire after at most [6] months and are reviewed in the next policy review.

IDStatementProductReasonCompensating measuresApproverExpires
EXC-REL-001 (Example)VRP-03PRD-001 4.xA security fix requires removing an unsafe option in 4.9.1Option removal documented in advisory; codemod; direct notice to the 14 merchants using itProduct owner and product security lead2027-04-30
EXC-REL-002 (Example)VRP-09PRD-003 4.x (extended)Fix needs a kernel driver change not possible on 4.xFree upgrade to 5.x; mitigation guideProduct security lead2027-01-31
[EXC-REL-NNN][VRP-NN][Product][Reason][Measures][@name]YYYY-MM-DD

Risk acceptance for exceptions that leave a known vulnerability unfixed on a supported line is recorded in the Risk Register (compliance/risk-register).

12. Compliance measurement

IDMetricFormulaTarget (Example)Source
REL-M01Releases with valid version and signed tagreleases passing version lint and tag signature check / all releases x 100100%Pipeline logs
REL-M02Non-major releases with breaking changesnon-major releases later found to contain a breaking change / non-major releases x 1000%API diff reports, incident log
REL-M03Changelog coveragereleases with an approved changelog entry / all releases x 100100%Repository
REL-M04Security backport lead timemedian days from fix merged on default branch to release on the last supported lineWithin section 8.2 targetAdvisory log
REL-M05Supported lines with all High and Critical fixessupported lines with no overdue High or Critical fix / supported lines x 100100%PSIRT tracker
REL-M06EOL notice complianceEOL events announced at least the notice period ahead / EOL events x 100100%Support page history
REL-M07Customers on unsupported versionsactive installations on EOL versions / active installations x 100 (where telemetry or licence data exists with consent)Below 5%Licence server

Worked example (Example): in Q3 2026 Corvid released 42 versions of PRD-001; 41 passed tag signature checks, so REL-M01 = 41 / 42 x 100 = 97.6%. The failure was a manual tag pushed during an outage and was recorded as an incident.

Results are reported quarterly to the engineering leadership review.

13. Review cycle

  • Scheduled review every 12 months by the release engineering lead with the approvers listed in Document control.
  • Early review when: a new product line is added; a major regulatory change applies (for example CRA delegated acts setting minimum support periods for a product category); a referenced specification publishes a new version (SemVer, CalVer, Conventional Commits, Keep a Changelog); an exception is renewed twice; or REL-M02 or REL-M05 misses target for two consecutive quarters.
  • The review outcome is recorded in the revision history, even when nothing changes.

14. Glossary and references

14.1 Glossary

TermMeaning in this policy
Public APIEvery interface consumers can depend on, declared in documentation, including configuration, CLI and formats
Breaking changeA change that can make a correct consumer fail or behave differently without the consumer changing anything
Release lineAll versions sharing a MAJOR
LTS trainA major release line designated for long-term support: minor and patch releases while Active, PATCH only after the next train ships
Support periodThe time during which a version receives at least security fixes; for CRA products, the period under Article 13(8)
End of life (EOL)The date after which a version receives no fixes or support
YankMarking a published version as not to be installed, without deleting it
Pre-releaseA version with a hyphenated identifier, lower in precedence than the release
BackportApplying a fix made on the default branch to an older release line

14.2 References

ReferenceUse
Semantic Versioning 2.0.0, semver.org (CC BY 3.0)Section 4.2, 4.4
Calendar Versioning, calver.org, spec 26.0 (2026; CC BY-SA 4.0)Section 4.3
Conventional Commits 1.0.0, conventionalcommits.orgSection 6.1
Keep a Changelog 1.1.0, keepachangelog.com (MIT)Section 6.2
Regulation (EU) 2024/2847 (Cyber Resilience Act), Official Journal L, 20 November 2024, eur-lex.europa.eu: Article 13(8) to 13(11), 13(19) and Annex I, Part II, points (2), (5) and (8)Sections 7.4 and 8.3
NIST SP 800-218 SSDF v1.1 (February 2022); SP 800-218 Rev. 1 (SSDF v1.2) initial public draft (December 2025), which adds practice PS.4 on robust and reliable software updatesSections 8 and 10 (draft cited for direction only)
Release Checklist (dev/release-checklist)Per-release tasks
Changelog (dev/changelog), Release Notes (dev/release-notes)Change communication
API Versioning and Deprecation Policy (architecture/api-deprecation-policy)HTTP and event APIs
Branching Strategy (dev/branching-strategy), CI/CD Pipeline Design (dev/ci-cd-pipeline-design)Branches, tags, pipeline
Software Configuration Management Plan (quality/scm-plan)Configuration identification and baselines
Software Maintenance Plan (dev/software-maintenance-plan)Maintenance resourcing
Dependency Management Policy (dev/dependency-management-policy)Runtime and dependency support
CRA Technical Documentation (security/cra-technical-documentation), CRA Vulnerability Handling (security/cra-vulnerability-handling)CRA support period and vulnerability duties
Vulnerability Disclosure Policy (security/vulnerability-disclosure-policy)Coordinated vulnerability disclosure under Annex I, Part II, point (5)
PSIRT Vulnerability Handling (security/psirt-vulnerability-handling), Security Advisory (security/security-advisory)Security fixes and advisories

Standard and licence note

Based on Semantic Versioning 2.0.0 (semver.org, CC BY 3.0, by Tom Preston-Werner), Calendar Versioning spec 26.0 (calver.org, CC BY-SA 4.0), Conventional Commits 1.0.0 (conventionalcommits.org, CC BY 3.0) and Keep a Changelog 1.1.0 (keepachangelog.com, MIT), and on Regulation (EU) 2024/2847 (Cyber Resilience Act), Article 13(8) to 13(11) and 13(19) and Annex I, Part II, with NIST SP 800-218 (SSDF, a work of the United States Government) cited for context. Rules from these specifications are summarised in original wording; no specification text is reproduced. The CalVer token rules in section 4.3 are adapted from calver.org, whose page footer marks the site content CC BY-SA 4.0 (the site's source repository, github.com/mahmoud/calver, carries a separate BSD-style licence): if you redistribute an adapted version of that material, attribute calver.org and share it under the same licence. CRA provisions are paraphrased; check the consolidated text on EUR-Lex and any delegated or implementing acts before relying on them. This is a documentation format, not legal advice. Check the current official version of each specification before adopting this policy. Original text written for this collection. Template licence: MIT.

Modèles associés