工作流模式Skill workflow-patterns

此技能提供了一套完整的工作流模式,用于通过测试驱动开发(TDD)的红绿重构循环实现任务,管理阶段检查点,处理git提交,并执行验证协议以确保软件开发质量。关键词包括TDD、git、质量保证、工作流、测试覆盖、软件开发流程。

测试 0 次安装 0 次浏览 更新于 3/10/2026

name: workflow-patterns description: TDD任务实现模式 - 红绿重构循环、阶段检查点、git提交和质量保证的验证协议。 version: 1.0 model: sonnet invoked_by: both tools:

  • Read
  • Write
  • Edit
  • Bash
  • Glob
  • Grep verified: false lastVerifiedAt: 2026-02-19T05:29:09.098Z

工作流模式

使用TDD工作流实现任务的指南,管理阶段检查点,处理git提交,并执行验证协议以确保整个实施过程中的质量。

何时使用此技能

  • 从跟踪的plan.md中实施任务
  • 遵循TDD红绿重构循环
  • 完成阶段检查点
  • 管理git提交和备注
  • 理解质量保证门控
  • 处理验证协议
  • 在计划文件中记录进度

TDD任务生命周期

对每个任务遵循以下11个步骤:

步骤1: 选择下一个任务

读取plan.md并识别下一个待处理的[ ]任务。在当前阶段内按顺序选择任务。不要跳过后面的阶段。

步骤2: 标记为进行中

更新plan.md以将任务标记为[~]

- [~] **任务2.1**: 实现用户验证

将此状态更改与实施分开提交。

步骤3: RED - 编写失败测试

在编写实现之前,编写定义预期行为的测试:

  • 如果需要,创建测试文件
  • 编写涵盖快乐路径的测试用例
  • 编写涵盖边缘案例的测试用例
  • 编写涵盖错误条件的测试用例
  • 运行测试 - 它们应该失败

示例:

def test_validate_user_email_valid():
    user = User(email="test@example.com")
    assert user.validate_email() is True

def test_validate_user_email_invalid():
    user = User(email="invalid")
    assert user.validate_email() is False

步骤4: GREEN - 实现最小代码

编写使测试通过所需的最小代码:

  • 专注于使测试变绿,而不是追求完美
  • 避免过早优化
  • 保持实现简单
  • 运行测试 - 它们应该通过

步骤5: REFACTOR - 提高清晰度

在测试变绿后,改进代码:

  • 提取常见模式
  • 改进命名
  • 移除重复
  • 简化逻辑
  • 每次更改后运行测试 - 它们应保持GREEN

步骤6: 验证覆盖率

检查测试覆盖率是否达到80%目标:

pytest --cov=module --cov-report=term-missing

如果覆盖率低于80%:

  • 识别未覆盖的行
  • 为缺失路径添加测试
  • 重新运行覆盖率检查

步骤7: 记录偏差

如果实施偏离计划或引入了新的依赖:

步骤8: 提交实施

为任务创建专注的提交:

git add -A
git commit -m "feat(user): 实现邮箱验证

- 向User类添加validate_email方法
- 处理空和格式错误的邮箱
- 添加全面的测试覆盖

Task: 2.1
Track: user-auth_20250115"

提交消息格式:

  • 类型:feat, fix, refactor, test, docs, chore
  • 范围:受影响的模块或组件
  • 摘要:命令式、现在时
  • 正文:更改要点
  • 页脚:任务和跟踪引用

步骤9: 附加Git备注

添加详细的任务摘要作为git备注:

git notes add -m "任务2.1: 实现用户验证

摘要:
- 使用正则表达式模式添加邮箱验证
- 处理边缘案例:空、无@、无域名
- 覆盖率:验证模块的94%

更改文件:
- src/models/user.py (修改)
- tests/test_user.py (修改)

决策:
- 使用简单正则而非email-validator库
- 原因:基本验证无需外部依赖"

步骤10: 使用SHA更新计划

更新plan.md以用提交SHA标记任务完成:

- [x] **任务2.1**: 实现用户验证 `abc1234`

步骤11: 提交计划更新

提交计划状态更新:

git add .claude/context/tracks/*/plan.md
git commit -m "docs: 更新计划 - 任务2.1完成

Track: user-auth_20250115"

阶段完成协议

当阶段中所有任务完成时,执行验证协议:

识别更改文件

列出自上次检查点以来修改的所有文件:

git diff --name-only <last-checkpoint-sha>..HEAD

确保测试覆盖率

对每个修改的文件:

  1. 识别对应的测试文件
  2. 验证新/更改代码的测试是否存在
  3. 为修改模块运行覆盖率
  4. 如果覆盖率<80%,添加测试

运行完整测试套件

执行完整测试套件:

pytest -v --tb=short

在继续之前,所有测试必须通过。

生成手动验证步骤

创建手动验证清单:

## 阶段1验证清单

- [ ] 用户可以用有效邮箱注册
- [ ] 无效邮箱显示适当的错误
- [ ] 数据库正确存储用户
- [ ] API返回预期的响应代码

等待用户批准

向用户呈现验证清单:

阶段1完成。请验证:
1. [ ] 测试套件通过(自动)
2. [ ] 覆盖率达到目标(自动)
3. [ ] 手动验证项目(需人工)

回复“approved”以继续,或注明问题。

没有明确批准,请勿继续。

创建检查点提交

批准后,创建检查点提交:

git add -A
git commit -m "checkpoint: 阶段1完成 - user-auth_20250115

已验证:
- 所有测试通过
- 覆盖率: 87%
- 手动验证批准

阶段1任务:
- [x] 任务1.1: 设置数据库架构
- [x] 任务1.2: 实现用户模型
- [x] 任务1.3: 添加验证逻辑"

记录检查点SHA

更新plan.md检查点表:

## 检查点

| 阶段   | 检查点 SHA | 日期       | 状态   |
| ------- | -------------- | ---------- | -------- |
| 阶段1 | def5678        | 2025-01-15 | verified |
| 阶段2 |                |            | pending  |

质量保证门控

在标记任何任务完成之前,验证这些门控:

通过测试

  • 所有现有测试通过
  • 新测试通过
  • 无测试回归

覆盖率 >= 80%

  • 新代码有80%以上覆盖率
  • 整体项目覆盖率保持
  • 关键路径完全覆盖

样式合规

  • 代码遵循样式指南
  • 代码检查通过
  • 格式正确

文档

  • 公共API有文档
  • 复杂逻辑有解释
  • 如有需要,更新README

类型安全

  • 存在类型提示(如适用)
  • 类型检查器通过
  • 无无理由的type: ignore

无代码检查错误

  • 零检查器错误
  • 警告已处理或合理化
  • 静态分析干净

安全审计

  • 代码中无秘密
  • 存在输入验证
  • 认证/授权正确
  • 依赖无漏洞

Git集成

提交消息格式

<类型>(<范围>): <主题>

<正文>

<页脚>

类型:

  • feat: 新功能
  • fix: 错误修复
  • refactor: 无功能/修复的代码更改
  • test: 添加测试
  • docs: 文档
  • chore: 维护

Git备注以丰富摘要

将详细备注附加到提交:

git notes add -m "<详细摘要>"

查看备注:

git log --show-notes

好处:

  • 保留上下文而不使提交消息杂乱
  • 支持跨提交的语义查询
  • 支持基于跟踪的操作

在plan.md中记录SHA

完成任务时始终记录提交SHA:

- [x] **任务1.1**: 设置架构 `abc1234`
- [x] **任务1.2**: 添加模型 `def5678`

这启用:

  • 从计划到代码的可追溯性
  • 语义恢复操作
  • 进度审计

处理偏差

在实施过程中,可能会发生偏离计划的情况。系统处理:

偏差类型

范围增加 发现原始规范中未包含的要求。

  • 在spec.md中记录为新要求
  • 向plan.md添加任务
  • 在任务评论中注明增加

范围减少 实施过程中认为不必要的功能。

  • 将任务标记为[-](跳过)并注明原因
  • 更新spec.md范围部分
  • 记录决策理由

技术偏差 与计划不同的实施方法。

  • 在任务完成评论中注明偏差
  • 如果依赖变更,更新tech-stack.md
  • 记录为何原始方法不合适

需求变更 工作期间对需求的理解变更。

偏差文档格式

完成有偏差的任务时:

- [x] **任务2.1**: 实现验证 `abc1234`
  - 偏差: 使用库而非自定义代码
  - 原因: 更好的边缘案例处理
  - 影响: 向依赖添加email-validator

错误恢复

GREEN后测试失败

如果在达到GREEN后测试失败:

  1. 请勿继续到REFACTOR
  2. 识别哪个测试开始失败
  3. 检查重构是否破坏了某些内容
  4. 恢复到最后一个已知GREEN状态
  5. 重新处理实施

检查点拒绝

如果用户拒绝检查点:

  1. 在plan.md中注明拒绝原因
  2. 创建任务以解决问题
  3. 完成修复任务
  4. 再次请求检查点批准

依赖阻塞

如果任务无法进行:

  1. 将任务标记为[!]并附阻塞描述
  2. 检查其他任务是否可以进行
  3. 记录预期解决时间线
  4. 考虑创建依赖解决跟踪

最佳实践

  1. 永不跳过RED: 始终先编写失败测试
  2. 小提交: 每个提交一个逻辑更改
  3. 立即更新: 任务完成后立即更新plan.md
  4. 等待批准: 永不跳过检查点验证
  5. 丰富git备注: 包含有助于未来理解的上下文
  6. 覆盖率纪律: 不接受低于目标的覆盖率
  7. 质量门控: 在标记完成前检查所有门控
  8. 顺序阶段: 按顺序完成阶段
  9. 文档偏差: 注明任何与原始计划的变更
  10. 清洁状态: 每个提交应使代码处于工作状态
  11. 快速反馈: 开发期间频繁运行相关测试
  12. 明确阻塞: 及时处理阻塞,不要回避

内存协议(强制)

开始前:

cat .claude/context/memory/learnings.md

完成后:

  • 新模式 -> .claude/context/memory/learnings.md
  • 发现问题 -> .claude/context/memory/issues.md
  • 决策 -> .claude/context/memory/decisions.md

假设中断: 如果不在内存中,则表示未发生。