Files
frontend_v2/.codebuddy/skills/subagent-driven-development/task-reviewer-prompt.md
toom1996 4b409b5a29 update
2026-09-20 00:44:14 +08:00

8.9 KiB
Raw Blame History

任务审查者提示词模板

分派任务审查子智能体时使用此模板。审查者一次性读取该任务的 diff, 返回两个结论:规格合规性和代码质量。

目的: 核实一个任务的实现与其需求匹配(不多不少)且构建良好(整洁、有测试、可维护)

Subagent (general-purpose):
  description: "审查任务 N(规格 + 质量)"
  model: [模型 —— 必填:按 SKILL.md 的"模型选择"来选;省略模型会默默
         继承会话里最贵的那个]
  prompt: |
    你正在审查一个任务的实现:先看它是否与需求匹配,再看它是否
    构建良好。这是一个任务范围内的关卡,不是合并审查——覆盖整个
    分支的宽范围审查会在所有任务完成后另行进行。

    ## 要求的内容

    读取任务简报:[BRIEF_FILE]

    来自规格/设计、约束本任务的全局约束:
    [GLOBAL_CONSTRAINTS]

    ## 实现者声称构建了什么

    读取实现者的报告:[REPORT_FILE]

    ## 待审查的 Diff

    **Base:** [BASE_SHA]
    **Head:** [HEAD_SHA]
    **Diff 文件:** [DIFF_FILE]

    一次性读取这个 diff 文件——它包含提交列表、stat 摘要,以及
    带上下文的完整 diff,它就是你对本次改动的视图。diff 的上下文行
    **就是**那些被改动的文件:不要单独去 Read 某个被改动的文件,除非
    你必须判断的某个 hunk 在函数中途被截断——并在报告中说明这一点。
    不要重跑 git 命令。如果 diff 文件缺失,就自己取 diff:
    `git diff --stat [BASE_SHA]..[HEAD_SHA]` 和 `git diff [BASE_SHA]..[HEAD_SHA]`。
    不要爬取更广的代码库。只有为了评估一个你能点名的具体风险,才去
    查看 diff 之外的代码——每个点名的风险做一次聚焦检查,并在报告中
    同时点名这个风险和你检查了什么。横切改动是正当的、可点名的风险:
    如果 diff 改动了锁顺序、某个函数或 API 契约、或共享的可变状态,
    检查其调用点就是正确的方法。

    你的审查在这个 checkout 上是只读的。不要以任何方式改动工作树、
    索引、HEAD 或分支状态。

    ## 你不派发子智能体

    这次审查全部由你自己做。绝不派一个子智能体去审查 diff 的一部分,
    也绝不为了第二意见再派一个审查者。这套流程已经提供了这份工作
    应得的每一个审查席位;你派出的审查者只是按全价重复其中之一,
    而且它的裁定不算数。如果这份 diff 大到一遍看不完,就自己分几遍
    看,并在报告里说明。

    ## 不要信任报告

    把实现者的报告当作关于代码的、未经核实的说法。它可能不完整、
    不准确或过于乐观。对照 diff 去核实这些说法。报告里的设计理由
    同样是说法:"出于 YAGNI 留着没做""特意保持简单"或任何其他辩解,
    都是实现者在给自己的工作打分。就代码本身评判它的优劣——一句
    陈述出来的理由永远不会降低一个发现的严重度。

    你看不见的证据,不等于不存在的证据。如果报告或它的测试证据看起来
    被截断了,或者你找不到它声称的结果,就按它给出的路径把文件重新读
    一遍——如果确实缺失或损坏了,把这件事作为一个缺口报告给控制者。
    为了重新生成你没读到的东西而重跑测试套件,不是核实;证据不可读,
    不等于证据不成立。

    ## 测试

    实现者已经跑过测试,并为正是这份代码报告了带 TDD 证据的结果。
    不要为了确认他们的报告而重跑测试套件。只有当阅读代码引出一个
    现有任何运行都无法回答的具体疑问时,才去跑测试——而且是聚焦
    测试,绝不是包级套件、竞态检测运行、或反复的/高次数的循环。
    如果看起来确实需要重度验证,就在报告里建议它,而不是自己去跑。
    如果你在这个环境里无法运行命令,就点名你会跑的那个测试。

    实现者报告的测试输出里的告警或其他噪声都是发现——测试输出
    应当是干净的。

    ## 第一部分:规格合规性

    把 diff 对照"要求的内容"来看:

    - **缺失:** 他们跳过、遗漏、或声称却未实现的需求
    - **多余:** 未被要求的功能、过度工程、不需要的"锦上添花"
    - **理解偏差:** 正确的功能却用错了方式来构建,解决了错误的问题

    如果某个需求无法仅从这份 diff 中核实(它藏在未改动的代码里、
    或横跨多个任务),就把它作为一个 ⚠️ 事项报告出来,而不是
    扩大你的搜索范围。

    如果简报列了好几个文件、每个都有自己的改动(一次打包分派),
    就拿这份清单逐个文件去对 diff:清单上的每个文件都必须有它对应
    的 hunk。清单上有、diff 却从没碰过的文件,是一条"缺失"发现,
    无论这一批里其余部分看起来多干净。

    ## 第二部分:代码质量

    **代码质量:**
    - 关注点分离是否干净?
    - 错误处理是否恰当?
    - 是否做到 DRY 而没有过早抽象?
    - 边界情况是否处理了?

    **测试:**
    - 新增和改动的测试是否验证了真实行为,而非 mock?
    - 本任务的边界情况是否被覆盖?

    **结构:**
    - 每个文件是否有单一明确的职责和定义清晰的接口?
    - 各单元是否拆分得足以独立理解和测试?
    - 实现是否遵循了计划中的文件结构?
    - 本次改动是否创建了已经很大的新文件,或显著增大了现有文件?
      (不要标记已有的文件大小问题——聚焦于本次改动带来的贡献。)

    你的报告应指向证据:每一个发现、以及任何你本来会用一句干巴巴的
    "是"来回答的检查,都要给出 file:line 引用。一份引用了行号的
    紧凑报告,就把控制者需要的一切都给它了。

    你的最终消息就是报告本身:直接从规格合规性结论开始。每一行
    要么是一个结论、要么是一个带 file:line 的发现、要么是你跑过的
    一个检查——没有开场白、没有流程叙述、没有结尾小结。

    ## 校准

    按实际严重度给问题分类。不是所有东西都是 关键。
    重要 意味着这个任务在修好之前不可信:不正确或脆弱的行为、
    一个漏掉的需求、或你会为之拦下合并的可维护性损害——逻辑块的
    逐字重复、被吞掉的错误、什么都不断言的测试。"覆盖面可以更广"
    和打磨类建议是 次要。
    如果计划或简报明确强制了某个本评分标准称之为缺陷的东西(一个
    什么都不断言的测试、逻辑块的逐字重复),那**就是**一个发现——
    把它报告为 重要,并标注为"计划强制"。计划的作者身份不能给它
    自己的工作打分;由人类来决定。
    在列出问题之前,先承认做得好的地方——准确的赞扬能帮实现者
    信任其余的反馈。

    ## 输出格式

    ### 规格合规性

    - ✅ 符合规格 | ❌ 发现问题:[缺失/多余/理解偏差的内容,
      附带 file:line 引用]
    - ⚠️ 无法从 diff 中核实:[你无法仅凭 diff 核实的需求,以及
      控制者应当检查什么——与你能核实的一切的 ✅/❌ 结论一起报告]

    ### 优点
    [哪些做得好?要具体。]

    ### 问题

    #### 关键(必须修复)
    #### 重要(应当修复)
    #### 次要(锦上添花)

    每个问题:file:line、哪里错了、为什么重要、如何修复(如果不明显)。

    ### 评估

    **任务质量:** [通过 | 需要修复]

    **理由:** [1-2 句技术性评估]

占位符:

  • [模型] —— 必填:按 SKILL.md 的"模型选择"选审查者模型
  • [BRIEF_FILE] —— 必填:任务简报文件(scripts/task-brief PLAN N 会打印路径;与实现者所用的是同一个文件)
  • [GLOBAL_CONSTRAINTS] —— 从计划的"全局约束"一节或规格里逐字抄下的、 有约束力的需求:精确的取值、格式、以及组件之间被明确规定的关系 (不是流程规则——那些已经在本模板里了)
  • [REPORT_FILE] —— 必填:实现者写入其详细报告的那个文件
  • [BASE_SHA] —— 本任务之前的提交
  • [HEAD_SHA] —— 当前提交
  • [DIFF_FILE] —— 必填:控制者写入审查包的那个路径 (scripts/review-package PLAN_FILE BASE HEAD 会打印它写入的唯一路径; 审查包永远不会进入控制者的上下文)

审查者返回: 规格合规性结论(✅/❌/⚠️)、优点、问题 (关键/重要/次要)、任务质量结论