executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
apply-semantic-versioning应用语义化版本控制(SemVer 2.0.0)根据变更分析确定正确的版本号升级。 涵盖主版本/次版本/修订版本分类、预发布标识符、构建元数据和破坏性变更检测。 适用于准备新发布以确定正确版本号时、合并变更后打标签前、评估变更是否构成 破坏性变更时、添加预发布标识符时,或解决关于适当版本升级的分歧时。
Independent GitHub snapshot · Automated classification · Original documentation governs
通过分析上次发布以来的变更来确定并应用正确的语义化版本升级。本技能读取版本文件,将变更分类为破坏性(主版本)、功能(次版本)或修复(修订版本),计算新版本号,并更新相应文件。遵循 SemVer 2.0.0 规范。
在项目根目录中定位并读取版本文件。
# 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 分类规则:
| 变更类型 | 版本升级 | 示例 |
|---|---|---|
| 破坏性(不兼容的 API 变更) | 主版本(MAJOR) | 重命名/移除公共函数、更改返回类型、移除参数、更改默认行为 |
| 功能(新的向后兼容功能) | 次版本(MINOR) | 新导出函数、带默认值的新参数、新文件格式支持 |
| 修复(向后兼容的缺陷修复) | 修订版本(PATCH) | 缺陷修复、文档修正、保持相同 API 的性能改进 |
分类规则:
特殊情况:
0.x.y),次版本升级可能包含破坏性变更。需清楚记录。预期结果: 每个变更被分类为破坏性/功能/修复,并确定整体升级级别。
失败处理: 如果变更不明确,倾向于更高级别的升级。保守的主版本升级好于破坏下游代码的次版本升级。
将升级应用于当前版本:
| 当前版本 | 升级 | 新版本 |
|---|---|---|
| 1.2.3 | 主版本 | 2.0.0 |
| 1.2.3 | 次版本 | 1.3.0 |
| 1.2.3 | 修订版本 | 1.2.4 |
| 0.9.5 | 次版本 | 0.10.0 |
| 2.0.0-rc.1 | (发布) | 2.0.0 |
如果请求预发布标签:
1.3.0-alpha.1 用于即将到来的 1.3.0 的第一个 alpha1.3.0-beta.1 用于第一个 beta1.3.0-rc.1 用于第一个发布候选预发布优先级:alpha < beta < rc < (发布)。
预期结果: 按照 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(无前缀)package-name@1.3.0(monorepo)预期结果: 创建与新版本匹配的 Git 标签。
失败处理: 如果标签已存在,说明版本未正确升级。用 git tag -l "v1.3*" 检查重复标签,并在继续之前解决。
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]+build.123)不影响版本优先级。1.0.0+build.1 和 1.0.0+build.2 具有相同的优先级manage-changelog -- 维护与版本升级配对的变更日志条目plan-release-cycle -- 规划确定何时进行版本升级的发布里程碑release-package-version -- 包含版本升级的 R 特定发布工作流commit-changes -- 用适当的消息提交版本升级create-github-release -- 从版本标签创建 GitHub 发布