mcpField
C
changelog-composer

changelog-composer

github.com/mathews-tom开发337107 次安装2 天前更新
代码仓库

关于 changelog-composer

changelog-composer 是将 git 历史和 PR 描述整理为面向不同受众的更新日志的技能。它会分类变更、过滤内部修改、突出破坏性变更,并按 Keep a Changelog 规范组织内容。

主要功能

  1. 01收集提交和 PR 信息
  2. 02解析 conventional commits
  3. 03按影响分类变更
  4. 04过滤仅限内部的修改
  5. 05突出破坏性变更及迁移说明
  6. 06整理更新日志格式

适用场景

  1. 01准备带标签版本的更新说明
  2. 02汇总指定日期或提交范围内的变更
  3. 03为单个 PR 编写更新日志条目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mathews-tom/armory --skill changelog-composer

安装后在 Claude Code 中输入/changelog-composer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
cases.yaml
references/
audience-filter.md
categorization-rules.md
changelog-formats.md
conventional-commits.md

详细介绍

变更日志撰写器

将原始 Git 历史记录和 PR 描述转换为润色后的、适合目标受众的变更日志。解析约定式提交,按影响类别对变更分类,过滤仅供内部使用的修改,并生成带 PR 链接的结构化发布说明——遵循 Keep a Changelog 规范。

参考文件

文件内容加载时机
references/conventional-commits.md提交类型解析、作用域提取、重大变更标记仓库使用约定式提交时
references/categorization-rules.md变更分类逻辑、受众筛选、严重程度排序始终
references/audience-filter.md面向用户的变更与内部变更检测、排除模式始终
references/changelog-formats.mdKeep a Changelog、GitHub Releases、公告文案模板需要选择格式时

前置条件

  • git — 访问仓库历史记录
  • gh(可选)— 用于提取 PR 描述的 GitHub CLI
  • 用于确定发布边界的标签策略(semver 标签)

工作流

阶段 1:收集原始变更

收集上一个版本到当前状态之间的所有变更:

  1. 确定边界 — 查找上一个发布标签:git describe --tags --abbrev=0。 如果不存在标签,则使用初始提交或用户指定的起始点。
  2. 提取提交 — git log <last-tag>..HEAD --oneline --no-merges
  3. 提取 PR 标题 — gh pr list --state merged --base main --search "merged:>YYYY-MM-DD" 或解析合并提交消息。
  4. 解析约定式提交 — 如果仓库遵循约定式提交 (feat:、fix:、docs: 等),则提取类型、作用域和描述。请参阅 references/conventional-commits.md。
  5. 收集重大变更标记 — 查找提交正文中的 BREAKING CHANGE:、类型后的 !(feat!:),或 PR 描述中的明确标注。
阶段 2:对变更分类

按影响对每项变更进行分类:

类别约定式提交类型标记
重大变更feat!:、BREAKING CHANGE:API 移除、签名变更、行为变更
功能feat:新能力、新端点、新命令
修复fix:错误修正、错误处理改进
性能perf:速度提升、内存占用减少
文档docs:README、API 文档、指南
内部变更chore:、ci:、refactor:、test:、build:对用户无影响

对于不使用约定式提交的仓库,请阅读提交消息和变更文件进行分类。公共 API 的代码变更 → 功能或修复。仅涉及测试的变更 → 内部变更。

第 3 阶段:筛选受众相关内容
  1. 默认排除内部变更:

    • CI/CD 配置变更
    • 新增或修改测试
    • 依赖项升级(与安全相关的除外)
    • 不改变行为的代码重构
    • 构建系统变更
  2. 仅在以下情况下纳入内部变更:

    • 这些变更代表用户应了解的重大架构调整
    • 这些变更会影响开发工作流(如贡献指南变更)
    • 更新日志面向开发者,而非最终用户
  3. 突出显示重大变更——始终置于最前,并始终提供迁移指南。

第 4 阶段:撰写条目

为每项纳入的变更撰写易于理解的描述:

  1. 先说明影响——“用户现在可以……”或“修复了……问题”
  2. 描述具体——“将大文件处理的内存使用量减少了 40%”,而不是“性能改进”
  3. 为重大变更提供迁移指南——说明用户必须做出哪些更改
  4. 链接到来源——PR 编号、问题编号或提交哈希
第 5 阶段:输出

按严重程度排序,并以所需格式整理更新日志:

  1. 重大变更(始终置于最前)
  2. 功能
  3. 修复
  4. 性能
  5. 文档

输出格式

## [{version}] - {YYYY-MM-DD}

### Breaking Changes
- **`function_name` parameter renamed** — `old_param` is now `new_param`.
  Migration: find/replace `old_param=` with `new_param=` in all call sites. ([#{pr}]({url}))

### Features
- **{Feature name}** — {What it enables and why it matters}. ([#{pr}]({url}))

### Fixes
- Fixed {symptom} when {condition}. ([#{pr}]({url}))

### Performance
- {Operation} is now {X}x faster / uses {X}% less memory. ([#{pr}]({url}))

### Documentation
- Added {guide/reference} for {topic}. ([#{pr}]({url}))

配置范围

模式输入输出使用场景
release标签到 HEAD完整的更新日志条目准备版本发布
sprint日期范围或提交范围变更摘要Sprint 回顾、状态更新
pr单个 PR一行更新日志条目PR 描述模板

校准规则

  1. 首先关注用户影响。 每个条目都应回答“这对用户意味着什么?”,而不是“开发者做了什么?”
  2. 重大变更不可妥协。 绝不省略或隐藏重大变更。它们必须放在最前,并附上迁移指南。
  3. 具体胜过含糊。 “修复了慢速连接下的登录超时问题”胜过“修复了错误”。“为报告添加了 CSV 导出”胜过“新增功能”。
  4. 为所有内容添加链接。 每个条目都要链接到来源 PR 或问题。想要了解详情的用户可以点击链接。
  5. 排除无关内容。 内部重构、依赖项升级和 CI 变更不应出现在面向用户的更新日志中,除非它们会对用户产生可见影响。

错误处理

问题解决方案
仓库中不存在标签请提供起始提交或日期。如果仓库较小,则默认从初始提交开始。
仓库未使用约定式提交阅读提交消息和变更文件进行分类。注明分类准确性有所降低。
PR 描述为空或质量较差改用提交消息。标记可能需要人工审核的条目。
变更分类不明确新增内容默认归为“功能”,修改内容默认归为“修复”。将不确定的条目标记为待审核。
单个版本的变更过多按组件或模块分组。考虑是否应拆分版本发布。
合并提交掩盖了单项变更使用 --no-merges 跳过合并提交。解析已合并 PR 中的单项提交。

不应使用 Compose 的情况

如果出现以下情况,请提出异议:

  • 用户想要未经审核自动发布发行说明——变更日志需要人工判断
  • 仓库没有有意义的提交历史(只有一个包含所有内容的“初始提交”)
  • 请求的是营销文案,而非技术发行说明——这属于不同的技能
  • 更改尚未合并——变更日志应记录已发布的更改,而非进行中的工作

评论

支持 Markdown