# 变更分类规则

> **前置条件：** 先阅读 [`../../gitlink-shared/SKILL.md`](../../gitlink-shared/SKILL.md) 了解认证、全局参数和安全规则。

将收集到的 commits、PRs 和 Issues 按类型归类，为生成结构化 Release Notes 做准备。

## 分类维度

变更按以下维度分类：

| 类型 | 图标 | 标题 |
|------|------|------|
| 新功能 | ✨ | 新功能 |
| Bug 修复 | 🐛 | Bug 修复 |
| 功能改进 | 🔧 | 功能改进 |
| 破坏性变更 | ⚠️ | 破坏性变更 |
| 文档 | 📝 | 文档 |
| 安全修复 | 🔒 | 安全修复 |

## 分类依据

### 按 Issue 标签分类（最可靠）

从 `issue +list` 返回的 `issue_tags` 字段匹配：

| Issue 标签 | 对应类型 |
|------------|----------|
| `feature`, `enhancement` | 新功能 |
| `bug`, `fix` | Bug 修复 |
| `improvement`, `optimize` | 功能改进 |
| `breaking`, `major` | 破坏性变更 |
| `docs`, `documentation` | 文档 |
| `security`, `vulnerability` | 安全修复 |

### 按 Commit 关键词分类（辅助）

从 `compare` API 返回的 `commit.message` 第一行匹配：

| 关键词 | 对应类型 |
|--------|----------|
| `feat:`, `add`, `新增` | 新功能 |
| `fix:`, `bugfix`, `修复` | Bug 修复 |
| `improve:`, `optimize:`, `refactor:`, `优化`, `重构` | 功能改进 |
| `BREAKING`, `breaking:`, `!` | 破坏性变更 |
| `docs:`, `doc` | 文档 |
| `security:`, `安全` | 安全修复 |

### 按 PR 标题分类（辅助）

PR 标题通常遵循 Conventional Commits 格式，按前缀匹配：

| PR 标题前缀 | 对应类型 |
|-------------|----------|
| `feat:` / `feature:` | 新功能 |
| `fix:` | Bug 修复 |
| `refactor:` / `perf:` | 功能改进 |
| `docs:` | 文档 |

## 分类优先级

1. **Issue 标签**（最准确，优先采用）
2. **PR 标题前缀**（次之）
3. **Commit 关键词**（兜底）

对于同一个变更，如果 Issue 标签和 commit 关键词都在，以 Issue 标签为准。

## 去重

以下情况会产生重复条目，需去重：

- PR 和 Issue 关联同一个变更 → 合并为一条：`变更描述 (#PR编号, #Issue编号)`
- 同一变更的多个 commit → 只保留摘要最清晰的一条
- PR 标题与关联 Issue 主题高度相似 → 合并，优先使用 Issue 的 subject

## 输出格式

分类完成后，整理为结构化数据供模板填充：

```
新功能:
  - 支持批量关闭 Issue (#123)
  - 新增 Wiki 管理命令 (#130)

Bug 修复:
  - 修复 Windows 登录 token 存储失败 (#118)

功能改进:
  - 优化 API 请求性能 (#125)

破坏性变更:
  - 重构认证模块接口（不向下兼容）(#140)

文档:
  - 补充分支映射说明 (#115)
```

## 贡献者收集

从 commit 和 PR 数据中提取贡献者列表：

- Commit: `author.name` 或 `author.login`
- PR: `author.login`

去重后生成贡献者名单，写入 Release Notes 末尾。

## References

- [collect-data](collect-data.md) — 数据收集步骤
- [generate-and-publish](generate-and-publish.md) — 生成 Notes 并发布
- [SKILL.md](../SKILL.md) — 分类规则速查表
