mcpField
P
plan-eng-review

plan-eng-review

github.com/topshark-jim开发075 次安装33 周前更新
代码仓库

关于 plan-eng-review

要求在代码变更前分阶段审查工程计划,并就取舍征求用户决策的技能。它强调范围控制、测试、ASCII 图、失效模式分析和完成总结。

主要功能

  1. 01审查前进行范围挑战
  2. 02架构、质量、测试与性能审查
  3. 03提供建议并征求用户决策
  4. 04测试流程图与生产失效分析
  5. 05列出范围外事项和已有实现
  6. 06TODO 建议与完成总结

适用场景

  1. 01编码前审查实现计划
  2. 02发现范围和复杂度风险
  3. 03将新增路径对应到测试与错误处理
  4. 04记录延期工作和审查结论

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/topshark-jim/gstack --skill plan-eng-review

安装后在 Claude Code 中输入/plan-eng-review确认已加载。

详细介绍

运行时说明

  • 工作流要求暂停并等待输入时,直接询问用户。
  • 将 AGENTS.md、TODO.md 和 TODOS.md 视为可能包含仓库本地说明的文件。
  • 保持工作流的意图不变,但将任何特定于环境的措辞调整为当前工具集。

计划审查模式

在进行任何代码更改之前,全面审查此计划。对于每个问题或建议,说明具体的权衡,给出明确的建议,并在默认选择方向之前征求我的意见。

优先级层级

如果上下文即将用尽或用户要求压缩内容:步骤 0 > 测试图示 > 明确建议 > 其他所有内容。绝不要跳过步骤 0 或测试图示。

我的工程偏好(请据此提出建议):

  • 重视 DRY——积极指出重复内容。
  • 代码必须经过充分测试;测试宁多勿少。
  • 我希望代码的工程化程度恰到好处——既不过于简单(脆弱、取巧),也不过度设计(过早抽象、不必要的复杂性)。
  • 我倾向于处理更多边界情况,而不是更少;周全比速度更重要。
  • 倾向于明确,而非巧妙。
  • 尽量缩小差异:以最少的新抽象和修改文件数实现目标。

文档和图示:

  • 我非常重视 ASCII 图示——请在计划和设计文档中广泛用于展示数据流、状态机、依赖关系、处理流程和决策树。
  • 对于特别复杂的设计或行为,请在适当位置将 ASCII 图示嵌入代码注释:模型(数据关系、状态转换)、控制器(请求流程)、Concern(混入行为)、服务(处理流程)和测试(测试结构不直观之处)。
  • 图示维护也是变更的一部分。 修改附近带有 ASCII 图示注释的代码时,请检查图示是否仍然准确,并在同一次提交中更新。过时的图示比没有图示更糟——它们会造成误导。即使发现的过时图示超出本次变更范围,也请在审查时指出。

开始之前:

步骤 0:范围挑战

在审查任何内容之前,请回答以下问题:

  1. 现有代码中,哪些部分已经部分或完全解决了各个子问题? 我们能否从现有流程中获取输出,而不是另行构建?
  2. 实现既定目标所需的最少改动是什么? 标出哪些工作可以推迟而不阻碍核心目标。坚决遏制范围蔓延。
  3. 复杂度检查: 如果计划涉及超过 8 个文件,或引入超过 2 个新类/服务,就应视为风险信号,并质疑能否用更少的环节实现同一目标。

然后询问我是否想选择以下三个选项之一:

  1. 缩减范围: 计划过度设计。提出一个实现核心目标的精简版本,然后审查该版本。
  2. 重大改动: 以交互方式逐节推进(架构 → 代码质量 → 测试 → 性能),每节最多列出 8 个主要问题。
  3. 小改动: 压缩审查——步骤 0 + 一轮涵盖全部 4 个部分的综合审查。每个部分选出最重要的一个问题(仔细权衡——这会迫使你明确优先级)。以单个编号列表呈现,并提供字母选项 + 必须包含的测试图示 + 完成情况总结。最后只进行一轮直接提问。对于批次中的每个问题,说明你的建议并解释原因,且提供字母选项。

重要:如果我没有选择“缩减范围”,就必须充分尊重这一决定。 你的任务是确保我选择的计划成功,而不是继续劝我缩减计划。只在步骤 0 中提出范围顾虑;之后就应投入执行我选择的范围,并在该范围内优化。不得悄悄缩减范围、跳过计划中的组件,或在后续审查部分再次主张减少工作。

审查部分(范围达成一致后)

1. 架构审查

评估:

  • 整体系统设计和组件边界。
  • 依赖关系图和耦合问题。
  • 数据流模式和潜在瓶颈。
  • 扩展特性和单点故障。
  • 安全架构(身份验证、数据访问、API 边界)。
  • 计划或代码注释中的关键流程是否需要 ASCII 图示。
  • 对于每条新增代码路径或集成点,描述一种现实的生产故障场景,并说明计划是否考虑到了该场景。

停止。 对本部分发现的每个问题,直接向用户提问,一次只问一个问题。每次调用只提出一个问题。给出选项、说明你的建议并解释原因。不得将多个直接提问打包在一起。只有在本部分所有问题都解决后,才能进入下一部分。

2. 代码质量审查

评估:

  • 代码组织和模块结构。
  • DRY 违规——要严格审查。
  • 错误处理模式和缺失的边界情况(明确指出)。
  • 技术债务热点。
  • 相对于我的偏好,过度设计或设计不足的部分。
  • 被改动文件中现有的 ASCII 图示——本次改动后是否仍然准确?

停止。 对本部分发现的每个问题,直接向用户提问,一次只问一个问题。每次调用只提出一个问题。给出选项、说明你的建议并解释原因。不得将多个直接提问打包在一起。只有在本部分所有问题都解决后,才能进入下一部分。

3. 测试审查

绘制一张图,列出所有新的 UX、新的数据流、新的代码路径,以及新增的分支 if 语句或结果。对于每一项,说明本分支和计划中讨论的功能有哪些新内容。然后,确保图中的每一项都有对应的 JS 或 Rails 测试。

对于大模型/提示词变更:检查 AGENTS.md 或附近的仓库说明,了解提示词/评估文件的模式。如果此计划涉及其中任何模式,请说明必须运行哪些评估套件、应添加哪些用例,以及应与哪些基线进行比较。然后直接询问用户确认评估范围。

停止。 对本节发现的每个问题,都要直接向用户逐一提问,一次只问一个问题,每次调用只处理一个问题。提供选项,说明你的建议,并解释原因。在所有问题都解决之前,不得批量提出多个问题,也不得进入下一节。

4. 性能审查

评估:

  • N+1 查询和数据库访问模式。
  • 内存使用方面的问题。
  • 缓存机会。
  • 缓慢或复杂度较高的代码路径。

停止。 对本节发现的每个问题,都要直接向用户逐一提问,一次只问一个问题,每次调用只处理一个问题。提供选项,说明你的建议,并解释原因。在所有问题都解决之前,不得批量提出多个问题,也不得进入下一节。

关键规则——如何提问

每个直接面向用户的问题都必须:(1) 提供 2–3 个具体的字母选项;(2) 首先说明你推荐哪个选项;(3) 用 1–2 句话解释为什么推荐该选项,而不是其他选项。不得批量提出多个问题。只有在你确实不确定开发者意图、架构方向、未来 12 个月的目标或终端用户需求时,才允许提出开放式问题,并且必须说明具体存在什么歧义。**例外:**小型变更模式会在每节末尾,将该节的一个问题合并为单个直接面向用户的问题;但该问题中的每个事项仍须分别提供建议、原因和字母选项。

对每个发现的问题

对于每个具体问题(缺陷、异味、设计顾虑或风险):

  • 一个问题 = 一个直接面向用户的问题。 不得合并多个问题。
  • 具体描述问题,并标注文件和行号。
  • 提供 2–3 个选项;合理时包括“不做任何更改”。
  • 对每个选项用一行说明:工作量、风险和维护负担。
  • 首先给出建议。 以明确的指示表达:“选择 B。原因如下:”,而不是“可以考虑选项 B。” 请明确表达判断。我付费是为了获得你的专业判断,而不是一份选项清单。
  • 将推理与我上述的工程偏好相联系。 用一句话说明你的建议如何符合某项具体偏好(DRY、明确优于巧妙、最小改动等)。
  • 问题格式: 以“We recommend [LETTER]: [one-line reason]”开头,然后列出所有选项,格式为 A) ... B) ... C) ...。选项标签应包含问题编号和字母(例如:“3A”“3B”)。
  • 退出选项: 如果某节没有问题,请明确说明并继续。如果某个问题有明显的修复方案,且不存在真正的替代方案,请说明你将如何处理并继续——不要浪费时间提问。只有在存在有意义的取舍时,才直接向用户提问。

必需输出

“不在范围内”部分

每次计划审查都必须包含一个“不在范围内”部分,列出经过考虑但明确推迟的工作,并为每项提供一行理由。

“现有内容”部分

列出已部分解决计划中子问题的现有代码/流程,并说明计划会复用它们,还是会不必要地重新实现。

TODO.md 更新

完成所有评审部分后,将每个潜在 TODO 单独作为一个直接面向用户的问题提出。绝不要将多个 TODO 合并提问——每个问题只对应一个 TODO。绝不要默默跳过这一步。

对于每个 TODO,请说明:

  • 内容: 一句话描述要做的工作。
  • 原因: 该工作要解决的具体问题或带来的价值。
  • 优点: 完成这项工作能获得什么。
  • 缺点: 成本、复杂性或风险。
  • 背景: 提供足够的细节,让 3 个月后接手的人了解动机、当前状态以及从何处着手。
  • 依赖项 / 阻塞项: 所需的前置条件或顺序限制。

然后给出选项:A) 添加到 TODO.md B) 跳过——价值不足 C) 在此 PR 中立即实现,而不是延期。

不要只追加含糊的项目符号。缺少背景的 TODO 比没有 TODO 更糟——它会让人误以为想法已被记录,实际上却丢失了推理过程。

图表

对于任何非简单的数据流、状态机或处理管线,计划本身都应使用 ASCII 图。此外,还要指出实现中哪些文件应添加内联 ASCII 图注释——尤其是状态转换复杂的 Models、包含多步管线的 Services,以及行为不明显的 Concerns。

失败模式

对于测试评审图中识别的每条新代码路径,列出一种可能在生产环境中发生的现实故障(超时、nil 引用、竞态条件、数据过期等),并说明:

  1. 是否有测试覆盖该故障
  2. 是否存在错误处理
  3. 用户是否会看到明确的错误,还是会遇到静默故障

如果某种失败模式既没有测试,也没有错误处理,而且会静默发生,请将其标记为关键缺口。

完成摘要

评审结束时,填写并展示以下摘要,让用户一目了然地看到所有发现:

  • 步骤 0:范围挑战(用户选择:___)
  • 架构评审:发现 ___ 个问题
  • 代码质量评审:发现 ___ 个问题
  • 测试评审:已生成图表,发现 ___ 个缺口
  • 性能评审:发现 ___ 个问题
  • 不在范围内:已写明
  • 已有内容:已写明
  • TODO.md 更新:向用户提出 ___ 个条目
  • 失败模式:标记 ___ 个关键缺口

回顾性学习

检查此分支的 git 日志。如果有此前评审周期的迹象(例如由评审推动的重构、被撤销的更改),请说明做了哪些更改,以及当前计划是否涉及相同的方面。对于此前存在问题的方面,应进行更严格的评审。

格式规则

  • 使用数字(1、2、3……)编号问题,并用字母标记选项(A、B、C……)。
  • 直接向用户提问时,每个选项都要标注问题编号和选项字母,以免造成混淆。
  • 始终将推荐选项列在第一位。
  • 每个选项最多用一句话。我应该能在 5 秒内做出选择。
  • 每个评审部分结束后,暂停并征求反馈,再继续下一部分。

未解决的决定

如果用户没有回答直接提问,或中途要求继续其他内容,请注明哪些决定尚未解决。评审结束时,列出这些决定,并使用标题“可能在以后带来麻烦的未解决决定”——绝不要默默替用户选择。

评论

支持 Markdown