工具链阿新聊ai

Superpowers 工作流 · verification-before-completion 与 code review

Superpowers 工作流 · verification before completion 与 code review 更新日期:2025/06 TL;DR: Superpowers 把「完成」独立成一个阶段,不允许修完代码就说完成。必须先验证:跑命令、读输出、数失败数,然后才能声明状态。code review...

Superpowers 工作流 · verification-before-completion 与 code review

更新日期:2025/06

TL;DR: Superpowers 把「完成」独立成一个阶段,不允许修完代码就说完成。必须先验证:跑命令、读输出、数失败数,然后才能声明状态。code review 配对存在:请求 review 时给审查者精心设计的上下文(不是你的会话历史),收到 review 后先验证再实现——不表演式同意,不盲目实现,技术上错了就技术性推回。Critical 级别问题阻断进度,必须立即修复。

为什么「完成」独立成一段

常见的开发流程里,修完 bug、写完功能,立即说「完成了!」。Superpowers 认为这是不诚实,不是效率。

问题在于:没验证的完成声明是猜测。你以为测试通过了,但你上次跑测试是两小时前。你以为 build 没问题,但你没跑最新的改动。你以为 bug 修好了,但你没手动复现原症状。

Superpowers 的解决方案:完成 = 完成修复 + 验证证据。两个独立阶段,缺一不可。

为什么不能合并?

合并会导致「假完成」。你改了代码,感觉良好,就直接跳到下一个任务。等到 CI 挂了、测试失败了、用户抱怨了,你才发现当时的「完成」是幻觉。

独立阶段强制停下来验证。你必须在声明完成前运行验证命令、读取输出、确认数字。这让完成变成可测量的状态,不是主观感觉。

Verification-Before-Completion

核心原则:证据优先于断言,永远。

铁律

NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE

没在本消息里跑验证命令,就不能声明通过。

门函数

声明任何状态或表达满意前:

1. 识别:什么命令证明这个声明?
2. 运行:执行完整命令(全新、完整)
3. 读取:完整输出、检查退出码、计数失败
4. 验证:输出确认声明吗?
   - 否:声明实际状态附证据
   - 是:声明附证据
5. 然后:才能做声明

跳过任何一步 = 说谎,不是验证

常见失败模式

声明 需要 不够
测试通过 测试命令输出:0 失败 之前运行、「应该通过」
Linter 干净 Linter 输出:0 错误 部分检查、外推
Build 成功 Build 命令:exit 0 Linter 通过、日志看起来好
Bug 修复 测试原症状:通过 代码改了、假设修好了
回归测试工作 红绿循环验证 测试通过一次
Agent 完成 VCS diff 显示改变 Agent 报告「成功」
需求满足 逐行检查清单 测试通过

关键模式

测试:

✅ [跑测试命令] [见:34/34 通过] "All tests pass"
❌ "Should pass now" / "Looks correct"

回归测试(TDD 红绿):

✅ 写 → 跑(通过)→ 回退修复 → 跑(必须失败)→ 恢复 → 跑(通过)
❌ "I've written a regression test"(没红绿验证)

Build:

✅ [跑 build] [见:exit 0] "Build passes"
❌ "Linter passed"(linter 不检查编译)

需求:

✅ 重读计划 → 创建清单 → 验证每个 → 报告缺口或完成
❌ "Tests pass, phase complete"

Agent 委托:

✅ Agent 报告成功 → 检查 VCS diff → 验证改变 → 报告实际状态
❌ 信任 agent 报告

红旗标志

  • 用「应该」、「可能」、「看起来」
  • 验证前表达满意("Great!", "Perfect!", "Done!" 等)
  • 准备 commit/push/PR 但没验证
  • 信任 agent 成功报告
  • 依赖部分验证
  • 想「就这一次」
  • 累了想结束工作
  • 任何暗示成功但没跑验证的措辞

为什么重要

从 24 个失败记忆:

  • 你的伙伴说「我不信你」——信任崩塌
  • 未定义函数被发布——会崩溃
  • 缺失需求被发布——功能不完整
  • 时间浪费在假完成 → 重定向 → 重做
  • 违反:「诚实是核心价值。如果你说谎,你被替换。」

Requesting Code Review

Superpowers 要求在任务完成后请求代码审查。不是可选项,是强制步骤。

核心原则:早审查,常审查。

什么时候请求

强制:

  • subagent-driven development 的每个任务后
  • 完成主要功能后
  • 合并到 main 前

可选但有价值:

  • 卡住时(新鲜视角)
  • 重构前(基线检查)
  • 修复复杂 bug 后

如何请求

1. 获取 git SHA:

BASE_SHA=$(git rev-parse HEAD~1)  # 或 origin/main
HEAD_SHA=$(git rev-parse HEAD)

2. 派发代码审查 subagent:

用 Task 工具 general-purpose 类型,填充 code-reviewer.md 模板

占位符:

  • {DESCRIPTION} - 你构建什么的简要总结
  • {PLAN_OR_REQUIREMENTS} - 它应该做什么
  • {BASE_SHA} - 起始提交
  • {HEAD_SHA} - 结束提交

3. 对反馈行动:

  • 立即修复 Critical 问题
  • 继续前修复 Important 问题
  • 记录 Minor 问题稍后处理
  • 审查者错了就技术性推回(附理由)

示例

[刚完成任务 2:添加验证函数]

你:让我在继续前请求代码审查。

BASE_SHA=$(git log --oneline | grep "Task 1" | head -1 | awk '{print $1}')
HEAD_SHA=$(git rev-parse HEAD)

[派发代码审查者 subagent]
  DESCRIPTION: 添加 verifyIndex() 和 repairIndex(),4 种问题类型
  PLAN_OR_REQUIREMENTS: docs/superpowers/plans/deployment-plan.md 的任务 2
  BASE_SHA: a7981ec
  HEAD_SHA: 3df7661

[Subagent 返回]:
  优势:干净架构、真实测试
  问题:
    Important: 缺失进度指示器
    Minor: 报告间隔的魔法数字 (100)
  评估:可以继续

你:[修复进度指示器]
[继续任务 3]

工作流集成

Subagent-Driven Development:

  • 每个任务后审查
  • 在问题复合前捕获
  • 继续下个任务前修复

Executing Plans:

  • 每个任务后或自然检查点审查
  • 获取反馈、应用、继续

Ad-Hoc Development:

  • 合并前审查
  • 卡住时审查

Receiving Code Review

收到代码审查反馈后,Superpowers 强制技术评估,不是情绪表演。

核心原则:实现前验证。假设前提问。技术正确性胜过社交舒适。

响应模式

收到代码审查反馈时:

1. 读:完整反馈不反应
2. 理解:用自己的话重述要求(或提问)
3. 验证:对照代码库现实检查
4. 评估:对这个代码库技术上正确吗?
5. 响应:技术确认或理由推回
6. 实现:一次一项,测每个

禁止响应

永远不要:

  • "You're absolutely right!"(明确违反 CLAUDE.md)
  • "Great point!" / "Excellent feedback!"(表演式)
  • "Let me implement that now"(验证前)

而是:

  • 重述技术要求
  • 问澄清问题
  • 错了就技术性推回
  • 直接开始工作(行动 > 言语)

处理不明确反馈

如果任何项不明确:
  停止 - 还不要实现任何东西
  问不明确项的澄清

为什么:项可能相关。部分理解 = 错误实现。

示例:

你的伙伴:"Fix 1-6"
你理解 1,2,3,6。4,5 不明确。

❌ 错:现在实现 1,2,3,6,稍后问 4,5
✅ 对:"我理解项 1,2,3,6。继续前需要 4 和 5 的澄清。"

来源特定处理

来自你的伙伴

  • 信任 - 理解后实现
  • 仍然问如果范围不明确
  • 无表演式同意
  • 跳到行动或技术确认

来自外部审查者

实现前:
  1. 检查:对这个代码库技术上正确吗?
  2. 检查:破坏现有功能吗?
  3. 检查:当前实现的理由?
  4. 检查:在所有平台/版本工作吗?
  5. 检查:审查者理解完整上下文吗?

如果建议似乎错:
  技术性推回

如果不能容易验证:
  说明:"我不能验证这个没有 [X]。我应该 [调查/问/继续]?"

如果和你的伙伴之前的架构决策冲突:
  停止并先和你的伙伴讨论

你伙伴的规则: "外部反馈——怀疑,但仔细检查"

YAGNI 检查「专业」功能

如果审查者建议「正确实现」:
  grep codebase 实际用法

  如果未用:"这个端点没被调用。移除它(YAGNI)?"
  如果用了:然后正确实现

你伙伴的规则: "你和审查者都向我报告。如果我们不需要这个功能,别加。"

实现顺序

多项反馈:
  1. 任何不明确的先澄清
  2. 然后按顺序实现:
     - 阻塞问题(崩溃、安全)
     - 简单修复(拼写、导入)
     - 复杂修复(重构、逻辑)
  3. 测试每个修复单独
  4. 验证无回归

什么时候推回

推回当:

  • 建议破坏现有功能
  • 审查者缺完整上下文
  • 违反 YAGNI(未用功能)
  • 对这个栈技术上不正确
  • 存在遗留/兼容性原因
  • 和你伙伴的架构决策冲突

如何推回:

  • 用技术推理,不防御性
  • 问具体问题
  • 引用工作测试/代码
  • 如果架构性就涉及你的伙伴

如果大声推回不舒服的信号: "Strange things are afoot at the Circle K"

确认正确反馈

反馈确实正确时:

✅ "Fixed. [什么改变的简要描述]"
✅ "Good catch - [具体问题]。在 [位置] 修复。"
✅ [直接修并在代码里显示]

❌ "You're absolutely right!"
❌ "Great point!"
❌ "Thanks for catching that!"
❌ "Thanks for [任何东西]"
❌ 任何感谢表达

为什么不用谢: 说话在行动。直接修。代码本身显示你听到反馈。

如果抓到自己要写 "Thanks": 删掉。陈述修复代替。

优雅纠正你的推回

如果你推回并且错了:

✅ "You were right - 我查了 [X] 确实 [Y]。现在实现。"
✅ "验证这个你是对的。我初始理解错了因为 [理由]。修复中。"

❌ 长道歉
❌ 辩护为什么推回
❌ 过度解释

事实性陈述纠正并继续。

常见错误

错误 修复
表演式同意 陈述要求或直接行动
盲目实现 先对照代码库验证
批量不测试 一个一个,测每个
假设审查者对 检查是否破坏东西
避免推回 技术正确性 > 舒适
部分实现 先澄清所有项
不能验证,继续 陈述限制,问方向

真实示例

表演式同意(错):

审查者:"Remove legacy code"
❌ "You're absolutely right! Let me remove that..."

技术验证(对):

审查者:"Remove legacy code"
✅ "检查... build target 是 10.15+,这个 API 需要 13+。向后兼容需要 legacy。当前 impl 有错 bundle ID - 修复还是放弃 pre-13 支持?"

YAGNI(对):

审查者:"Implement proper metrics tracking with database, date filters, CSV export"
✅ "Grepped codebase - 没东西调这个端点。移除它(YAGNI)?还是有我遗漏的用法?"

不明确项(对):

你的伙伴:"Fix items 1-6"
你理解 1,2,3,6。4,5 不明确。
✅ "理解 1,2,3,6。继续前需要 4 和 5 的澄清。"

Critical Issue 阻断流程

Superpowers 定义问题严重性:

  • Critical - 阻断进度,必须立即修复
  • Important - 继续前修复
  • Minor - 稍后处理

收到 Critical 级别问题后,AI 被禁止继续到下一个任务。必须:

  1. 停止当前工作流
  2. 修复 Critical 问题
  3. 验证修复
  4. 重新请求审查确认
  5. 然后才能继续

这不是惩罚,是防止错误扩散。一个内存泄漏或安全漏洞在早期是 10 分钟修复,合并到 main 后是 2 小时排雷。

权衡与局限

Superpowers 的验证和审查不是免费午餐。

时间成本: 每个任务后请求审查确实慢过「写完直接继续」。差出来的 5-10 分钟在审查和修复。但你捕获的是会累积的技术债。3 个任务的小问题如果不在每个任务后捕获,第 4 个任务时会变成大重构。

审查疲劳: 如果每次小改动都审查,审查者会疲劳、草率。Superpowers 的策略是:小改动可以批量审查(比如 5 个小任务后),但必须每个主要功能后审查。这不是固定规则,是团队共识。

推回的社交成本: 技术性推回外部反馈需要技巧。太频繁显得傲慢,太顺从引入 bug。Superpowers 的建议是:技术上错了就推回,但语气要中立、理由要具体、引用证据。这不是冲突,是协作找正确答案。

验证的环境差异: 本地验证通过不等于 CI 通过。依赖版本、操作系统差异、并行执行都可能导致不一致。Superpowers 要求最终验证在接近 CI 的环境中进行——不是跑测试就够,是跑完整的 CI pipeline。

延伸阅读

评论

0
登录后可以参与评论和讨论。
💬

还没有评论

欢迎留下第一条评论,帮助这篇内容更快形成讨论。