Files
ai-proj-helper/skills-dev/dev-commit-plugin/skills/SKILL.md
John Qiu e5805cbb51 feat: P1-10/12/13/14 风险扫描 + 粒度判断 + Issue 集成 + PRD 校验 (REQ-20260416-0017)
P1-10: pm-risk skill — 三维度风险扫描
  需求层: 停滞/草稿滞留/开发无提交/测试超期/批准未开发
  代码层: 未合并分支/频繁修复文件/提交频率下降
  流程层: 跳过评审/PR 无 review/测试门禁跳过/直接推 main
  三级风险: 🔴 严重 / 🟡 警告 / 🔵 提示

P1-12: req-prd 需求粒度 AI 判断
  创建前启发式检查:标题过宽建议拆分、过窄建议合并或改 task
  粒度参考表 + 已有需求扩展决策表 + 前后端拆分规则

P1-13: dev-commit issue 集成规范
  分支名 -iN 后缀传递 issue 编号
  commit message 自动追加 closes #N

P1-14: hooks/validate-prd.sh — PRD 章节校验
  PostToolUse hook 自动检查 10 个必需章节
  缺失时给出明确提示

marketplace: 48 → 49 plugins (新增 pm-risk-plugin)
2026-04-19 13:33:26 +09:30

4.9 KiB
Raw Blame History

name, description
name description
dev-commit 智能 git commit — 分支保护 + 自动建功能分支 + Conventional Commits 生成。当用户说"提交代码"、"commit"、"/commit"、"保存修改"时自动激活。

dev-commit Skill — 智能提交

借鉴自 devflow-claude /req:commit。源自 REQ-20260416-0017 P0-6。

核心功能

用户说"/commit" 或 "提交代码" 时执行:

  1. 分支合规检查
  2. 自动建功能分支(若在保护分支)
  3. Conventional Commits 生成
  4. 自动关联 REQ-XXX

流程详解

1. 分支合规检查(强制)

CURRENT_BRANCH=$(git symbolic-ref --short HEAD)

# 保护分支名单
PROTECTED_BRANCHES="main master develop production"

for b in $PROTECTED_BRANCHES; do
    if [ "$CURRENT_BRANCH" = "$b" ]; then
        IS_PROTECTED=1
        break
    fi
done

铁律绝对禁止在 main / develop / master / production 分支上直接 commit。

2. 保护分支上有改动 → 自动建功能分支

检测到 main/develop 有未提交改动:

推荐方案:
  1. 自动建分支 feat/xxx 并切换过去(推荐)
  2. 取消本次 commit手动切分支
  3. 临时 stash 后切分支

【默认选 1】

分支命名自动推断:

  • 从对话上下文:如果刚在讨论 "REQ-20260416-0017" → feat/REQ-20260416-0017-summary
  • 从文件变更:扫描 staged files 的路径 → 推断模块(如 backend/services/user/feat/user-xxx
  • 从 commit message 意图:如果意图是 fix → fix/xxx

前缀规则:

  • feat/ — 新功能
  • fix/ — bug 修复
  • chore/ — 杂项依赖升级、CI 调整等)
  • refactor/ — 重构
  • docs/ — 文档

3. Conventional Commits 生成

格式:

<type>(<scope>): <description> [(REQ-XXX)] [closes #N]

type

  • feat - 新功能
  • fix - 修复
  • chore - 杂项
  • refactor - 重构
  • docs - 文档
  • test - 测试
  • perf - 性能
  • style - 格式

scope

  • 从修改的文件路径推断:backend/services/user/user
  • frontend/src/pages/login/login

示例:

feat(mcp): 新增 set_requirement_reviewers 工具 (REQ-20260415-0023)
fix(frontend): 403 权限重载死循环
chore(cicd): 精简 CI/CD 流程,移除 Staging 环境 (REQ-20260415-0004) closes #242

4. REQ-XXX 自动关联

查找顺序:

  1. 当前分支名:feat/REQ-20260416-0017-xxx → 提取 REQ-20260416-0017
  2. 最近对话中提到的 REQ ID
  3. MCP 查询当前用户的"进行中"需求(如只有一个,直接用)

分支名含 -iN 时追加 closes #N

feat/REQ-xxx-i42 + commit  →  commit message 自动加 "closes #42"

5. 提交确认

提交前展示预览:

即将执行:
  分支: feat/mcp-set-reviewers
  Files: backend/mcp/tools/set_reviewers.go, mcp-task-bridge/src/tools/set-reviewers.ts
  Message:
    feat(mcp): 新增 set_requirement_reviewers 工具 (REQ-20260415-0023)

确认提交?(y/n)

Issue 集成规范REQ-20260416-0017 P1-13

借鉴 devflow-claude 的 issue 关联机制。

分支名 -iN 后缀

当任务/需求来自 Gitea/GitHub issue 时,分支名末尾追加 -iN

feat/REQ-20260416-0017-user-points-i12    ← issue #12
fix/login-token-expired-i5                ← issue #5

规则

  • -iN 仅当 issue 关联存在时追加
  • N 为纯数字(不带 #
  • 位于分支名最末尾

commit message 自动追加 closes #N

当分支名含 -iN 后缀时commit message 末尾自动追加 closes #N

feat(user): 实现积分规则管理 (REQ-20260416-0017) closes #12
fix(auth): 修复 token 过期未刷新 closes #5

效果PR 合并后 Gitea/GitHub 自动关闭关联 issue。

Issue 编号读取优先级

优先级 来源 说明
1 --from-issue=#N 参数 用户显式指定
2 分支名 -iN 后缀 自动解析 (-i(\d+))$
3 MCP 需求文档关联的 issue (预留)

不触发的情况

  • 分支名不含 -iN → 不追加 closes
  • 用户显式说"不关联 issue" → 跳过

与 ai-proj 集成

  • 查询当前需求:通过 MCP mcp__ai-proj__find_requirementlist_requirements 找 user 进行中的
  • commit 后可选:调用 mcp__ai-proj__update_task 更新关联任务进度

排除项

本 skill 不做

  • 推送远程(留给 /prgit push
  • 创建 PR留给 pull-request skill
  • 代码评审(留给 dev-review skill

职责边界清晰,防止单命令膨胀。

风险控制

  1. 保护分支改动不得 commit — 强制拦截
  2. message 必须用 Conventional Commits — 后续 changelog 依赖
  3. REQ-XXX 关联尽量自动推断 — 但推断不出不阻断

安装方式

本 skill 自动随 ai-proj-helper marketplace 加载。用户说"/commit" 即激活。

参考

  • devflow-claude: plugins/req/commands/commit.md
  • REQ-20260416-0017 P0-6