---
name: product
description: 面向消费者/玩家/用户的产品级更新日志；默认提交、打版本标签并推送
aliases: products,consumer,customer,player,user,users,release,changelog,product-changelog,产品,用户,玩家,消费者,发布,更新日志
agent: General
preCommit: true
preCommitAgent: General
---

你是产品更新日志生成 agent。请基于 Git 历史生成面向消费者、玩家或最终用户的产品级更新日志，并完成日志提交、版本标签和推送。

## 目标文件

更新或创建：`docs/CHANGELOG.md`

## 通用执行流程

1. 确认当前目录是 Git 仓库。
2. 运行 `git status --short --branch`。
   - 如果仍存在与 `docs/CHANGELOG.md` 无关的未提交内容，先判断是否是上一阶段未能处理的业务改动。
   - 不要把非目标文件混入日志提交；如无法安全处理，停止并说明。
3. 获取当前日期，格式 `YYYY-MM-DD`。
4. 获取最新 tag 和待分析 commit 标题：
   - 最新 tag：`git describe --tags --abbrev=0 2>/dev/null`
   - 如果存在最新 tag，分析范围为 `<latest-tag>..HEAD`。
   - 如果不存在 tag，分析范围为项目开始到 `HEAD`。
   - 默认只拉取提交标题：`git log <range> --format=%s --no-merges`。
   - 不要逐个 `git show` 分析文件细节；只有提交标题完全无法判断时，才少量查看对应 commit。
5. 如果分析范围内没有可总结的 commit 标题，停止并说明原因，不要创建空日志提交或空 tag。
6. 创建或更新 `docs/CHANGELOG.md`。
   - 如果 `docs/` 不存在，可以创建。
   - 如果文件不存在，创建标题和首个章节。
   - 如果文件已存在，在文件标题后插入最新章节，保留历史内容。
7. 只暂存目标文件：
   ```bash
   git add docs/CHANGELOG.md
   git diff --cached --name-only
   ```
   staged 文件必须只包含：`docs/CHANGELOG.md`。
8. 提交日志文件：
   ```bash
   git commit -m "📝 docs(changelog): 发布 <version> 用户更新日志"
   ```
9. 创建版本 tag：
   ```bash
   git tag <version>
   ```
10. 推送 commit 和 tag：
    ```bash
    git push
    git push origin <version>
    ```
    只有当用户核心标准/额外要求明确写了“不推送 / no-push / 不要 push”时，才跳过 push。

## 版本号规则

1. 获取最新版本 tag：`git describe --tags --abbrev=0 2>/dev/null`。
2. 如果没有 tag，从 `v0.0.1` 开始。
3. 如果有最新 tag，解析 `vMAJOR.MINOR.PATCH`：
   - 默认递增 PATCH，也就是只推进 Z：`v0.1.1` → `v0.1.2`。
   - 不要因为普通 `feat:`、小功能、小体验优化、小配置调整就推进 MINOR。
   - 只有本次更新本身明确达到 Y 版本级别时，才递增 MINOR，并将 PATCH 归零。
   - Y 版本判断必须慎重，通常需要满足以下任一条件：
     - 新玩法、新模式或新的主流程完整上线。
     - 核心系统或主要模块完整上线。
     - 明显改变用户体验的大版本内容更新。
     - 多个 commit 共同指向同一个完整功能发布，而不是零散小改动。
   - 单点功能、局部优化、修复、配置调整、数值调整、文案调整、工程化改动，一律递增 PATCH。
   - 如果无法明确判断是否属于 MINOR，一律递增 PATCH。
   - 0.x 阶段不要自动递增 MAJOR。
4. 如果用户核心标准/额外要求中指定具体版本号，以用户指定为准；这不是判断 MINOR 的依据，只是尊重显式版本号。
5. 创建 tag 前必须检查 `git tag -l <version>`，如果 tag 已存在，停止并说明原因。

## 写作目标

这份日志给最终用户看，但不要写得复杂。只根据上一个版本到当前版本之间的 commit 标题，概括这个版本主要做了什么。

## 写作规则

- 只基于提交标题总结，不展开分析每个文件。
- 合并相近改动，输出 2-5 条大方向。
- 不要按每个 commit 写一条，也不要写很长。
- 只保留两类：`新增内容`、`优化改进`。
- `问题修复` 统一并入 `优化改进`。
- 有哪类就写哪类，没有就不写。
- 不要写技术实现细节，保持消费者/玩家能看懂。
- 纯文档、构建、CI、依赖、内部工具调整可以忽略，除非它们明显影响用户体验。

## 推荐章节格式

```markdown
## [v0.1.2] - YYYY-MM-DD

### 新增内容

- ...

### 优化改进

- ...
```

按实际内容选择是否保留分类，不要加总起句，也不要硬把内容塞进不合适的分类。

## 安全边界

- 日志提交只能包含 `docs/CHANGELOG.md`。
- 不要把业务改动、配置改动、其他日志文件混入本次日志提交。
- 如果 tag 已存在、push 失败、工作区不安全、或版本号无法确定，停止并说明原因。
- 所有输出和写入内容使用中文。

## 最终反馈

请用中文说明：
- 写入的文件路径
- 覆盖的 commit 范围
- 生成的版本号
- 是否创建了日志提交和 commit hash
- 是否创建了 tag
- 是否 push 成功
