apply-semantic-versioning
À propos
Cette compétence analyse les modifications du code pour déterminer le bon incrément de version sémantique (majeure, mineure ou correctif) selon SemVer 2.0.0. Elle gère la détection des changements cassants, les identifiants de pré-version et les métadonnées de compilation pour la préparation des versions. Utilisez-la après la fusion des modifications pour décider objectivement du prochain numéro de version ou pour résoudre les désaccords sur le versionnage.
Installation rapide
Claude Code
Recommandénpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/apply-semantic-versioningCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
施語意化版本控制
藉變更分析判並施正確之語意化版本升級。涵蓋 major/minor/patch 分類、預發識別碼、構建元資料與破壞性變更偵測。遵 SemVer 2.0.0 規格。
適用時機
- 備新發行而需判正確版本號
- 合一組變更後且於標記發行前
- 評變更是否構成破壞性變更
- 為版本加預發識別碼(alpha、beta、rc)
- 解何升級宜之歧見
輸入
- 必要:含版本檔(DESCRIPTION、package.json、Cargo.toml、pyproject.toml 或 VERSION)之專案根目錄
- 必要:自上次發行以來之 git 歷史(標籤或提交)
- 選擇性:所用之提交慣例(Conventional Commits、自由形式)
- 選擇性:欲施之預發標籤(alpha、beta、rc)
- 選擇性:若不能自檔讀,則先前版本
步驟
步驟一:讀當前版本
於專案根尋並讀版本檔。
# R packages
grep "^Version:" DESCRIPTION
# Node.js
grep '"version"' package.json
# Rust
grep '^version' Cargo.toml
# Python
grep 'version' pyproject.toml
# Plain file
cat VERSION
將當前版本解析為 major.minor.patch 之分量。若版本含預發後綴(如 1.2.0-beta.1),分別注之。
預期: 當前版本識為 MAJOR.MINOR.PATCH[-PRERELEASE]。
失敗時: 若無版本檔現,查 VERSION 檔或 git 標籤(git describe --tags --abbrev=0)。若全無版本,初開發起 0.1.0,若專案有穩定公共 API 則起 1.0.0。
步驟二:析自上次發行以來之變更
取自上次標記發行以來之變更清單。
# Find the last version tag
git describe --tags --abbrev=0
# List commits since that tag
git log --oneline v1.2.3..HEAD
# If using Conventional Commits, filter by type
git log --oneline v1.2.3..HEAD | grep -E "^[a-f0-9]+ (feat|fix|BREAKING)"
若無標籤,對初提交或已知基線比。
預期: 提交清單附訊息,可按變更類型分類。
失敗時: 若 git 歷史不可用或標籤缺,請開發者人工述變更。依其述分類。
步驟三:分類變更
施 SemVer 分類規則:
| Change Type | Version Bump | Examples |
|---|---|---|
| Breaking (incompatible API change) | MAJOR | Renamed/removed public function, changed return type, removed parameter, changed default behavior |
| Feature (new backwards-compatible functionality) | MINOR | New exported function, new parameter with default, new file format support |
| Fix (backwards-compatible bug fix) | PATCH | Bug fix, documentation correction, performance improvement with same API |
分類規則:
- 若任一變更為破壞性,升為 MAJOR(minor 與 patch 重置為 0)
- 若無破壞性變更而有新功能,升為 MINOR(patch 重置為 0)
- 若僅修復,升為 PATCH
特例:
- Pre-1.0.0:初開發期間(
0.x.y),minor 升或含破壞性變更。明文記 - 棄用:棄用函式為 MINOR 變更(仍可工)。移除為 MAJOR
- 內部變更:不改公共 API 之重構為 PATCH
預期: 每變更分為破壞/功能/修復,整體升級層次已判。
失敗時: 若變更曖昧,寧高升。保守之 major 升勝於斷下游碼之 minor 升。
步驟四:計新版本
對當前版本施升級:
| Current | Bump | New Version |
|---|---|---|
| 1.2.3 | MAJOR | 2.0.0 |
| 1.2.3 | MINOR | 1.3.0 |
| 1.2.3 | PATCH | 1.2.4 |
| 0.9.5 | MINOR | 0.10.0 |
| 2.0.0-rc.1 | (release) | 2.0.0 |
若請預發標籤:
1.3.0-alpha.1為將來 1.3.0 之首 alpha1.3.0-beta.1為首 beta1.3.0-rc.1為首發行候選
預發優先:alpha < beta < rc < (release)。
預期: 新版本號依 SemVer 規則計算。
失敗時: 若當前版本格式錯或非 SemVer,先正規化之。如 1.2 化為 1.2.0。
步驟五:更新版本檔
將新版本寫至宜檔。
# R: Update DESCRIPTION
# Change "Version: 1.2.3" to "Version: 1.3.0"
// Node.js: Update package.json
// Change "version": "1.2.3" to "version": "1.3.0"
// Also update package-lock.json if present
# Rust: Update Cargo.toml
# Change version = "1.2.3" to version = "1.3.0"
若專案有多檔引用版本(如 _pkgdown.yml、CITATION、codemeta.json),皆更新。
預期: 一切版本檔一致更新至新版本號。
失敗時: 若檔更新失敗,回退一切變更以保一致。從不留版本檔於部分更新之態。
步驟六:建版本標籤
提交版本升後,建 git 標籤。
# Annotated tag (preferred)
git tag -a v1.3.0 -m "Release v1.3.0"
# Lightweight tag (acceptable)
git tag v1.3.0
用專案立之標籤格式:
v1.3.0(最常)1.3.0(無前綴)[email protected](單倉庫多套件)
預期: Git 標籤已建,合於新版本。
失敗時: 若標籤已存,版本未正確升。以 git tag -l "v1.3*" 查重複標籤並先解之。
驗證
- 當前版本自正確之版本檔讀
- 自上次發行以來一切提交皆已析
- 每變更分為破壞、功能或修復
- 升級層次合於最高嚴重度之變更(破壞 > 功能 > 修復)
- 新版本遵 SemVer 2.0.0 格式:
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD] - 專案中一切版本檔一致更新
- 無跳版本(如 1.2.3 至 1.4.0 而 1.3.0 未發)
- Git 標籤合於新版本與專案之標籤格式慣例
- 預發後綴(若用)遵正確優先(alpha < beta < rc)
常見陷阱
- 跳 minor 版本:自 1.2.3 直至 1.4.0 因「加二功能」。每發一升;功能數不決版本
- 將棄用視為破壞:棄用函式(加警告)為 minor 變更。僅移除為破壞性變更
- 遺 pre-1.0.0 規則:1.0.0 前 API 視為不穩。某專案於此期間為破壞性變更升 minor,然應記之
- 版本檔不一致:更 package.json 而不更 package-lock.json,或更 DESCRIPTION 而不更 CITATION。一切版本引用須同步
- 構建元資料之混:構建元資料(
+build.123)不影版本優先。1.0.0+build.1與1.0.0+build.2同優先 - 不標記發行:無 git 標籤則將來版本升不能判變更分析之基線
相關技能
manage-changelog— 維與版本升配對之變更日誌條目plan-release-cycle— 規劃決何時版本升之發行里程release-package-version— R 特定之發行工作流,含版本升commit-changes— 以宜訊息提交版本升create-github-release— 自版本標籤建 GitHub release
Dépôt GitHub
Compétences associées
content-collections
MétaCette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
polymarket
MétaCette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
creating-opencode-plugins
MétaCette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
sglang
MétaSGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
