GitHub 卫生规范
无论仓库、分支或任务上下文如何,对每个 GitHub 或 Git 操作都应用以下规则。
使用时机
当任务涉及以下任何内容时应用:
- 创建或修改 GitHub 仓库
- 克隆或使用 Git 仓库
- 创建、修改或推送提交
- 创建或更新拉取请求
- 管理分支、工作流、协作者或仓库设置
- 任何其他更改或与 GitHub 仓库交互的操作
1. 代码代理贡献者限制
绝不要将代码代理添加为 GitHub 贡献者或协作者。
不要:
- 邀请 AI/代码代理账户作为仓库协作者
- 将 AI/代码代理账户添加到 GitHub 组织或仓库
- 授予 AI/代码代理账户仓库权限
- 更改仓库权限以使 AI/代码代理账户成为贡献者
- 创建或使用专门的 AI 代理 GitHub 账户作为贡献者身份
此规则适用于所有 AI/代码代理身份,包括 Cursor、Codex、ChatGPT、其他 AI 编码代理、自动化编码机器人,以及任何其目的是代表编码代理的账户。
使用用户现有的 Git/GitHub 身份进行操作,除非用户明确请求使用不同的个人身份。
2. 提交作者和身份限制
提交不得将代码代理标识为作者、共同作者或生成器。
不要将 AI 代理署名添加到提交主题、正文、尾注、Git 作者元数据或 Git 提交者元数据中。
除非用户现有的仓库配置明确要求且无法安全更改,否则以下内容均被禁止:
Co-authored-by: Cursor
Co-authored-by: Codex
Co-authored-by: ChatGPT
Generated-by: AI
Generated-by: Codex
Generated-by: Cursor
AI-generated
Generated with Cursor
Generated with Codex
Generated with ChatGPT
不要故意配置 Git 身份以代表代码代理。
3. 提交消息格式
除非用户明确指定其他格式,否则每个提交消息必须遵循:
[xx]xxxxx
其中:
xx是预定义的两个大写字母前缀- 前缀用方括号括起来
- 前缀后紧跟着简洁的提交描述
- 描述解释更改的主要目的
- 不要添加 AI 代理名称、署名或不相关的元数据
允许
[FT]add user authentication
[FX]fix token expiration
[FE]update login page
[BE]add user service
[AP]add auth endpoint
[DB]add user table
[TS]add authentication tests
[RF]simplify auth middleware
[CI]update github workflow
[DC]update api documentation
禁止
update login page
AI: update login page
[AI]add authentication
[Cursor]fix login bug
[Codex]add api endpoint
[FT] Generated with Codex
Co-authored-by: Codex
4. 预定义提交前缀
权威默认前缀列表:
[FE] 前端
[BE] 后端
[AP] API
[DB] 数据库
[UI] UI
[CF] 配置
[CI] CI/CD
[TS] 测试
[DC] 文档
[RF] 重构
[FX] 修复
[FT] 功能
[OP] 优化
[SC] 安全
[DP] 依赖
[CH] 杂务
选择规则
除非用户明确指定其他前缀:
- 尽可能使用预定义前缀
- 绝不要发明新的前缀
- 绝不要修改预定义前缀的拼写或大写
- 在括号内使用恰好两个大写字母
- 根据更改的主要目的选择前缀
- 当多个前缀可能适用时,选择最能代表主要目的的那个
| 更改类型 | 前缀 |
|---|---|
| 新功能 | [FT] |
| 错误修复 | [FX] |
| 前端实现 | [FE] |
| 后端实现 | [BE] |
| API 更改 | [AP] |
| 数据库更改 | [DB] |
| 仅 UI 更改 | [UI] |
| 配置更改 | [CF] |
| CI/CD 更改 | [CI] |
| 测试 | [TS] |
| 文档 | [DC] |
| 不改变行为重构 | [RF] |
| 性能优化 | [OP] |
| 安全相关更改 | [SC] |
| 依赖更改 | [DP] |
| 常规维护 | [CH] |
5. 用户指定的前缀优先
预定义前缀列表是默认值,而非绝对限制。
如果用户明确指定了不同的提交前缀或提交格式,则遵循用户的明确指示。
示例:用户说 对此提交使用 [HOT] → 使用 [HOT]fix production issue。
- 不要将用户明确请求的前缀替换为预定义前缀
- 如果用户未指定前缀,则使用预定义列表
- 如果用户只指定了描述,则选择合适的预定义前缀
6. 提交描述
前缀后的描述应:
- 简洁且具体
- 用英语书写,除非用户明确请求使用其他语言
- 专注于实际更改
- 不包含 AI 代理署名
优选:
[FX]fix expired access token handling
[FT]add password reset endpoint
[FE]update account settings page
[RF]simplify request validation
避免:
[FX]fix stuff
[FT]changes
[RF]update code
[BE]AI generated backend changes
7. 提交范围
在可行的情况下,每个提交应包含一个逻辑更改。
当任务包含多个不相关的更改时:
- 不要编造单个误导性的提交描述
- 在可行时优先使用单独的提交
- 为每个提交独立选择前缀
- 保持每个提交消息能代表其实际内容
如果用户明确请求单个提交,则遵循该指示,并选择最能代表合并更改主要目的的前缀。
8. 提交前验证
在创建提交之前,验证:
身份
- Git 作者是用户配置的身份
- Git 提交者不是 AI/代码代理身份
- 不会添加 AI 代理署名
消息
- 以有效前缀开头
- 使用预定义前缀,除非用户明确指定了其他
- 对于默认前缀,使用恰好两个大写字母
- 前缀用
[]括起来 - 包含前缀后的简洁描述
- 不提及 Cursor、Codex、ChatGPT、AI 代理或类似的代理身份
- 不包含禁止的署名尾注
GitHub 权限
在更改仓库权限或协作者之前:
- 验证目标不是 AI/代码代理身份
- 绝不要授予代码代理贡献者或协作者访问权限
9. 推送和 GitHub 操作
在推送提交之前:
- 确保提交消息符合本技能要求
- 确保提交不包含禁止的 AI 署名
- 确保代码代理未被添加为 GitHub 贡献者
- 不要仅仅为了便于代理操作而修改 GitHub 权限
如果现有提交违反这些规则,而用户要求推送,则应在推送前修复违规,前提是这样做是安全的且与用户请求的工作流一致。
对于已推送到共享/公共分支的提交,不要自动重写历史记录。在以下操作前询问用户:
git commit --amend
git rebase
git reset --hard
git push --force
git push --force-with-lease
10. 拉取请求
当创建或更新拉取请求时:
- 不要将代码代理标识为贡献者
- 除非用户明确请求,否则不要添加 AI 代理署名
- 保持 PR 标题和描述侧重于实际更改
- 当存在仓库 PR 模板时,遵循该模板
- 不要修改仓库权限来创建或更新 PR
11. 冲突解决
如果其他仓库级指令、项目规则或用户指令与本技能冲突:
- 遵循优先级更高的指令
- 如果用户明确指定了提交前缀或提交格式,则遵循用户的明确请求
- 否则,使用本技能中的预定义前缀列表和提交格式
- 绝不要将代码代理添加为 GitHub 贡献者
不要默默地发明替代规则。
12. 最终执行检查清单
在完成任何与 GitHub 相关的任务之前:
[ ] 代码代理未被添加为 GitHub 贡献者。
[ ] 代码代理未被添加为 GitHub 协作者。
[ ] Git 作者不是 AI 代理身份。
[ ] Git 提交者不是 AI 代理身份。
[ ] 默认情况下提交消息遵循 [xx]xxxxx 格式。
[ ] 默认前缀来自预定义列表。
[ ] 用户指定的前缀优先于预定义列表。
[ ] 提交消息中没有 AI 代理署名。
[ ] 提交尾注中没有 AI 代理署名。
[ ] GitHub 操作不会不必要地修改仓库权限。