Skip to content

PDCA Workflow

wangliang edited this page Jul 25, 2026 · 2 revisions

PDCA 工作流

Plan → Do → Check → Act 闭环,每次编码任务都会运行。这是防止"AI 修了 bug X 却搞坏了功能 Y"的核心机制。


概述

PDCA(Plan-Do-Check-Act)是一个四阶段质量管理循环,针对 AI 辅助编码进行了适配。ai-coding-ok 在每次任务前、中、后强制执行这个循环。

graph LR
    P[Plan 规划<br/>读取记忆<br/>理解上下文] --> D[Do 执行<br/>写代码<br/>写测试]
    D --> C[Check 检查<br/>运行测试<br/>验证无回归]
    C --> A[Act 记录<br/>更新记忆<br/>关闭循环]
    A -.->|下一个任务| P
Loading

四个阶段

阶段 1:Plan(规划)——编码前

触发条件: 安装了 ai-coding-ok 的项目中的任何开发任务。

执行内容: AI 按顺序读取 7 个文件:

# 文件 提供什么
1 AGENTS.md 架构速查、项目概述
2 .github/agent/system-prompt.md Agent 角色、行为边界
3 .github/agent/workflows.md 场景工作流(功能/修复/重构/发布)
4 .github/agent/coding-standards.md 编码规范
5 .github/agent/memory/project-memory.md 长期项目事实与约束
6 .github/agent/memory/decisions-log.md 历史技术决策(ADR)
7 .github/agent/memory/task-history.md 近期任务上下文(最近 30 条)

耗时: 约 30 秒。三个记忆文件合计通常 <10KB。

产出: AI 拥有完整上下文——知道架构、约束、历史决策和近期变更。

阶段 2:Do(执行)——写代码

执行内容:

  • 编写实现代码
  • 同步编写测试
  • 遵守 coding-standards.md 中的编码规范
  • 遵守 workflows.md 中的场景工作流
  • 对照 project-memory.md 中的约束自检

阶段 3:Check(检查)——验证

执行内容:

  • 运行测试套件
  • 验证无关联功能回归
  • 检查安全约束
  • 确认变更符合计划

阶段 4:Act(记录)——更新记忆

⚠️ 这是大多数工具缺失的阶段——也是 ai-coding-ok 存在的理由。

文件 更新条件 频率
task-history.md 始终——每个任务一条记录 每次任务
decisions-log.md 架构/技术决策有变化 架构变更时
project-memory.md 项目事实有变化(新模块、新依赖等) 很少
Agent 文档 内容过时 当内容陈旧时

每条任务历史记录格式:

### [TASK-XXX] 简要标题
- **日期**:YYYY-MM-DD
- **类型**:feat / fix / refactor / chore
- **摘要**:做了什么以及为什么
- **变更文件**:关键修改文件
- **注意事项**:后续会话需要知道的重要信息

为什么 Act 是关键阶段

没有 Act 阶段,你的记忆文件就是一个会腐烂的快照

迭代次数 没有 Act 有 Act
1 记忆准确(刚安装) 记忆准确
5 记忆过时(3 个功能未记录) 记忆反映 5 个任务的上下文
20 记忆无用(架构已变,记忆说旧东西) 记忆有 20 条累积上下文
50 AI 基于错误信息做决策 AI 读取 50 条准确历史

Act 阶段将记忆从快照变成活记录


强制执行机制

ai-coding-ok 使用五层防御体系确保 PDCA 永不跳过:

层级 机制 平台
1 CLAUDE.md STOP 指令 Claude Code
2 AGENTS.md Plan 7 步强制要求 全平台
3 copilot-instructions.md 强制输出章节 全平台
4 .claude/settings.local.json hooks(Stop hook exit 2) Claude Code
5 安装时自动配置 Claude Code

实战示例:一个功能的完整轨迹

任务:"添加商品搜索接口"

Plan(规划):
  → 读取 project-memory.md:"FastAPI + SQLite,商品表在 products.py"
  → 读取 decisions-log.md:"ADR-003:用 SQLite FTS5 做全文搜索"
  → 读取 task-history.md:"TASK-012:上周新增了商品表"
  → AI 现在知道:用 FTS5,不建新表,在 test_products.py 中写测试

Do(执行):
  → 在 api/products.py 中添加搜索接口
  → 在 tests/test_products.py 中添加测试
  → 遵守 coding-standards.md(类型注解、文档字符串、pytest 夹具)

Check(检查):
  → 运行 pytest:47 通过,0 失败
  → 现有商品接口无回归
  → 空查询返回 400(已处理)

Act(记录):
  → task-history.md:[TASK-013] 添加商品搜索接口
  → (无架构变化,decisions-log.md 和 project-memory.md 不更新)
  → 输出包含"## 记忆更新"章节确认更新

PDCA 与其他方法的对比

方法 Plan Do Check Act
随意的 AI 编码 ❌ 跳过 ✅ 编码 ⚠️ 可能 ❌ 跳过
TDD ⚠️ 隐式 ✅ 编码+测试 ✅ 测试 ❌ 跳过
superpowers ✅ 头脑风暴 ✅ 执行 ✅ 审查 ❌ 跳过
ai-coding-ok ✅ 读 7 个文件 ✅ 编码+测试 ✅ 验证 ✅ 写记忆

ai-coding-ok 是唯一通过 Act 关闭循环的方法——将记忆写回,让下一次会话继承全部上下文。


下一步

Clone this wiki locally