📋 Reading: CHANGELOG.md
3 exercises — read a realistic CHANGELOG with semantic versioning, breaking changes, deprecation notices, and bug regression notes. Learn to extract the information that matters for upgrade decisions.
CHANGELOG reading essentials
- MAJOR bump → breaking changes — read carefully before upgrading
- MINOR bump → new features, backward-compatible
- PATCH bump → bug fixes only, safe to upgrade
- Deprecated → plan migration now; removal comes at next major version
- "Introduced in X.Y.Z" → tells you which teams are affected by the bug
0 / 3 completed
1 / 3
StreamKit — CHANGELOG.md (v3.0.0 / v2.9.1)
{ex.passage} The changelog uses the label "[BREAKING]" for two changes in v3.0.0. In semantic versioning (SemVer), which version number component is incremented for breaking changes — and why?
SemVer and breaking changes — a critical reading skill for dependency management
Semantic Versioning (SemVer) uses the format MAJOR.MINOR.PATCH, with each component carrying a specific meaning:
Key vocabulary: "backward-compatible" = old code still works. "Breaking change" = old code will not work without modification. "Deprecated" = still works now, will be removed in a future major version.
Semantic Versioning (SemVer) uses the format MAJOR.MINOR.PATCH, with each component carrying a specific meaning:
- PATCH (e.g. 2.9.0 → 2.9.1): Bug fixes that do not change the public API. Safe to upgrade without code changes.
- MINOR (e.g. 2.8.0 → 2.9.0): New features added in a backward-compatible way. Existing code continues to work unchanged.
- MAJOR (e.g. 2.9.1 → 3.0.0): Breaking changes — the public API has changed in ways that are NOT backward-compatible. Code using the previous version may need modification to work with the new version.
- Upgrading from 2.x to 3.x → read the "Breaking Changes" section carefully before upgrading in production
- Upgrading from 2.8.0 to 2.9.1 → generally safe, but still worth checking Fixed/Deprecated sections
LegacyConsumerremoved → any code importing this class will fail at runtimeconnect()now returns a Promise → synchronous code callingconst conn = connect()will break; must be updated toconst conn = await connect()
docs/migration-v3.md — this is the correct first step for any major version upgrade. Well-maintained libraries always provide a migration guide alongside breaking changes.Key vocabulary: "backward-compatible" = old code still works. "Breaking change" = old code will not work without modification. "Deprecated" = still works now, will be removed in a future major version.