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)
187 lines
4.9 KiB
Markdown
187 lines
4.9 KiB
Markdown
---
|
||
name: dev-commit
|
||
description: 智能 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. 分支合规检查(强制)
|
||
|
||
```bash
|
||
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_requirement` 或 `list_requirements` 找 user 进行中的
|
||
- **commit 后可选**:调用 `mcp__ai-proj__update_task` 更新关联任务进度
|
||
|
||
## 排除项
|
||
|
||
本 skill **不做**:
|
||
- 推送远程(留给 `/pr` 或 `git 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
|