| name | Semantic Version Advisor |
| description | Advises on semantic version bumps and classifies version changes according to semver rules. Use when determining version numbers, analyzing dependency updates, or classifying version changes as MAJOR, MINOR, or PATCH. |
| version | 1.0.0 |
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-release1.0.0-beta.2- Beta pre-release1.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