Semantic Version Advisor
This skill helps classify version changes, determine appropriate version bumps, and validate semantic versioning decisions.
Quick Reference
Version Format: MAJOR.MINOR.PATCH
- •MAJOR: Breaking changes, incompatible API changes
- •MINOR: New features, backward-compatible additions
- •PATCH: Bug fixes, backward-compatible fixes
Core Workflows
Workflow 1: Classify Version Change
Input: Old version and new version Output: Classification (MAJOR/MINOR/PATCH) with explanation
Decision Tree
┌─────────────────────────────────┐
│ Compare versions X.Y.Z │
└────────────┬────────────────────┘
│
v
┌────────────────┐
│ X changed? │─ YES ──> MAJOR (breaking changes)
└────┬───────────┘
│ NO
v
┌────────────────┐
│ Y changed? │─ YES ──> MINOR (new features)
└────┬───────────┘
│ NO
v
┌────────────────┐
│ Z changed? │─ YES ──> PATCH (bug fixes)
└────┬───────────┘
│ NO
v
Same version
Classification Steps
- •Parse versions: Extract
MAJOR.MINOR.PATCHfrom both versions - •Strip notation: Remove
^,~,>=prefixes if present - •Compare MAJOR: If different → MAJOR change
- •Compare MINOR: If different → MINOR change
- •Compare PATCH: If different → PATCH change
- •Verify: Confirm classification matches change type
Examples
^4.0.0 → ^5.0.0 = MAJOR (4 → 5, breaking changes) ^13.1.5 → ^13.2.0 = MINOR (1 → 2, new features) ^7.1.5 → ^7.1.6 = PATCH (5 → 6, bug fixes) 9.35.0 → 9.36.0 = MINOR (35 → 36, new features) 1.0.0 → 1.0.1 = PATCH (0 → 1, bug fixes)
Workflow 2: Determine Version Bump
Input: List of changes to be included in release Output: Recommended version bump (MAJOR/MINOR/PATCH)
Change Classification
MAJOR bump required if ANY of:
- •Breaking API changes (removed methods, changed signatures)
- •Incompatible behavior changes
- •Removed public APIs or interfaces
- •Changed default behaviors that break existing code
- •Renamed public modules or packages
- •Dropped support for language/runtime versions
MINOR bump required if ANY of:
- •New features or capabilities added
- •New APIs or methods added
- •New optional parameters added
- •Deprecated APIs (but still functional)
- •Performance improvements (non-breaking)
- •New dependencies added
PATCH bump if ALL of:
- •Bug fixes only
- •Documentation updates
- •Internal refactoring (no API changes)
- •Security patches (backward-compatible)
- •Test improvements
- •Build process changes
Decision Process
Start with PATCH (default) ↓ For each change: - Breaking change? → Upgrade to MAJOR, stop - New feature? → Upgrade to MINOR, continue - Bug fix? → Keep current level, continue ↓ Return highest level encountered
Example Analysis
Changes:
- •Fixed null pointer exception in
getData() - •Added new
fetchAsync()method - •Updated documentation
Analysis:
- •Null pointer fix → PATCH candidate
- •New method → MINOR upgrade (overrides PATCH)
- •Documentation → No impact
Result: MINOR bump (new functionality added)
Workflow 3: Validate Version Proposal
Input: Current version, proposed version, change list Output: Validation result (valid/invalid) with reasoning
Validation Rules
- •Version must increase: New version > current version
- •Only one segment increases: Increment MAJOR OR MINOR OR PATCH
- •Reset lower segments: When incrementing, reset lower segments to 0
- •MAJOR bump:
1.5.3 → 2.0.0✅ (MINOR and PATCH reset) - •MINOR bump:
1.5.3 → 1.6.0✅ (PATCH reset) - •PATCH bump:
1.5.3 → 1.5.4✅ (no reset needed)
- •MAJOR bump:
- •Match change severity: Version bump matches most severe change
- •Breaking change → MAJOR required
- •New feature → MINOR minimum
- •Bug fix only → PATCH appropriate
Validation Examples
Valid:
- •
1.2.3 → 2.0.0with breaking changes ✅ - •
1.2.3 → 1.3.0with new features ✅ - •
1.2.3 → 1.2.4with bug fixes ✅
Invalid:
- •
1.2.3 → 1.4.0(skipped MINOR version) ❌ - •
1.2.3 → 2.1.0(MINOR not reset to 0) ❌ - •
1.2.3 → 1.2.3(no change) ❌ - •
1.2.3 → 1.3.0with breaking changes (under-versioned) ❌ - •
1.2.3 → 2.0.0with only bug fixes (over-versioned) ❌
Common Pitfalls
❌ Misclassifying Range Notation
Wrong: ^7.1.5 → ^7.1.6 = "Major" because of the caret
Right: ^7.1.5 → ^7.1.6 = PATCH (ignore the ^, compare numbers)
❌ Assuming Package Importance
Wrong: Core package changed → must be MAJOR Right: Classify by version numbers, not package importance
❌ Ignoring Reset Rules
Wrong: 1.5.3 → 2.1.0 for MAJOR bump
Right: 1.5.3 → 2.0.0 for MAJOR bump (reset MINOR and PATCH)
❌ Security Assumptions
Wrong: Security fix → must be PATCH Right: Security fixes can be any level (breaking fix = MAJOR)
Pre-release Versions
Format
- •
1.0.0-alpha.1- Alpha pre-release - •
1.0.0-beta.2- Beta pre-release - •
1.0.0-rc.1- Release candidate
Precedence
1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-rc.1 < 1.0.0
Pre-release Classification
- •
1.0.0 → 1.0.0-alpha.1= Pre-release (no semver bump) - •
1.0.0-beta.1 → 1.0.0= Release (no semver change) - •
1.0.0-rc.1 → 1.1.0= MINOR release from RC
Research Depth by Type
MAJOR Version Changes
Required Research:
- •Full changelog review
- •Breaking change analysis
- •Migration guide review
- •API compatibility check
- •Test coverage verification
Time Investment: High (30-60 minutes)
MINOR Version Changes
Required Research:
- •Feature overview
- •Deprecated API checks
- •New dependency review
- •High-level compatibility check
Time Investment: Medium (10-20 minutes)
PATCH Version Changes
Required Research:
- •Security advisory check only
- •Skip detailed changelog review
Time Investment: Low (2-5 minutes)
Integration with Other Tools
NPM/Yarn Commands
# View outdated packages with version info npm outdated # Machine-readable upgrade information npx ncu --jsonUpgraded # Yarn version check yarn outdated
Semver Utility Commands
# Classify version difference semver diff 1.2.3 1.3.0 # Output: "minor" # Compare versions semver gt 1.3.0 1.2.3 # Output: true # Check range satisfaction semver satisfies 1.2.4 "^1.2.3" # Output: true
Advisory Templates
Template: Version Bump Recommendation
**Recommended Version Bump**: [MAJOR/MINOR/PATCH] **Current Version**: X.Y.Z **Proposed Version**: A.B.C **Change Summary**: - [Breaking/Feature/Fix]: Description **Reasoning**: [Explain why this classification based on change types] **Migration Notes** (if MAJOR): [Required steps for consumers]
Template: Dependency Update Classification
**Package**: package-name **Version Change**: X.Y.Z → A.B.C **Classification**: [MAJOR/MINOR/PATCH] **Impact Assessment**: - Breaking Changes: [Yes/No] - New Features: [Yes/No] - Security Fixes: [Yes/No] **Recommended Action**: [Update now/Test first/Review carefully]
Quick Classification Chart
| Old Version | New Version | Change Type | Classification |
|---|---|---|---|
| 1.2.3 | 2.0.0 | X changed | MAJOR |
| 1.2.3 | 1.3.0 | Y changed | MINOR |
| 1.2.3 | 1.2.4 | Z changed | PATCH |
| ^4.0.0 | ^5.0.0 | X changed | MAJOR |
| ~1.2.3 | ~1.3.0 | Y changed | MINOR |
| 9.35.0 | 9.36.0 | Y changed | MINOR |
| 0.2.3 | 0.3.0 | Y changed | MINOR (0.x) |
Resources
- •Version Range Notation Guide - Detailed caret, tilde, and exact range rules
- •Classification Examples - Real-world version change examples
- •Common Errors Reference - Patterns to avoid
Full Specification
For complete semver rules and standards, see:
~/.claude/standards/semver.md