---
name: code-review
description: 收集工作区未提交改动或最近一次提交的 git 变更面，做只读代码审查并给出带文件行号的问题清单。适用：审查改动、检查刚写的代码质量。不修改代码。
user-invocable: true
argument-hint: "[可选：审查焦点]"
---

# 代码审查

你正在执行 **code-review** 技能：对当前 git 变更面做只读审查，产出带证据的审查报告。

## 上下文

- 工作区：<%= workspacePath %>
- 用户请求：${arguments}

## 目标与完成标准

- **目标**：基于真实 diff 与相邻代码，审查正确性、边界、范围、架构、契约、安全与测试覆盖。
- **完成标准**：报告已写入工作区；消息流给出自然语言总结（结论、问题清单、优点、未能验证项）。除本技能约定的报告文件外，**不修改**业务代码、配置与其它文件。

## 阶段语义

### 1. 确定审查范围（git 事实）

先确认当前目录是 git 仓库。优先收集**工作区未提交改动**；工作区干净则回退到**最近一次提交**。

建议只读命令（按需组合）：

- `git rev-parse --is-inside-work-tree`
- `git status --porcelain`（识别未跟踪新文件）
- `git diff --name-only HEAD` / `git diff --stat HEAD` / `git diff --unified=3 HEAD`
- 工作区干净时：对 `HEAD~1 HEAD` 做同样的 diff

若不是 git 仓库，或既无未提交改动也无可比较提交，向用户说明原因并停止，不要臆造范围。

diff 过长时截取概览并标注已截断，再用只读工具补读完整文件。未跟踪文件不在 diff 中，须自行 `read`。

### 2. 只读审查

先读项目规则（`AGENTS.md` 及目录级规则）和被改动文件的相邻代码，再以真实代码为证据审查。

审查维度：

- **正确性**与失败路径
- **边界**与空值/并发等边缘情况
- **范围**是否超出用户意图
- **架构**与依赖方向
- **契约**与类型一致性
- **安全**（注入、密钥、权限）
- **测试**是否覆盖新行为

约束：

- 只读：不 `edit` / `write` 业务文件，不执行会改状态的命令，不向用户提问（范围不清时在报告的「未能验证」中说明）。
- 无法验证的点写入未能验证项，不要臆断。
- 每个问题尽量指出文件与行号，并给出可执行的修改建议。

需要并行加深某个子系统时，可同一轮发多个只读 `task`；是否并行由你判断。

### 3. 组织报告

报告须包含：

| 字段 | 含义 |
|------|------|
| `verdict` | `pass` / `conditional` / `block` |
| `summary` | 一句话总评 |
| `findings` | 问题列表：severity（critical/high/medium/low/nit）、file、line、summary、suggestion |
| `strengths` | 做得好的地方 |
| `unverified` | 未能验证、需人工确认的点 |

判定规则（必须遵守）：

- 存在 **critical** 问题 → `verdict` 必须为 `block`，即使主观想给 pass。
- 声称 `pass` 但存在 **high** 问题 → 降为 `conditional`。

## 产物落盘

1. 将完整审查报告写入 `<%= workspacePath %>/.nova/reports/`（目录不存在则创建），例如 `code-review-<日期或主题>.md`。
2. 报告用 markdown：结论、范围说明、问题清单（含严重度与位置）、优点、未能验证项。
3. 在消息流用自然语言总结，并给出文件路径；不要把原始 JSON/状态码甩给用户。

## 约束

- 审查过程只读；唯一允许的写入是本技能的报告文件。
- 不要调用 `start_workflow`；本能力已是 skill，用 `invoke_skill` 或 `/code-review` 进入即可。
- 回复使用用户语言（默认简体中文）。
