인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
개발 및 엔지니어링 · SKILL.md

cr-commit-check

cr-commit-check

【Code Review 子 Agent · 门控一】校验本迭代所有 commit 是否符合 Conventional Commits 规范及项目可追溯性格式。输入 git log 片段和项目元数据,输出结构化校验报告并以 STATUS=OK|FAIL 结尾。由 spec-driven-dev 的 code_review 阶段自动调用,不建议单独触发。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: cr-commit-check description: 【Code Review 子 Agent · 门控一】校验本迭代所有 commit 是否符合 Conventional Commits 规范及项目可追溯性格式。输入 git log 片段和项目元数据,输出结构化校验报告并以 STATUS=OK|FAIL 结尾。由 spec-driven-dev 的 code_review 阶段自动调用,不建议单独触发。 user-invocable: false metadata: {"openclaw": {"emoji": "📝", "requires": {"bins": ["git"]}, "calledBy": ["spec-driven-dev"]}}

cr-commit-check

Code Review 流水线的第一道门控:Commit Message 合规校验子 Agent。 由 spec-driven-dev 的 code_review 阶段作为 Sub-Agent 调用,校验通过后才解锁门控二。


调用契约

输入(由 Orchestrator 注入上下文)

字段类型说明
us_idstring用户故事 ID,如 US042
iter_idstring当前迭代 ID,如 iter_003
git_logstringgit log main..HEAD --pretty=full 的完整输出
tasks_json_pathstringrequirements/{us_id}/docs/tasks.json 路径,用于核对 task 列表完整性

Orchestrator 调用示例(OpenCode Sub-Agent 格式):

invoke_skill: cr-commit-check
with:
  us_id: "US042"
  iter_id: "iter_003"
  git_log: "<git log output>"
  tasks_json_path: "requirements/US042/docs/tasks.json"

输出(写回 Orchestrator)

{
  "agent": "cr-commit-check",
  "verdict": "PASS | FAIL",
  "h_count": 0,
  "rules": [
    { "id": "CM-01", "result": "PASS | FAIL", "note": "…" }
  ],
  "fix_commands": ["git commit --amend", "git rebase -i HEAD~N"]
}

执行协议

Step 0 — 发出启动检查点

[AGENT:cr-commit-check] START  us_id={us_id}  iter_id={iter_id}

Step 1 — 解析 commit 列表

从 git_log 中提取本迭代全部 commit,按以下顺序校验每一条:


校验规则

规则 ID检查项通过条件失败影响
CM-01Conventional Commits 格式满足正则 ^(feat|fix|config|docs|test|refactor|perf|style|chore|build)(\(.+\))?: .+FAIL
CM-02type 在允许列表内type ∈ feat|fix|config|docs|test|refactor|perf|style|chore|buildFAIL
CM-03每迭代仅一次 commitcommit 数量 = 1FAIL
CM-04scope 包含正确的 us_id/iter_idscope 满足 #<us_id>/<iter_id> 格式,如 #US042/iter_003FAIL
CM-05描述中列出全部 task读取 tasks.json,验证每个 task id 都以 task-XX/描述 形式出现在 message 中FAIL
CM-06无 WIP / 临时提交message 不含 wip、temp、fixup!、squash!,且 message 非空FAIL

所有规则均为硬性规则:任意一条失败 → 整体裁决 FAIL。

Step 2 — 输出规则结果表

逐条输出结构化结果:

[cr-commit-check] CM-01  ✅ PASS
[cr-commit-check] CM-02  ✅ PASS
[cr-commit-check] CM-03  ❌ FAIL  — 发现 2 条 commit,迭代只允许 1 条
[cr-commit-check] CM-04  ✅ PASS
[cr-commit-check] CM-05  ❌ FAIL  — task-03 未出现在 commit message 中
[cr-commit-check] CM-06  ✅ PASS

Step 3 — 生成修复指引(仅 FAIL 时)

若裁决为 FAIL,输出可直接执行的修复命令,例如:

# 合并多余 commit 并修正 message
git rebase -i HEAD~2
# 或直接修正最后一条 commit
git commit --amend -m "feat(#US042/iter_003): task-01/login flow, task-02/jwt, task-03/tests"

Step 4 — 返回结构化结果

{
  "agent": "cr-commit-check",
  "verdict": "FAIL",
  "h_count": 2,
  "rules": [
    { "id": "CM-01", "result": "PASS", "note": "" },
    { "id": "CM-02", "result": "PASS", "note": "" },
    { "id": "CM-03", "result": "FAIL", "note": "发现 2 条 commit,应为 1 条" },
    { "id": "CM-04", "result": "PASS", "note": "" },
    { "id": "CM-05", "result": "FAIL", "note": "task-03 未在 message 中声明" },
    { "id": "CM-06", "result": "PASS", "note": "" }
  ],
  "fix_commands": [
    "git rebase -i HEAD~2",
    "git commit --amend -m 'feat(#US042/iter_003): task-01/…, task-02/…, task-03/…'"
  ]
}

Step 5 — 发出结束检查点

[AGENT:cr-commit-check] DONE  verdict=PASS|FAIL  h_count=N

裁决规则

裁决条件Orchestrator 行为
PASS全部 6 条规则通过继续调用 cr-code-gate
FAIL任意规则失败终止流水线,返回修复指引,阻塞 release

禁止行为

  • 禁止对不符合规范的 commit 自动修正,只输出修复命令供人工确认执行。
  • 禁止将 m/l 的建议性问题升级为 FAIL。
  • 禁止在 git_log 为空时静默通过,应报告 CM-03 FAIL(未找到任何 commit)。
저장한 Skills