The watcher that writes · Signal in, story out See every change. Publish every story. The moment your code ships, a spec shifts

Version Numbering Conventions and Their Changelog Implications

Semantic Versioning signals compatibility to machines, but your changelog must prove the promise.

· 8 min read
Cover illustration for “Version Numbering Conventions and Their Changelog Implications”
Changelog Culture · October 29, 2026 · 8 min read · 1,859 words

Version numbering conventions define what a changelog owes its readers. Every MAJOR, MINOR, or PATCH bump is a compressed promise about compatibility and change, and the release notes must supply the evidence behind it. Keeping that promise requires more than careful writing. It requires a release pipeline that connects the change, the version decision, and the explanation users need.

What a version number actually says before anyone reads the changelog

A developer sees 2.4.0 → 3.0.0 in a dependency update and knows to read before merging. The number has already done communication work. Under Semantic Versioning, specified in SemVer 2.0.0, a MAJOR bump warns that existing code may no longer compile or behave as expected. A MINOR bump promises something new without breaking existing code, while a PATCH marks a backward-compatible bug fix. These are different instructions for how cautiously a consumer should approach an update.

Package managers such as npm and Cargo resolve dependency ranges, including ^1.2.0 and ~1.2.3, using version information to determine eligible updates. The consumer thus leaves part of the upgrade decision to how the maintainer labels the change. That trust depends on a stated boundary for what will stay compatible. The changelog explains what happened inside or across that boundary, but the version number can let a machine accept the change before a person inspects it.

How the three bump types divide the changelog's communication job

A PATCH changelog answers a narrow question about whether the release fixes the reader’s particular bug. One line that names what each fix does is usually enough. “Fixed a bug” gives no basis for that decision, whereas naming TagContainer.Matches() and its false results for exact-match queries against hierarchical tags identifies the affected behavior. A MINOR entry has a broader job because it introduces something the reader may not know to seek. It must explain what the capability does, why it is useful, and how to try it.

A MAJOR entry owes the reader a migration document. It must identify what changed, who is affected, what action is required, and when the old behavior disappears. Its depth follows the upgrade burden. A notice that something is incompatible is insufficient when the reader needs to decide whether and how to proceed. Organizing entries under Added, Changed, Fixed, and Removed gives that decision a navigable structure, with Added generally presenting the least risk to existing consumers. The categories let readers find what is new or check compatibility without all having to read the same account.

What breaks when the version number and the changelog fall out of sync

A package manager can accept a breaking change before anyone notices that its release notes are inadequate. If the change arrives under a MINOR bump within an accepted dependency range, the resolver acts on a false compatibility signal. Across open-source dependency graphs, a single mislabeled release can ripple through projects that trusted the same range. A clear warning buried in the changelog does not repair the number on which that resolution depended.

The reverse mismatch weakens the signal differently. Shipping a substantial feature as a PATCH hides capability from readers who reasonably expect only fixes, while avoiding a MAJOR bump to prevent alarm conceals upgrade risk. Once users learn that numbers are unreliable, they have less reason to use them as a guide. Yet frequent MAJOR releases can also dull attention when every small incompatible API adjustment produces another warning. Consumers may start seeing those releases as routine and stop reading closely. That behavior shows why technical classification and useful communication must be treated as connected responsibilities.

Where SemVer fits well and where a different versioning scheme serves readers better

SemVer fits software with programmatic consumers, including libraries, CLIs, and public APIs whose compatibility affects dependent code. Outside that setting, its distinctions may imply a contract the product does not need. Continuously deployed SaaS often benefits more from dates, while an internal tool with one consumer may gain little from the ceremony. Calendar versioning, such as Ubuntu’s 24.04 format, communicates release timing. The useful signal depends on the reader’s decision.

The Linux kernel provides a concrete counterexample to reading every major number as a breaking-change warning. The kernel promises stable interfaces and behavior even when its major version changes. Linux 7.0, released 12 April 2026, was explicitly not a major upgrade over the 6.x series and would have been Linux 6.20 under continuous numbering. Linus Torvalds announced the bump on 8 February 2026, following his convention of resetting numbers when minor counts grow unwieldy.

Marketing-driven versioning can likewise communicate significance. As a legitimate alternative to SemVer, marketing-driven versioning requires a changelog that explains the significance the number signals, just as a calendar-versioned product owes a dated account of changes.

How Conventional Commits and Keep a Changelog turn the version decision into a pipeline

Conventional Commits moves release classification into a structured message that machines can parse. Its fix type maps to PATCH, its feat type maps to MINOR, and a breaking-change marker or footer signals MAJOR. Keep a Changelog gives the notes a matching structure, with a section for each version that has a date and groups changes by category. Together, these conventions connect the engineering event to its release narrative. The number and its explanation can originate from the same record.

Tools implement that connection at different points in the workflow. On merges to main, semantic-release reads commits since the last tag, determines the next version, generates the changelog, and publishes. Release Drafter instead builds draft notes as pull requests merge, using YAML configuration to put labels into categories before a team reviews and publishes the notes. Changesets gives developers explicit control within the pull request by asking them to declare the change and its bump type, then applies accumulated declarations at release time. The commit or pull request is the brief, written while the change is being made rather than reconstructed during a retrospective writing session.

What automation handles well and where human judgment on the changelog still matters

Automation can choose the right bump when changes have been labeled correctly and give writers a draft to start from. It also catches more changes and helps get notes out sooner by collecting changes as they merge. Those gains do not make the output reader-ready. Release Drafter assembles pull request titles without rewriting or summarizing them, and its categories depend on disciplined labeling. Likewise, semantic-release takes changelog text from commit messages, so a message about handling null values may produce a correct entry that leaves out what went wrong for the user.

PATCH entries are the easiest to complete from such material because their task is narrow. MINOR entries need enough context to explain how to use the addition, while MAJOR entries need to take the reader into account in ways a commit message rarely does. A person still needs to judge whether the explanation gives the reader enough to act on. Completeness of collection is not completeness of communication.

Signal-driven content pipelines add an AI drafting layer to the same setup. The conventional commit message and its body provide the raw material, and the layer rewrites that context into plain-language user-impact framing. This preserves the connection to an actual change rather than starting with a general prompt about the product. The translation is concrete, from an engineering description of what changed to an explanation of how that change affects the reader’s workflow.

Why a major version bump is the highest-stakes content moment in a product's lifecycle

A deprecation notice belongs in a preceding MINOR release, where it can be documented prominently before removal creates an immediate upgrade requirement. That sequence gives consumers a migration window. The eventual MAJOR changelog must then connect the removal to the required replacement or action, rather than presenting it as an isolated announcement. Without that link, readers who saw the earlier warning still lack what they need to finish the move.

Readers assessing the cost will look first for Removed and Changed, so burying incompatibilities beneath Added entries creates a structural failure even when every statement is accurate. The migration guide must make it easy to find which behavior changed and what work is needed. This obligation applies to commercial APIs as well as open-source projects, although distributed dependency graphs make the latter’s consequences especially widespread. A correctly labeled MAJOR warns consumers to stop and read, but it cannot make an undocumented migration safe.

Distribution completes this part of the contract. The migration guide should be linked from the version tag, the GitHub release, and wherever the package is distributed.

How SaaS and product teams adapt the versioning contract for a non-technical audience

A SaaS changelog can use dates and still has to be honest about how much has changed. An anchor such as “June 2026” communicates recency, while “Summer Update” suggests a release with particular significance. Technical version numbers can be there for readers who want the detail without being the main thing readers see. The reader’s main question is different here. Instead of assessing code compatibility, the reader needs to understand whether the change affects how they use the product.

That shift makes user workflows the organizing principle. A significant behavior change described only as “improved performance” or “updated UI” withholds the warning from people who depended on the old behavior. This hides the change much as a hidden breaking change does, even without a dependency resolver. Placement and wording signal magnitude, so the explanation must justify that signal. Dated, categorized entries linked to documentation also give support, sales, and marketing a shared account of what shipped and when.

Continuous deployment makes selecting and explaining those changes harder. Monitoring merged pull requests and releases against the product’s positioning provides a systematic signal of which changes warrant an entry and how much detail they need. This takes the place of waiting for someone to remember that a user-facing change needs to be documented.

Keeping the version-to-changelog contract intact as shipping cadence increases

Fast shipping increases the temptation to shorten feature explanations, skip migration guidance, or postpone release notes. It also increases the reader’s need for timely distinctions between fixes, additions, and incompatible changes. An editorial calendar alone cannot keep up with that flow. When publication depends on a separate effort to reconstruct recent work, communication becomes vulnerable to the same delivery pressure that created the backlog. Release meaning must be captured at the point of change.

Conventional Commits makes the bump decision part of that record, allowing the release summary to be computed from decisions already made. Drafting grounded in the commit context then has specific behavior to explain, rather than only a product category from which to produce generic prose. Human reviewers can focus on missing details about user impact and migration. For open-source users, contributors, and dependent maintainers, the resulting changelog is where the number’s promise becomes inspectable.

Releasepad’s SemVer guide states the obligation directly, “the version number alone is not communication; it's the promise that communication exists”. Fulfilling it at continuous-shipping speed depends on connected capture, classification, drafting, and publication. Editorial judgment remains part of that system, but it cannot substitute for the infrastructure that keeps each release attached to its explanation.

More in Changelog Culture