Breaking changes
How we detect breaking changes — both documented and silent — and our policy on false positives.
A breaking change is anything that can stop your code from compiling or running correctly after an update. We surface two kinds:
- Documented. The maintainer flagged it in the release notes (e.g. "BREAKING:", a major version bump per semver, an entry under "Breaking changes").
- Undocumented. The diff shows a change that fits the pattern of a breaking change, but the release notes don't mention it. See Undocumented changes for the detection details.
What counts as breaking #
The model is prompted to flag, at minimum:
- Function signature changes (parameter added/removed/reordered, type changed).
- Removed or renamed exports (a symbol you might be importing is gone).
- Class hierarchy changes (a base class removed, an interface tightened).
- Changes to default values for parameters.
- Changes to return types or thrown exceptions.
Outside of pure-code changes, we also flag:
- Removed CLI flags or environment-variable changes.
- Configuration-schema changes that aren't backward-compatible.
- Wire-format changes for serialized data.
Our false-positive policy #
We bias toward flagging — if there's ambiguity about whether a change is breaking, we err on the side of telling you. The reasoning: a missed breaking change costs you a debugging session in production; a false positive costs you 30 seconds reading the summary.
When the analysis is uncertain (e.g. "this looks like a signature change
but the function is in a _internal namespace"), the summary will say so
explicitly rather than asserting the change as definitely breaking.
What to do with a flagged change #
- Read the summary — it cites the specific lines and files.
- Click through to the diff — verify the change matches the description.
- Search your own codebase for usage of the affected API (your editor's "find references" will do).
- Decide whether to update, pin, or wait for a follow-up patch.