用途:在打标签发版前,为某个发布单元更新其 CHANGELOG.md。Ratel 按单元发布(ADR-0008),每个单元以自己的标签 <prefix>-v* 和独立版本发布。对于接了工作流的单元,.github/workflows/release.yml 会拒绝 CHANGELOG 中不含所发版本的标签。vercel-ai-sdk 目前仍用 scripts/publish-rc.sh 手动发布,但其标签前仍需运行本技能。每个要发布的单元运行一次。
发布单元注册表位于 scripts/release-units.mjs,可用 node scripts/release-units.mjs --list 查看权威列表;当前八个单元为 core(src/core/CHANGELOG.md)、sdk-ts(src/sdk/ts/CHANGELOG.md)、sdk-py(src/sdk/python/CHANGELOG.md)、telemetry-core(src/telemetry/core/CHANGELOG.md)、telemetry-ts(src/telemetry/ts/CHANGELOG.md)、telemetry-py(src/telemetry/python/CHANGELOG.md)、vercel-ai-sdk(src/adapters/ts-vercel-ai-sdk/CHANGELOG.md)、mastra(src/adapters/ts-mastra/CHANGELOG.md)。@ratel-ai/mcp-server 在另一仓库维护自己的 CHANGELOG。
流程:1)若用户未指定单元,先运行 node scripts/releasable.mjs 列出上次发布标签后有提交的单元;用 node scripts/release-units.mjs --version "$UNIT" 读取规范版本;用户显式指定版本时以其为准并提示工作树不一致。2)确定 diff 范围:从该单元自己上次发布标签到 HEAD,取标签前缀后执行 git describe --tags --match "${prefix}*" --abbrev=0;若为空说明从未发布,整段历史在范围内。3)生成草稿:bash .claude/skills/changelog/draft.sh --unit "$UNIT",输出单个 ### <package-name> 块,含 Keep-a-Changelog 各节或哨兵 No user-facing changes.;省略 --unit 可一次草拟所有单元。若退出码 127 说明缺少 git-cliff,按其 stderr 提示安装后停止。4)按 RC 或 GA 处理:RC(X.Y.Z-rc.N)在最近版本节前插入 ## [X.Y.Z-rc.N] - YYYY-MM-DD 节;GA 则合并同一 MAJOR.MINOR.PATCH 的所有 RC 节与草稿条目,按 Added/Changed/Fixed 各子节去重,有真实条目时去掉哨兵,仅当并集为空时保留,并用单个 ## [X.Y.Z] 节替换。5)与用户一起整理:展示待定变更,请用户确认或修改,常见操作包括改写为面向用户的措辞、删除非用户可见条目、合并重复项、在 Added/Changed/Fixed 间调整归类。6)批准后仅用 Edit 工具写该单元的 CHANGELOG,不提交;发布提交由用户负责。多单元发布时从第 1 步重复。7)提醒用户:清单暂存于工作树;下一步是发布提交加 <unit>-v<version> 标签并推送;工作流单元会校验 CHANGELOG 是否含标签版本,否则阻止发布;vercel-ai-sdk 需在推标签后用 scripts/publish-rc.sh 手动发布,其 CHANGELOG 尚未接入工作流门禁。约定:日期用 UTC 的 YYYY-MM-DD;子节顺序为 Added、Changed、Fixed、Removed、Deprecated、Security,空子节省略;哨兵文案为 No user-facing changes.;顶部保留空的 ## [Unreleased]。其他发布工程细节见 docs/adr/0008-release-engineering.md。