diff --git a/codex/skills/commit-message/SKILL.md b/codex/skills/commit-message/SKILL.md index 7ae933c..7d01a3c 100644 --- a/codex/skills/commit-message/SKILL.md +++ b/codex/skills/commit-message/SKILL.md @@ -1,63 +1,48 @@ --- name: commit-message -description: "根据 staged diff 自动建议提交信息(:emoji: type(scope): subject),并可生成可选 body/footer。Triggers: commit message, 提交信息, 写提交说明, 生成提交信息, 提交 msg, emoji commit, git commit." +description: "基于 staged diff 生成符合 commit_message.md 的提交信息建议(:emoji: type(scope): subject)。Triggers: commit message, 提交信息, 写提交说明, 生成提交信息, emoji commit, git commit." --- # Commit Message(提交信息建议器) -目标:基于 `git diff --cached`(staged diff)自动生成 1–3 条符合 Playbook 规范的提交信息建议:`:emoji: type(scope): subject`(可选 body/footer)。 +目标:基于 `git diff --cached`(staged diff)生成 1–3 条提交信息建议:`:emoji: type(scope): subject`(可选 body/footer)。 -权威规范:`docs/common/commit_message.md`(type/emoji 对应关系、格式与约定)。 +权威规范(单一真源,优先就近路径): +- `docs/common/commit_message.md` +- `docs/standards/playbook/docs/common/commit_message.md`(Playbook vendoring 场景) ## When to use - 用户要“写提交信息 / 生成 commit message / 按规范写提交说明 / emoji commit” - 已经 `git add` 了一批改动,准备 `git commit` -## Inputs(缺失就先问) -- 目标变更集:staged(默认)|unstaged|全部 -- scope:自动推断(默认)|用户指定 -- 是否允许拆分提交:是/否(当 staged 变更明显包含多个逻辑变更时) - ## Procedure(default) -1. **获取 staged 变更概览(优先小上下文)** - - 文件清单:`git diff --cached --name-status` - - 统计:`git diff --cached --stat` - - 如需语义:只对关键文件看 diff:`git diff --cached -- ` +1. **收集 staged 概览(尽量小上下文)** + - `git diff --cached --name-status` + - `git diff --cached --stat` + - 必要时只看关键文件:`git diff --cached -- ` -2. **推断 type(给出主建议 + 备选)** - - 只改文档/注释:`docs`(`:memo:`) - - 只改测试:`test`(`:white_check_mark:`) - - 纯格式/排版:`style`(`:art:`) - - 不改行为的结构调整:`refactor`(`:recycle:`) - - 修 bug:`fix`(`:bug:`) - - 新增功能:`feat`(`:sparkles:`) - - 配置/脚本/维护性改动:`chore`(`:wrench:`) - - 性能:`perf`(`:rocket:`);依赖:`deps`(`:package:`);安全:`security`(`:lock:`);删除:`remove`(`:wastebasket:`) +2. **读取并遵循权威规范** + - 优先读取就近的 `commit_message.md`(见上方路径),以其中的 type/emoji/格式为准。 -3. **推断 scope(可选)** - - 规则:优先用“变更文件的共同父目录/组件名”;避免过长;用 `lower_snake_case` - - 示例:`tsl`、`office_xml`、`scripts`、`docs`、`skills` - - 若无法稳定推断:省略 scope +3. **生成 1 条主建议 + 2 条备选** + - 格式固定:`:emoji: type(scope): subject`(scope 可省略)。 + - subject 用一句话描述“做了什么”,避免含糊词;尽量 ≤ 72 字符,不加句号。 -4. **生成 subject(一句话,祈使句/现在时)** - - 首字母小写,不加句号,尽量 ≤ 72 字符 - - 用词模板: - - `add ...` / `fix ...` / `refactor ...` / `sync ...` / `update ...` - - 避免“调整一下/优化一些”等不明确描述 +4. **判断是否建议拆分提交** + - 当 staged 同时包含多个不相关模块/目的时:建议拆分,并给出拆分方式(按目录/功能点/风险)。 -5. **可选:生成 body/footer** - - body:说明“为什么改、影响什么、验证方式”,每行建议 ≤ 72 字符 - - footer:任务号或 `BREAKING CHANGE:`(若有) +5. **可选:补充 body/footer(如需要)** + - body:说明 why/impact/verify(按规范建议换行)。 + - footer:任务号或 `BREAKING CHANGE:`(若有)。 -6. **输出并确认** - - 输出 1 条主建议 + 2 条备选(不同 type/scope/subject),并说明取舍 - - 不要自动执行 `git commit`,除非用户明确要求 +6. **只给建议,不默认执行 `git commit`** + - 仅当用户明确要求时,才根据选定方案生成最终提交信息。 ## Output contract(固定输出) -- Detected: staged files summary(文件数 + 关键路径) +- Detected: staged files summary(文件数 + 关键路径 + 是否可能需要拆分) - Proposed: - Option A(recommended):`:emoji: type(scope): subject` - Option B:... - Option C:... - Optional body/footer(如适用) -- Notes:是否建议拆分提交 + 建议拆分方式 +- Notes:规范路径命中情况(哪个 `commit_message.md` 被使用)