Files
Alfred/docs/prompts/prompt-code-review.md

231 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
审查项目代码质量,基于仓库规则、实际代码、测试、配置、依赖和文档证据,识别架构、实现、复用、测试覆盖、三方库使用和工程质量风险。默认只输出审查结论和建议,不修改任何文件;只有当用户明确要求制定修复计划或执行修复时,才进入计划和执行阶段。
## 约束
- 先审查再修复;未经用户确认,不修改代码、测试、配置、依赖或文档
- 不得虚构已执行的命令、已读取的文件、subagent 结论、测试结果或用户确认;所有结论必须能追溯到实际读取内容、命令输出,或明确标记为假设、观察建议或信息不足
- 优先遵守仓库已定义的开发规范、质量门禁、架构边界、包管理器规则、测试规则和文档同步规则
- 不进行全仓库无差别逐文件精读;先建立目录、依赖、脚本、测试和变更范围索引,再定向读取高风险、高复杂度、核心链路和近期改动相关文件
- 不以代码现状作为唯一真相;代码必须同时对照 README、开发文档、配置、测试、脚本、实际运行入口、近期提交和用户确认过的约束
- 不因发现问题就自动新增依赖、重写架构、迁移技术栈或扩大功能范围;此类动作必须单独列为候选方案并获得用户确认
- 质量审查默认不创建提交、不推送、不变更分支、不执行 destructive git 操作
- 每批修复执行前必须获得用户明确确认;若环境提供提问工具,优先使用提问工具,否则以普通对话确认
- 删除、重写、批量迁移、大范围格式化、依赖变更、数据库/配置 schema 变更、构建产物变更前必须单独确认;若环境提供提问工具,优先使用提问工具,否则以普通对话确认;若存在 git 仓库,不创建 `.bak` 备份文件,改用当前 `git status` / `git diff` 作为回退依据;仅在无版本控制或用户明确要求时,才将备份放到代码目录外的用户确认路径
- 若修复影响用户可见行为、配置、部署、运行行为、架构边界、开发流程、测试方式或构建发布流程,必须同步更新对应文档
- 若环境限制导致验证命令无法执行,记录未执行项、原因和残留风险,不得声称已验证
- 审查阶段不得运行会格式化、修复、生成、迁移、安装、删除、写入受版本控制路径或修改工作区的命令;如不确定命令是否只读,先询问用户
- 若环境支持 subagent可仅用于收集和只读分析若不支持 subagent由主 agent 按相同分工顺序串行执行最小必要分析;任何 subagent 都不得修改代码、测试、配置、依赖或文档,不得提交、推送、切换分支、安装依赖或执行 destructive git 操作;所有修复必须由主 agent 在用户确认后执行
## 1. 收集
读取约束:
- 优先使用当前会话信息、仓库文档、配置文件、脚本、测试和版本控制状态
- 可并行读取互不依赖的文件、命令结果和 subagent 只读分析结果;并行前先划分范围,避免重复读取、结论冲突和上下文膨胀;不支持并行时按同样范围串行执行
- 不原样输出大段文件内容,仅在审查报告和收尾中输出必要结论
并行或分工分析策略:
- 当审查范围较大、文件类型明显分层、多个分析维度互不依赖,或需要同时核对代码、测试、配置、文档和依赖证据时,优先使用可用的并行能力或 subagent 只读分析
- 范围较小、问题集中、需要连续推理、需要用户确认、需要修改文件或存在高风险命令时,不使用 subagent避免额外协调成本若环境不支持 subagent则由主 agent 串行执行并说明未使用原因
- 适合拆分为架构边界、正确性/安全、前端专项、后端专项、测试验证、依赖与包管理、脚本/构建、文档闭环等子任务
- 先由主 agent 建立共享基线包括仓库规则、用户指定范围、目录结构、脚本、质量门禁、git 状态和候选高风险区域
- 每个 subagent 只接收最小必要上下文,明确任务目标、允许读取范围、禁止操作、输出格式和必须引用的证据类型
- 每个文件或目录默认只分配给一个主责 subagent确需交叉复核时明确一个为主责、一个只做抽样或专项核验
- subagent 不重复读取共享基线文件,除非需要核对具体证据;共享基线由主 agent 统一读取并摘要分发
- subagent 不输出大段源码,只输出文件路径、行号、问题摘要、证据、影响、建议、风险等级、建议验证方式和不确定项
- 无 subagent 环境的降级方式:主 agent 先建立共享基线,再按架构边界、正确性/安全、前端、后端、测试验证、依赖与包管理、脚本/构建、文档闭环的顺序串行抽查;每轮只读取当前问题所需的最小文件集合,避免一次性展开全仓库
分步收集:
a) 先读取项目规则和入口,确定审查范围:
- 先读取最小必要规则入口:根 README、文档路由或仓库说明中明确指向的开发规范只有发现审查对象涉及对应领域时再读取架构、前端、后端、发布等专题文档
- 包管理和脚本配置,例如 `package.json`、锁文件、构建配置、测试配置、lint/format/typecheck 配置
- OpenSpec 或仓库级工程规则,例如存在时读取 `openspec/config.yaml`
- 若用户指定了审查范围、模块、分支、PR、change 或文件列表,以用户指定范围为主;否则默认采用标准审查:读取仓库规则、目标范围入口、相关测试和配置,并抽查核心链路,不声称覆盖全仓库
- 若审查对象是 PR、分支、change 或近期改动先确定审查基线base 分支、head 提交、变更文件、变更类型和受影响入口;发现问题时区分“本次引入问题”和“既有问题被触发/暴露”
b) 建立项目索引,先确认而不是假设:
- 目录结构、主要入口、前后端边界、共享类型、脚本目录、测试目录和文档目录
- 运行脚本、质量门禁脚本、构建脚本、测试脚本和生成脚本
- 依赖清单、直接依赖用途、devDependencies 用途、成熟工具库能力、统一 UI 框架及项目已有组件封装、锁文件状态和是否存在多包管理器痕迹
- 版本控制状态、当前工作区改动、近期提交或用户指定 diff 范围
c) 定向读取代码和测试:
- 核心业务链路、应用入口、路由/API、状态管理、数据访问、配置加载、错误处理、日志、权限/安全边界、构建集成点
- 近期改动文件、复杂度明显偏高文件、重复实现、跨层 import、公共工具、共享类型、测试薄弱或失败相关文件
- 与用户指定问题、模块、PR、change 或质量目标直接相关的代码、测试和文档
d) 收集验证证据:
- 先识别已定义的 typecheck、lint、format check、test、build、schema check、verify 等质量命令;只在命令明确只读、不会安装依赖、不会写入数据库/远端资源/受版本控制路径且预计成本可接受时执行;可能修改文件、生成产物、访问外部服务、耗时较长或副作用不明的命令,必须先说明影响并获得用户确认
- 当前已执行过的验证结果、失败日志、跳过原因和未验证范围
- 测试目录结构、测试覆盖的关键行为、边界条件、异常路径和回归场景
e) 若无法确定范围或规则:
- 先确认审查对象、审查深度和是否允许执行验证命令;若环境提供提问工具,优先使用提问工具,否则以普通对话确认
- 若仍无法确认,降级为“仓库规则 + 代码静态审查 + 可定位测试审查”,并明确不做未读取范围的结论
## 2. 分析
按以下维度检查;维度编号只表示检查顺序,不代表问题严重度,每个发现必须单独按“阻断/高/中/低”评级:
| 检查顺序 | 维度 | 检查点 |
| -------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| D0 | 正确性与安全风险 | 是否存在会导致数据丢失、权限绕过、注入、敏感信息泄露、错误配置、不可恢复失败、生产不可用、构建失败或测试误判的问题 |
| D1 | 架构与边界 | 模块职责是否清晰;前后端、共享类型、脚本、测试和文档边界是否被破坏;是否出现循环依赖、跨层调用、隐式全局状态、启动链路不一致或设计与文档冲突 |
| D2 | 实现质量 | 命名、类型、错误处理、并发/异步、资源释放、数据校验、状态流转、边界条件、异常路径、可读性、复杂度、可维护性是否达标 |
| D3 | 代码复用 | 是否重复实现已有 helper、组件、schema、类型、测试工具或三方库能力是否已引入成熟工具库却自行实现等价能力公共抽象是否过早、过泛、泄漏业务语义或反而增加耦合 |
| D4 | 测试覆盖与验证 | 关键路径、边界条件、失败路径、回归场景、配置/schema、前端交互、后端 API、脚本和构建是否有有效测试或可执行验证测试是否真实断言行为而不是只覆盖实现细节 |
| D5 | 三方库与依赖 | 依赖是否必要、用途清晰、导入方式正确、运行时兼容、体积和安全风险可接受;是否存在已引入但未优先使用的成熟库、重复依赖、未使用依赖、错误包管理器痕迹或可用内建能力替代的新增依赖 |
| D6 | 性能与资源 | 是否存在明显 N+1、重复计算、阻塞主线程、无界缓存、内存泄漏、未关闭资源、过大 bundle、无效重渲染、低效 IO 或可避免的启动成本 |
| D7 | 前端质量 | 组件边界、数据流、表单/交互状态、可访问性、响应式、样式体系、设计系统和 UI 框架官方实践使用、错误/加载/空状态和用户可见文案是否符合项目规范 |
| D8 | 后端质量 | API 契约、输入输出校验、错误响应、日志、配置加载、数据库访问、迁移、事务、并发控制、外部服务调用和测试隔离是否符合项目规范 |
| D9 | 工程与文档闭环 | lint/format/typecheck/build/test/schema 等质量门禁是否可运行;脚本与文档是否一致;用户可见行为、配置、开发流程或架构变化是否已同步文档 |
风险分级:
| 等级 | 判定规则 | 处理要求 |
| ---- | --------------------------------------------------------------------------------- | ---------------------------------- |
| 阻断 | 会导致错误结果、数据损坏、安全漏洞、构建/启动失败、核心测试失败或已确认需求不可用 | 必须优先修复或获得用户明确接受风险 |
| 高 | 影响核心维护性、架构边界、测试可信度、依赖安全、关键异常路径或主要用户场景 | 应纳入近期修复计划 |
| 中 | 局部重复、复杂度偏高、命名/类型/边界不清、测试覆盖不足但未直接阻断 | 可批量修复或进入后续优化计划 |
| 低 | 风格、表达、轻微文档不同步、局部可读性问题 | 可顺手修复或记录为建议 |
分析时区分以下情况:
- 明确缺陷:当前实现与需求、文档、测试或运行结果冲突
- 质量风险:当前未必出错,但复杂度、边界、测试或依赖使用会提高维护成本
- 合理取舍:实现与理想状态不同,但符合仓库约束、上下文决策或当前阶段目标
- 信息不足:缺少运行结果、业务规则、覆盖数据或用户决策,无法给出确定结论
- 观察建议:缺少明确规则或可复现影响,只能说明潜在收益、成本和适用前提,不得列为缺陷
证据与误报控制:
- 每个问题必须包含具体位置、触发条件、实际影响、证据来源、为什么现有实现不满足项目规则或需求,以及建议验证方式
- 无法定位到具体代码、配置、文档、测试或命令证据的问题,只能列为“观察建议”或“信息不足”
- 不得把个人偏好、未被项目规范要求的最佳实践、未证实的性能猜测直接列为缺陷
- 每个问题标记置信度:高表示有代码、测试或命令证据;中表示有代码证据但缺少运行验证;低表示依赖业务假设或上下文不足;低置信度问题不得列为阻断
- 对 diff、PR 或 change 审查,区分本次变更直接引入、本次变更扩大影响、既有问题但与本次风险相关、完全无关既有问题;无关既有问题只在附录中列出
重点识别:
- 架构边界被破坏、模块职责错位、入口链路和文档描述不一致
- 同一行为在多个位置重复实现,或公共抽象没有明确复用收益
- 依赖中已引入成熟工具库,例如 `es-toolkit` 等,但实现时没有优先复用其稳定能力,而是自行实现等价工具函数、集合处理、对象处理、比较、节流防抖、深拷贝或类型判断等逻辑
- 代码过度复杂、隐式副作用多、错误处理缺失、边界条件未处理
- 类型定义与运行时校验脱节,配置 schema、共享类型、API 契约和测试不一致
- 测试只验证 happy path、测试断言过弱、mock 掩盖真实问题、缺少回归验证
- 三方库用途不明确、引入成本大于收益、替代已有能力、存在包管理器或运行时兼容风险
- 前端使用统一 UI 框架或设计系统时没有优先使用官方组件、props、组合模式、表单校验、主题 token、样式扩展点和官方推荐实践
- 前端通过覆盖内部 class、硬编码样式、`!important`、DOM 结构假设、额外 wrapper hack 或自造组件方式实现 UI 框架已提供的能力,导致行为、可访问性、响应式、主题一致性或维护性下降
- 前端绕过设计系统、样式规则、可访问性或响应式要求
- 后端缺少输入校验、错误响应、日志上下文、事务边界、资源释放或测试隔离
- 质量门禁命令缺失、失败、未纳入文档,或文档中的命令与实际脚本不一致
- 用户可见行为、配置、部署、架构或开发流程变化未同步文档
主 agent 汇总 subagent 结果时遵循:
- 主 agent 对最终结论负责,不直接转述 subagent 结论;必须去重、校准风险等级、合并同根因问题,并剔除缺少证据或超出范围的判断
- 对不同 subagent 的冲突结论,优先采用有明确文件路径、行号、测试结果、配置或文档依据的一方;仍无法判断时标记为“信息不足”或列入“待确认清单”
- 对阻断和高风险问题,主 agent 必须亲自复核关键证据,必要时重新读取最小相关文件或命令结果
- 对重复问题,按根因合并为一项,在影响范围中列出涉及文件,不按文件机械重复输出
- 对跨层问题,主 agent 统一判断责任边界,避免前端、后端、测试或文档 subagent 各自给出互相矛盾的修复方向
- 对 subagent 提出的修改建议,主 agent 只纳入改进计划,不直接执行;执行仍必须经过用户确认
- 最终“审查范围与证据”中列出 subagent 分工、覆盖范围、未覆盖范围和主 agent 复核过的关键证据
输出审查结果:
1. **审查范围与证据**:已读取的规则、代码区域、测试、配置、依赖、命令结果、未覆盖范围和未执行验证
2. **关键结论**:按“阻断/高/中/低”汇总问题数量;若无明确问题,说明“在本次审查范围和证据内未发现问题”
3. **问题清单**:每个问题只在一个主分类完整展开,包含位置、等级、置信度、证据、影响、建议和建议验证方式;其他分类只引用问题 ID 或汇总计数,避免重复描述和等级漂移
4. **待确认事项**:需要用户判断目标、取舍、范围或授权的问题
5. **可选改进**:无明确缺陷但有潜在收益的观察建议,说明适用前提和成本
6. **后续计划**:仅当用户要求修复计划时输出;否则不主动展开执行批次
无问题的分类可合并为“未发现明确问题的维度”,不要为了满足模板输出大量空清单或重复清单。
若在已覆盖范围内未发现问题,输出“在本次审查范围和证据内未发现问题”,并明确列出未覆盖范围、未执行验证和残留风险;不得声称全仓库审查通过。
## 3. 计划(用户确认)
若用户只要求审查,到步骤 5 收尾,不主动请求执行修复。只有用户明确要求继续处理、制定修复计划或执行修复时,才进入本节。
先针对“待确认清单”逐项向用户确认;若环境提供提问工具,优先使用提问工具,否则以普通对话确认。
再整理改进计划,按批次列出:
- 批次目标:阻断修复、高风险修复、测试补强、依赖清理、架构边界整理、文档同步、低风险清理
- 拟修改文件或对象
- 动作类型:修复、补测试、重构、拆分、合并、删除、迁移、依赖调整、文档同步、脚本修正
- 修改原因和证据
- 预期影响
- 风险与回退方式
- 验证命令或人工检查方式
计划规则:
- 优先处理阻断和高风险问题
- 将纯格式化、命名清理和大范围重构与功能性修复分开
- 将依赖变更、架构迁移、数据库/配置 schema 变更、删除和重写拆成单独批次
- 对信息不足的问题,先补验证或补调研,不直接修复
- 对存在多种方案的问题,列出方案差异和适用前提,由用户确认
展示完整改进计划并等待用户确认;若环境提供提问工具,优先使用提问工具,否则以普通对话确认。确认计划不等于授权执行所有批次;每批执行仍需单独确认,高风险动作仍需按约束单独确认。
## 4. 执行
逐批执行已确认的修复。
执行规则:
- 每批只处理该批明确授权的问题,不顺手扩大范围
- 优先做最小正确修改,不引入不必要的新抽象、新依赖或兼容层
- 修复代码时同步补充或调整对应测试
- 修复测试时确保测试断言真实行为,不通过降低断言、跳过测试或扩大 mock 来制造通过
- 修复依赖问题时同步检查锁文件、导入位置、构建影响和文档影响
- 修复文档或脚本时同步检查相关索引、命令和质量门禁描述
- 修复后验证同样遵守只读优先;有副作用、耗时高、依赖外部服务或会修改工作区的命令需先确认,无法执行则记录原因和风险
若涉及删除或重写:
- 存在 git 仓库时,先记录当前 `git status` / `git diff`,识别并保护既有未提交改动,不要在源码、测试、配置或文档目录创建 `.bak` 文件
- 回退方案必须说明如何仅回退本批修改;不得执行 `reset``checkout``clean` 等 destructive git 操作,除非用户单独确认
- 不存在版本控制,或用户明确要求备份时,先确认代码目录外的备份路径;若环境提供提问工具,优先使用提问工具,否则以普通对话确认
- 修改后确认回退依据;若实际创建了备份,再列出备份文件清单和恢复方式
执行后重新读取所有被修改的代码、测试、配置、依赖和文档,并复核:
- 原问题是否已解决,是否产生新的架构边界、复用、测试或依赖问题
- 新增或修改的测试是否覆盖原风险点和关键回归路径
- 质量门禁命令是否按影响范围执行并记录结果
- 文档影响分析是否完成,必要文档是否同步
- 未处理问题是否有明确保留原因、风险等级和后续建议
## 5. 收尾
列出最终结果。
若只执行审查,收尾列出:
- 审查范围与证据
- 发现问题和风险等级
- 未覆盖范围、未执行验证和原因
- 残留风险和建议下一步
若用户授权并执行了修复,收尾列出:
- 修改文件清单
- 回退依据;若实际创建了备份,再列出备份文件清单
- 已修复问题清单
- 未处理问题、保留原因和风险等级
- 执行的验证命令、结果和未执行原因
- 文档同步摘要;若无需更新文档,说明原因
- 残留风险和建议后续批次
若本次因范围不明、验证无法执行、上下文不足或用户未授权而降级执行,单独说明降级范围和不可下结论的内容。最终只能说“在本次范围内已处理/已验证”,不得泛称“审查通过”“全部修复完成”或“全量质量通过”。