How to Detect Breaking Changes Before Your Release

2026-09-05 · ShipChangelog

A breaking change is cheap to catch during review and expensive to catch after release: users' integrations fail, support tickets arrive, and you spend a sprint on backports or migration posts. Detection works in layers — convention, automation, communication — and teams that ship clean releases run all three, not just the "we have tests" one.

What counts as a breaking change

Before tooling, agree on the definition, because it determines what you detect:

Layer 1: conventions and markers

This layer is free and catches more than you would expect, because it makes intent explicit at the point where the author knows it.

Layer 2: automated detection

Conventions need enforcement, and this is where CI earns its keep:

  1. Semver gate. A release tagged without a major bump while BREAKING CHANGE markers or breaking labels are present fails the build. This catches the "forgot to bump the version" class, which is common.
  2. Diff heuristics. Compare the new tag against the previous one: removed exported symbols, changed signatures, dropped CLI flags. Language-specific tooling exists for APIs and schemas; even a required diff review of public interfaces on major PRs catches a lot.
  3. Contract tests. Snapshot the public API surface (endpoints, request and response shapes, CLI --help output) and assert on it in CI. When a PR changes the snapshot, the breaking change is visible on the PR, not on release day.
  4. Deprecation tracker. A small list of deprecated items with removal versions; CI fails the release that removes something still scheduled for the future.

No single tool sees everything — behavior changes slip past every static check. That is why the layers stack: markers capture intent, heuristics capture structure, tests capture behavior.

Layer 3: make it visible to your users

Detection that stays in CI only protects your release process. The part that protects your users is communication:

A changelog that flags breaking changes does detection work for you on the reader side: many users read the changelog before upgrading, and a highlighted flag turns a post-failure support ticket into a pre-upgrade migration. This is one reason to generate the changelog from the same pipeline that tags the release, which our pull-request automation guide covers.

ShipChangelog

ShipChangelog covers the communication layer of this stack: major-version bumps and BREAKING CHANGE markers in your merged PRs are detected and highlighted in the generated entry, in all three audience versions, so the flag appears on the page, in RSS, and in the email digest. Breaking-change detection is part of the Pro plan at $12.99/month; the free tier covers one repo with 5 entries a month. The semver gate and contract tests remain your CI's job.

FAQ

Do I need a formal API-diffing tool?

It depends on your surface area. A small product can get most of the value from the semver gate, PR labels, and snapshotting the public interfaces in tests. Dedicated API-diff tooling pays off when the API is wide and changes are frequent.

What about behavior changes that look identical in the diff?

Those are the tests' job, not the tools' job. Contract tests plus a regression suite catch "same call, different result." Detection tooling is good at structure — removed things, renamed things, retyped things — and weaker at intent.

Is a major version bump enough communication?

No. A bump tells users something broke; it does not tell them what or how to fix it. The bump plus a highlighted changelog flag with a migration note is the complete unit.

ShipChangelog writes these changelogs for you — start free with 1 repo.