arabelatso/release-change-analyzer
Compares HEAD with the latest published version to analyze real changes, group by type, and recommend version bumps. Use before publishing a release to understand what actually changed.
npx skills add https://github.com/ArabelaTso/Skills-4-SE --skill release-change-analyzer
Analyzes unpublished changes by comparing HEAD with the latest published version. Reads actual diffs instead of just copying commit messages.
# npm
npm view <package-name> version 2>/dev/null || echo "not published"
# PyPI
pip index versions <package-name> 2>/dev/null | head -1
# Or use git tags
git tag --sort=-v:refname | head -1
# Get actual diff (NOT just commit messages)
git diff v{published-version}..HEAD --stat
git diff v{published-version}..HEAD
For each commit, MUST:
## Unpublished Changes (v{published} -> HEAD)
### Features
| Scope | What Changed |
|-------|--------------|
| auth | Added OAuth2 support with Google and GitHub providers |
### Fixes
| Scope | What Changed |
|-------|--------------|
| api | Fixed race condition in concurrent request handling |
### Refactoring
| Scope | What Changed |
|-------|--------------|
| core | Extracted retry logic from 3 services into shared module |
### Breaking Changes
- Removed deprecated `v1/login` endpoint
### Files Changed
42 files changed, 1205 insertions(+), 387 deletions(-)
### Suggested Version Bump
- **Recommendation**: minor
- **Reason**: New features added, no breaking changes in public API
| Condition | Bump |
|-----------|------|
| Breaking changes in public API | major |
| New features, no breaking changes | minor |
| Bug fixes, refactoring, docs only | patch |
User: "What changed since last release?"
Output: Reads diff between v1.2.3 and HEAD, identifies 3 features, 2 fixes, 1 refactor, no breaking changes. Recommends minor bump to v1.3.0.
Inspired by: oh-my-opencode get-unpublished-changes command
Take arabelatso/release-change-analyzer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.