plugin-versioninglisted
Install: claude install-skill azborgonovo/ai-skills
Each plugin under `skills/<plugin>/` pins an explicit `version` in its `.claude-plugin/plugin.json`. Claude Code treats that string as the update key, so a plugin's version **must** increase whenever any of its skills change — otherwise installed users never receive the change. Versions follow [SemVer](https://semver.org): breaking change → MAJOR, `feat` → MINOR, everything else (`fix`, `docs`, `refactor`, `chore`, ...) → PATCH — the same Conventional Commit type you write on the commit.
**Before every commit**, check `git status` for changed files under any `skills/<plugin>/` path (drafts under `skills/drafts/` are not plugins and are never versioned). When a plugin's skill files changed, run the bundled `scripts/upgrade-plugin-versions.py` (relative to this SKILL.md) with the exact Conventional Commit message you are about to commit, and include its edits in that same commit:
```
python .claude/skills/plugin-versioning/scripts/upgrade-plugin-versions.py --message "feat(bdd): add scenario linter"
```
The script bumps only the plugins whose skill files changed, updating each one's `plugin.json` version. It is idempotent, so running it again before the commit lands will not double-bump. **Why the message**: the commit does not exist yet, so the script reads the bump level from the message you pass — use `--major`/`--minor`/`--patch` to override when the message type doesn't capture intent.
**When a commit touches more than one plugin**, the single message's level applies t