.agents/skills/release-note-generator.md
基于本地 git 历史和实际代码 diff 生成 BetterGI 发布说明。发布说明的结构、分类和措辞应贴近 GitHub 已发布 Releases 的历史风格;生成具体内容时不依赖网络,所有变更信息从本地仓库获取。
已发布日志的稳定特征:
## <version> <简短主题>,例如 0.61.0 原神6.6、0.61.2 优化、0.60.1 修复老问题、0.59 自动烹饪与BUG修复。实时任务、独立任务、新功能等组织性名称不能替代更准确的主功能名称。其他 分类保留,用于 UI、通知、配置、稳定性、OCR、启动器、仓库、文档等无法归入核心模块的内容。(#3132) @haokaiyang;多个 PR 可以写在同一括号组里,例如 (#3101 #3108)。Contributors、Assets、reaction 等区块。禁止执行或参考 git tag、git describe --tags。版本边界和输出版本号都不能使用 tag 作为依据。
从 HEAD 向后遍历提交历史,匹配明确以版本号发布为主题的提交:
Update version to X.Y.Zbump version to X.Y.Zrelease X.Y.ZvX.Y.Z\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?alpha 的提交(boundary_commit, HEAD],边界提交本身不计入git -c i18n.logOutputEncoding=utf8 -c core.quotepath=false log 获取提交序列--no-merges,合并提交使用 --merges 单独获取;两组提交均限制在完全相同的统计区间内--pretty=format:"%H%x00%h%x00%P%x00%an%x00%ae%x00%s%x00%b%x1e",字段用 \x00 分隔,commit 用 \x1e 分隔git rev-list --count --no-merges 和 git rev-list --count --merges 校验采集数量Co-authored-by、PR、Issue、其他关联编号和补充说明git diff <sha>^..<sha>git show --cc --stat <sha> 和 git show --cc <sha>,只识别合并时额外产生的冲突解决或手工修改@ 前缀author email 解析标识:
数字[email protected] → @login[email protected] → @login[email protected] 等非 noreply 邮箱 → @author name(即提交中的 an 字段值前加 @)Co-authored-by: name <email> 提取共同作者,并按同样规则解析huiyadanli(含邮箱 [email protected])时省略 @author(项目维护者,无需标注)必须先完成全部分析,再开始写 Release Note。禁止一边遍历 commit 一边直接生成条目,否则会把同一功能的后续提交拆成多条。
commit 数量、PR 数量和作者数量都不等于日志条目数量。一个功能簇可以包含多个 commit、多个 PR 和多个作者。
合并校准示例:
| 同一周期内的提交 | 正确处理 |
|---|---|
| 新增桌面分身、增加 RawInput、补充 RDP 错误提示、增加组合键切换、升级通信协议 | 合并为一条“新增桌面分身”,描述最终支持的能力 |
| 新增战技赶路、修复体力判断、优化下车角度、修复按键残留 | 合并为一条“新增角色战技赶路”,不要再列三条修复或优化 |
| 指标栏快捷键先绑定日志快捷键,后改为独立快捷键 | 只描述最终的独立快捷键,并合并相关提交 |
| 重构截图与识别区域,后续修复裁剪区域导致的点击偏移 | 合并为一条识别基础设施改进,不跨分类拆成两条 |
| 页面布局统一、随后补充导航选中动画和 Footer 菜单兼容 | 合并为一条界面体验优化 |
分类不是固定枚举,也不由目录表机械决定。先完成 commit 合并,再由 AI 根据实际 diff 判断每个功能簇所属的产品主功能。历史 Release 中出现过的分类只是命名参考,不是白名单。
地图追踪是主功能;战技赶路、路径执行、地图传送、下车判定和传送识别都是其下的条目,不能分别建立分类自动战斗是主功能;战斗策略、角色识别、技能释放、战后拾取等紧密服务于战斗流程的内容归入其中遮罩窗口是主功能;准星、指标栏、日志框和窗口行为归入其中自动拾取、自动吃药、自动剧情、秘境、首领讨伐、钓鱼等具有独立入口或独立工作流,应直接使用自身功能名,不能统一塞入实时任务或独立任务以下名称通常只是组织容器,不应作为默认分类:实时任务、独立任务、新功能、功能优化、问题修复。只有用户界面或项目历史确实把它作为独立产品概念时才允许使用。
对所有功能簇统一使用“最近的独立上级主功能”原则:从具体改动向上追溯,选择距离最近、同时具备独立产品入口或完整用户工作流的上级功能作为分类。不要选择更高层的组织容器,也不要停留在更低层的实现或子功能。
| 具体改动 | 应归入的上级主功能 | 不应使用的分类 |
|---|---|---|
| 战技赶路、传送定位、路径处理器 | 地图追踪 | 战技赶路、地图传送、独立任务 |
| 自动拾取黑名单、拾取触发和拾取识别 | 自动拾取 | 黑名单、实时任务 |
| 首领路线、首领配置和战前等待 | 首领讨伐 | 路线优化、独立任务 |
| 遮罩准星、指标栏和日志框 | 遮罩窗口 | 准星、指标栏、其他 |
| 桌面分身的 RawInput、RDP 错误提示和通信协议 | 桌面分身 | RawInput、RDP、其他 |
此表只用于说明层级关系,不是分类白名单。其他功能必须由 AI 按同一原则从代码、界面和调用关系中判断。
按以下证据从强到弱确定主功能,允许 AI 创建历史中未出现过但符合项目语义的新分类:
GameTask/Common、共享 ViewModel、设置页和 .csproj 均不能直接决定分类genshin.*、dispatcher.* 等公共 API 归入JS脚本,即使底层实现位于战斗、地图或通用目录.csproj 路径归入其他,也不得编造本地无法确认的细节其他;明确服务于单一主功能时跟随该主功能分类完成后反向检查:分类名必须能自然回答“这是哪个主功能的更新?”。若答案只能是一个组织容器或技术层,重新判断。
只有变更的核心行为与地图位置或地图标点在遮罩窗口中的展示和交互直接相关时,才归入地图遮罩。通常至少需要一项地图专属证据:
GameTask/MapMask、Model/MaskMap、MaskMapPointService 等地图遮罩专属模块MaskWindow、MaskWindowViewModel 等共享文件时,同时能从属性、命令、调用链或配套文件确认改动服务于地图标点展示以下内容即使名称或文件中含有 Mask / “遮罩”,也不能仅因此归入地图遮罩:
遮罩窗口HtmlMaskWindow、Core/Script/Dependence/HtmlMask*,归入JS脚本其他View/MaskWindow*、ViewModel/MaskWindow*、Core/Config/MaskWindowConfig*、设置页或快捷键配置,不构成地图遮罩的充分证据冲突时使用以下优先顺序:专属业务模块和调用链 > diff 中的功能对象 > 配置项/命令语义 > 共享文件路径 > 提交标题关键词。证据不足时放入其他,不要猜测为地图遮罩。
校准示例:
| 变更 | 正确分类 | 原因 |
|---|---|---|
| 为遮罩窗口新增准星样式 | 遮罩窗口 | 修改的是通用遮罩窗口显示能力,与地图位置或标点无关 |
| 为遮罩指标栏增加独立快捷键 | 遮罩窗口 | 修改的是指标栏和快捷键配置,不能因“遮罩”一词归入地图遮罩 |
| 修改 HTML 遮罩资源拦截或 JS 响应 | JS脚本 | HTML 遮罩是脚本 API 能力 |
| 增加地图遮罩标点的隐藏、筛选或数据源隔离 | 地图遮罩 | 核心对象是地图标点及其数据 |
| 为模板匹配增加颜色掩膜 | 所属业务分类或其他 | 这是图像识别掩膜,不是地图遮罩 |
<月之X适配>;否则使用 版本适配新功能、实时任务或独立任务代替能够识别出的上级主功能feat/fix/refactor其他每条记录格式:
描述内容 (#编号) @author
huiyadanli 时省略 @author(项目维护者,无需标注)feat:、fix: 等 Conventional Commits 前缀(#3111)、Merge pull request #3111 或明确的 /pull/3111 链接可以判定为 PR 号fixes #3111、closes #3111、resolved #3111 或明确的 /issues/3111 链接按 Issue 关联处理#3111 只称为“关联编号”,不得擅自标记为 PR@id1 @id2(#3101 #3108),不要写成多个分散条目输出到 .claude/documents/ReleaseNotes-<version>.md(文件名 ASCII)。
输出文件的版本号规则:取边界版本号的次版本号(minor)加 1,补丁版本归零。即 major.(minor+1).0。例如边界为 0.60.1,输出版本号为 0.61.0。
若用户明确指定版本号或发布主题,以用户指定为准;否则按上述规则推导。
## <version> <版本主题>
<一句话版本主题>
### 分类名1
- 变更描述 (#PR号) @author
- 变更描述 @author
### 分类名2
- 变更描述 (#PR号) @author
### 其他
- 变更描述 @author
补丁版本或少量修复可以不分分类,直接输出 bullet;但如果使用分类,仍必须保留 其他 分类。
初稿不能直接输出。依次执行以下验证;任一项失败都必须退回功能簇合并、分类或文案阶段重写,然后重新验证。
实时任务、独立任务或新功能时,逐条检查是否存在更准确的独立上级主功能;存在则判定失败其他中的条目只要能识别出自动拾取、钓鱼、一条龙、进入游戏等具体主功能,就判定失败并重新分类其他达到 4 条或超过全部条目的 25% 时,强制逐条重新检查;只有确属跨模块基础设施的内容才能保留地图遮罩条目具备地图坐标、标点或数据源等专属证据其他分类必须存在;全部信息仅从本地 git 获取,不依赖网络