| name | lina-review |
| description | 用于审查 LinaPro OpenSpec 工作流中的代码变更和规范合规性。在完成 /opsx:apply 任务、 完成 lina-feedback 反馈修复、执行 /opsx:archive 归档前必须使用;在用户要求代码审查、 规范合规检查,或明确调用 /lina-review 时也必须使用。 |
| compatibility | 依赖 OpenSpec CLI、GoFrame v2 技能、lina-e2e 技能。 |
Lina 审查
lina-review审查当前项目变更是否符合项目规范。项目领域规范的唯一事实来源是AGENTS.md及其显式引用的.agents/rules/*.md,包括接口契约、后端 Go、数据库、缓存、数据权限、插件、前端、测试、开发工具、文档、架构和i18n等细则。
审查必须先读取AGENTS.md,再按其中的强制规则加载矩阵识别审查范围命中的规则域,并读取所有对应规则文件。禁止仅凭记忆、历史上下文、摘要、此前读取记录或其他代理转述替代本次读取。未读取命中规则文件的审查结论无效,不得据此标记任务完成、反馈完成或执行归档。
如果审查过程中发现某条可执行审查要求只存在于本技能而不存在于AGENTS.md或对应规则文件,必须将其作为规则归属问题报告;在规则归属明确前,不得把该要求当作正式项目规范执行。更新审查要求时,应优先修改对应.agents/rules/*.md,本技能只保留指向规则文件的执行入口。
与用户交互的内容语言以用户上下文使用的语言为准。
触发条件
自动触发:
/opsx:apply每个任务完成后。
lina-feedback每个任务完成后。
/opsx:archive执行前。
手动触发:
- 用户明确请求审查代码、检查规范合规性或调用
/lina-review。
审查工作流
1. 确定审查范围
根据调用来源确定范围:
| 来源 | 审查范围 |
|---|
| 任务完成后 | 已完成任务修改或创建的文件 |
| 反馈完成后 | 当前反馈任务修改或创建的文件 |
| 归档前 | 当前OpenSpec变更中的所有变更 |
| 手动调用 | 用户指定范围;未指定时使用当前变更和工作区状态 |
范围收集必须从仓库状态开始,而不是只看git diff:
git status --short
git ls-files --others --exclude-standard
审查候选项必须包含所有已跟踪和未跟踪变更,包括已暂存文件、未暂存文件、显示为??的未跟踪文件,以及显示为?? path/的未跟踪目录。
当git status --short报告未跟踪目录时,在审查前必须展开为具体文件:
git ls-files --others --exclude-standard -- <path>
当git status --short报告子仓库或submodule存在变更时,例如父仓库只显示m apps/lina-plugins,不得把该路径整体视为已审查。审查前必须进入子仓库收集内部状态、已跟踪差异和未跟踪文件,并把结果加上父路径前缀纳入审查候选项:
git -C <path> status --short
git -C <path> diff --name-only
git -C <path> diff --cached --name-only
git -C <path> ls-files --others --exclude-standard
对于apps/lina-plugins这类插件子仓库,展开后的候选文件必须继续按AGENTS.md的插件本地规范优先级处理;涉及具体apps/lina-plugins/<plugin-id>/时,必须检查该插件根目录是否存在AGENTS.md普通文件或符号链接,并在审查结论中记录插件本地规范读取结果或不存在判断。
如果任务运行过代码生成器、治理脚本或测试生成流程,即使生成文件未出现在git diff中,也必须显式纳入审查范围。git diff只能作为状态收集后的辅助工具,不能单独定义审查范围。
涉及OpenSpec变更时,运行以下命令了解当前变更状态:
openspec status --change "<name>" --json
2. 加载项目规范
读取AGENTS.md作为规范入口,并按其中的强制规则加载矩阵判断审查范围命中的规则域。命中后读取所有对应.agents/rules/*.md,并按规则文件中的设计、实现、验证和审查要求执行。
本技能不得复制维护各规范域的细则。例如:
- 接口契约审查读取并遵守
.agents/rules/api-contract.md。
- 后端 Go 审查读取并遵守
.agents/rules/backend-go.md,并在修改或审查 Go 后端代码时使用goframe-v2技能。
- E2E 审查读取并遵守
.agents/rules/testing.md,并按需使用lina-e2e技能。
- 其他规范域均以
AGENTS.md命中的规则文件为准。
若规则文件缺失、无法读取或规则之间存在无法调和的冲突,审查必须报告为严重问题,并阻塞任务完成、反馈完成或归档。
3. 执行审查
按审查范围和已读取规则文件执行检查。审查重点由规则文件决定,lina-review只负责确保以下编排要求成立:
- 审查结论必须列出实际读取的规则文件。
- 审查必须只检查与当前审查范围相关的类别。
- 命中规则域时,必须按对应规则文件确认实现、测试、验证命令和任务记录是否满足门禁。
- 规则要求记录无影响判断时,审查结论必须明确说明无影响理由。
- 对
i18n、缓存一致性、数据权限、开发工具跨平台和测试策略等 OpenSpec 审查要求,按.agents/rules/openspec.md和实际命中规则文件执行影响分析;确认无影响时也必须记录。
- 发现问题时,必须提供文件路径和行号,并说明违反的规则文件或规则来源。
- 简单、低风险且范围清晰的问题可以提供自动修复选项;不得在审查过程中擅自修改用户未要求修改的文件。
4. 验证审查证据
审查必须确认执行者提供的验证证据覆盖当前工作区状态,而不是历史状态。验证证据包括但不限于:
openspec validate <change> --strict。
- 命中规则文件要求的 Go 编译门禁、单元测试、E2E、静态扫描、治理验证或文件检查。
- 与反馈修复性质匹配的测试或治理验证。
当审查范围包含 Go 代码文件时,验证证据必须包含当前工作区已执行且通过的make lint命令记录;仅有go test/go build不得视为满足backend-go lint 门禁。
当审查范围命中 i18n 影响(bizerr、manifest/i18n、$t、用户可见文案,或任务未声明无 i18n 影响)时,验证证据必须包含当前工作区已执行且通过的make i18n.check命令记录。
如果验证命令因外部依赖不可用而无法运行,审查结论必须记录阻断原因、替代验证、覆盖范围和剩余风险。不能用未执行的验证假设替代审查证据。缺少强制门禁证据时必须记为严重问题并阻塞完成/归档。
5. 生成审查报告
使用以下结构输出审查报告,并按实际命中规则域删减或扩展章节:
## Lina 审查报告
**变更:** <变更名称或未指定>
**范围:** <任务级 / 反馈级 / 全部变更 / 手动范围>
**审查文件数:** <数量>
**范围来源:** `git status --short` + `git ls-files --others --exclude-standard` + <任务或变更上下文>
**已读取规则文件:** <列出按 `AGENTS.md` 命中的 `.agents/rules/*.md`>
### 发现的问题
- **严重** <文件路径:行号>:<问题描述>。依据:<规则文件或规范入口>。
- **警告** <文件路径:行号>:<问题描述>。依据:<规则文件或规范入口>。
### 规则域结论
- <规则域>:通过 / 发现 N 个问题 / 未命中,原因:<说明>。
- <规则域>:通过 / 发现 N 个问题 / 无影响,原因:<说明>。
### 验证证据
- <命令或检查>:通过 / 失败 / 未运行,原因:<说明>。
### 摘要
- 严重:N
- 警告:N
### 建议操作
1. <具体操作>
没有发现问题时,必须明确说明“未发现阻塞问题”,并列出仍然存在的测试缺口或剩余风险。
问题严重性
| 级别 | 行为 |
|---|
| 严重 | 阻塞任务完成、反馈完成或归档,必须修复或明确豁免依据 |
| 警告 | 展示给用户,建议修复,但不单独阻塞继续推进 |
审查触发点
| 工作流步骤 | 行为 |
|---|
/opsx:apply任务完成 | 审查当前任务变更,在下一任务前暴露问题 |
lina-feedback任务完成 | 审查反馈修复,在标记完成前暴露问题 |
/opsx:archive | 审查完整变更,严重问题阻塞归档 |
| 手动调用 | 按用户指定范围或当前变更执行审查 |
硬性规则
AGENTS.md及其显式引用的规则文件是唯一事实来源。
- 未读取命中规则文件的审查结论无效。
- 不在本技能中重复维护领域规范细则。
- 范围识别必须包含未跟踪文件和展开后的未跟踪目录。
- 仅检查与变更文件和命中规则域相关的类别。
- 严重问题阻塞任务完成、反馈完成或归档。
- 问题报告必须包含文件路径、行号和规则来源。