code-review
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill: Revisión de código
Skill:代码审查
Ejecutar la batería fija de 5 verificaciones automatizadas que debe pasar un proyecto TypeScript/Node antes de aceptar una implementación como apta para merge, y devolver un informe estructurado y accionable.
Alcance: solo audita y reporta. No corrige código, no modifica configuración, no instala dependencias.Entrada mínima: estar en la raíz de un repositorio con. Si no haypackage.json, parar y avisar.package.jsonVeredicto:(4 bloqueantes OK, Sonar cualquier estado) ·✅ Apto(cualquier bloqueante FAIL) ·❌ No apto(algún bloqueante SKIPPED por config o herramienta ausente).⚠️ Incompleto
在确认TypeScript/Node项目的代码可合并前,执行固定的5项自动化校验,并返回结构化、可落地的报告。
**范围:**仅审计和报告。不修改代码、不更改配置、不安装依赖。**最低要求:**需处于包含的仓库根目录。若不存在package.json,则终止操作并告知用户。package.json判定结果:(4项阻塞性检查全部通过,Sonar状态不影响)·✅ 通过(任意阻塞性检查失败)·❌ 不通过(因配置缺失或工具未安装导致某阻塞性检查被跳过)。⚠️ 未完成
Checks
检查项
| # | Check | Categoría | Comando base | Política |
|---|---|---|---|---|
| 1 | Tipado | Crítico | | Bloqueante. Fail-fast: si falla, no ejecutar el resto. |
| 2 | Linter | Calidad | | Bloqueante solo si hay |
| 3 | Tests | Comportamiento | script | Bloqueante. |
| 4 | Build | Integración | script | Bloqueante. |
| 5 | Sonar | Análisis estático | | Nunca bloqueante. Solo informativo. |
Por qué fail-fast solo en tsc: si los tipos no compilan, eslint (), tests y build fallan masivamente por código roto — el ruido no aporta señal nueva. Eslint, tests y build pueden fallar de forma independiente y sí aportan señales distintas, por eso se ejecutan los cuatro completos.
@typescript-eslintPor qué eslint bloquea solo con errors: eslint distingue (rompe contrato) y (mejora opcional). Para tratar warnings como errors, usar el modificador .
severity: errorseverity: warningincluir-warnings-eslint| # | 检查项 | 类别 | 基础命令 | 规则 |
|---|---|---|---|---|
| 1 | 类型校验 | 关键 | | 阻塞性。快速失败:若失败,不执行后续检查。 |
| 2 | 代码规范检查 | 质量 | | 仅当存在 |
| 3 | 测试 | 行为验证 | 项目的 | 阻塞性。 |
| 4 | 构建 | 集成验证 | 项目的 | 阻塞性。 |
| 5 | Sonar扫描 | 静态分析 | | 从不阻塞。仅作信息提示。 |
**为何仅对tsc启用快速失败:**若类型编译不通过,()、测试和构建会因代码损坏大量失败——这些冗余信息无法提供新的有效线索。而eslint、测试和构建的失败可能独立发生,且能提供不同的有效信息,因此需完整执行这四项检查。
eslint@typescript-eslint**为何eslint仅因error阻塞:**eslint区分(违反约定)和(可选优化)。若需将警告视为错误,可使用参数。
severity: errorseverity: warningincluir-warnings-eslintModificadores de invocación
调用参数
| Modificador | Efecto |
|---|---|
| Ejecutar los 5 checks con la política descrita. |
| Omitir sonar. |
| Tratar warnings de eslint como errors ( |
| Omitir sonar-scanner. |
| Omitir tests. |
| Ejecutar únicamente ese check (p. ej. |
| Persistir el informe en |
Si el usuario no especifica modificador, asumir .
default| 参数 | 作用 |
|---|---|
| 按上述规则执行全部5项检查。 |
| 跳过Sonar扫描。 |
| 将eslint警告视为错误( |
| 跳过 |
| 跳过测试。 |
| 仅执行指定检查项(例如 |
| 将报告保存至 |
若用户未指定参数,默认使用。
defaultFlujo de ejecución
执行流程
Paso 1 — Detectar entorno
步骤1 — 环境检测
- Verificar en la raíz; si no existe, parar.
package.json - Detectar runner (/
npm/yarn) leyendo el lockfile presente. No asumirpnpmpor defecto.npm - Leer para resolver el comando real por check; fallback a
package.json.scripts.npx <tool> - Capturar metadata: rama actual (), commit corto (
git rev-parse --abbrev-ref HEAD), estado del working tree (git rev-parse --short HEAD).git status --porcelain
- 检查根目录是否存在;若不存在,终止操作。
package.json - 通过检测锁文件确定运行器(/
npm/yarn),不默认假设使用pnpm。npm - 读取解析各检查项的实际命令;若未配置,回退至
package.json.scripts。npx <tool> - 捕获元数据:当前分支()、短提交哈希(
git rev-parse --abbrev-ref HEAD)、工作区状态(git rev-parse --short HEAD)。git status --porcelain
Paso 2 — Ejecutar checks en orden
步骤2 — 按顺序执行检查项
Ejecutar secuencialmente (no en paralelo — comparten caché y la salida concurrente es ilegible):
- tsc — . Si FAIL: marcar checks 2–5 como
tsc --noEmity saltar al Paso 3.— (no ejecutado) - eslint — con formato JSON si se invoca por fallback; si por script, parsear línea final .
X problems (Y errors, Z warnings) - tests — detectar Vitest o Jest por ; fallback
devDependencies/npx vitest run.npx jest - build — por código de salida; si usa , parsear errores con el mismo patrón de tsc.
tsc -p tsconfig.build.json - sonar — verificar ; si falta → SKIPPED. Si el servidor no responde → FAIL (no bloquea veredicto).
sonar-project.properties
No usar,--fix,--writeni equivalentes en ninguna herramienta.--force
按顺序执行(不并行——检查项共享缓存,并行输出难以阅读):
- tsc — 执行。若失败:标记检查项2–5为
tsc --noEmit并跳至步骤3。— (未执行) - eslint — 若使用回退命令则以JSON格式输出;若使用项目脚本,则解析最终行。
X problems (Y errors, Z warnings) - 测试 — 通过检测Vitest或Jest;回退执行
devDependencies/npx vitest run。npx jest - 构建 — 根据退出码判断状态;若使用,则按tsc的规则解析错误。
tsc -p tsconfig.build.json - Sonar扫描 — 检查是否存在;若缺失则标记为SKIPPED。若服务器无响应则标记为FAIL(不影响判定结果)。
sonar-project.properties
任何工具均不得使用、--fix、--write或等效参数。--force
Paso 3 — Construir informe
步骤3 — 生成报告
- Calcular veredicto según los 4 bloqueantes (tsc, eslint sin errors, tests, build).
- Generar tabla resumen con los 5 checks.
- Generar detalle solo para checks en FAIL o SKIPPED bloqueante; truncar a los primeros 10 errores por check (si hay más).
… y N más - Generar "Próximas acciones" priorizando: bloqueantes FAIL (tsc → tests → build → eslint errors) → eslint warnings → Sonar findings → checks SKIPPED por config ausente.
- Si está activo, escribir en
guardar-informey mencionar la ruta.docs/code-review/<YYYYMMDD-HHMMSS>.md
- 根据4项阻塞性检查(tsc、无error的eslint、测试、构建)的结果判定最终结果。
- 生成包含5项检查项的汇总表格。
- 仅为FAIL或阻塞性SKIPPED的检查项生成详细内容;每个检查项最多显示前10个错误,若有更多则标注。
… 及N个更多 - 生成“后续操作”列表,优先级为:阻塞性FAIL(tsc → 测试 → 构建 → eslint错误)→ eslint警告 → Sonar问题 → 因配置缺失被SKIPPED的检查项。
- 若启用参数,将报告写入
guardar-informe并告知用户路径。docs/code-review/<YYYYMMDD-HHMMSS>.md
Paso 4 — Presentar resultado
步骤4 — 展示结果
Devolver el informe completo. No continuar con , push ni merge aunque el veredicto sea Apto — salvo instrucción explícita del usuario.
git commit返回完整报告。即使判定结果为通过,也不得自动执行、push或merge操作——除非用户明确指令。
git commitFormato del informe
报告格式
undefinedundefinedRevisión de Código — <YYYY-MM-DD HH:MM>
代码审查 — <YYYY-MM-DD HH:MM>
- Repositorio: <nombre del paquete o ruta>
- Rama: <rama> · Commit: <sha-corto>
- Working tree: limpio | sucio (N archivos modificados)
- Modo: default | solo-bloqueantes | …
- 仓库: <包名或路径>
- 分支: <分支名> · 提交: <短哈希>
- 工作区: 干净 | 未干净(N个文件已修改)
- 模式: default | solo-bloqueantes | …
Resumen
汇总
| # | Check | Categoría | Estado | Detalle | Duración |
|---|---|---|---|---|---|
| 1 | tsc --noEmit | Crítico | ✅/❌/⚠️ | <N errores> | <s> |
| 2 | eslint | Calidad | … | <N errores, M warnings> | … |
| 3 | tests | Comportamiento | … | <P passed, F failed> | … |
| 4 | build | Integración | … | OK | FAIL |
| 5 | sonar | Análisis est. | … | <findings> | URL |
| # | 检查项 | 类别 | 状态 | 详情 | 耗时 |
|---|---|---|---|---|---|
| 1 | tsc --noEmit | 关键 | ✅/❌/⚠️ | <错误数量> | <秒> |
| 2 | eslint | 质量 | … | <错误数量, 警告数量> | … |
| 3 | tests | 行为验证 | … | <通过数量, 失败数量> | … |
| 4 | build | 集成验证 | … | OK | FAIL |
| 5 | sonar | 静态分析 | … | <问题数量> | 地址 |
Veredicto: ✅ Apto | ❌ No apto | ⚠️ Incompleto
判定结果: ✅ 通过 | ❌ 不通过 | ⚠️ 未完成
Detalle de checks fallidos
失败检查项详情
(solo checks en FAIL o SKIPPED bloqueante)
(仅包含FAIL或阻塞性SKIPPED的检查项)
Próximas acciones
后续操作
- …
---- …
---Manejo de errores
错误处理
| Situación | Cómo actuar |
|---|---|
Falta | Parar antes de ejecutar nada. |
Falta | tsc → SKIPPED. Continuar con el resto. Veredicto: Incompleto. |
| Runner ausente del PATH | Parar y preguntar al usuario qué runner usa. |
Script en | FAIL — no SKIPPED (el proyecto está mal configurado). |
| Test runner sin script ni config | Intentar |
| SKIPPED. No afecta veredicto. |
Falta | SKIPPED. No bloquea veredicto. |
| Errores de red en sonar | FAIL con motivo de red. No bloquea veredicto. |
| Ejecución > 10 min en un check | Continuar pero avisar al usuario; permitir cancelación. |
| Working tree sucio | No bloquear. Incluir nota en el encabezado del informe. |
| STOP. Fail-fast. Marcar checks 2–5 como |
| 场景 | 处理方式 |
|---|---|
缺少 | 未执行任何操作即终止。 |
缺少 | tsc → SKIPPED。继续执行其余检查。判定结果:未完成。 |
| 运行器未在PATH中 | 终止操作并询问用户使用的运行器。 |
| FAIL — 不标记为SKIPPED(项目配置有误)。 |
| 无测试脚本或配置 | 尝试 |
| SKIPPED。不影响判定结果。 |
缺少 | SKIPPED。不阻塞判定结果。 |
| Sonar扫描出现网络错误 | FAIL并标注网络原因。不阻塞判定结果。 |
| 某检查项执行时间超过10分钟 | 继续执行但告知用户;允许用户取消。 |
| 工作区未干净 | 不阻塞。在报告标题中添加说明。 |
| 立即终止,快速失败。标记检查项2–5为 |
Anti-patterns
反模式
- Corregir el código reportado como erróneo — el skill solo audita.
- Ejecutar herramientas con o
--fix.--write - Modificar para añadir scripts faltantes.
package.json - Marcar como SKIPPED un check que falló por error real.
- Declarar Apto cuando algún bloqueante quedó SKIPPED por config ausente — esos casos son Incompleto.
- Continuar tras FAIL de tsc.
- Truncar errores sin indicar .
… y N más - Ejecutar checks en paralelo salvo petición explícita.
- Asumir el runner sin detectarlo por lockfile.
- Cambiar de rama, hacer o
git stashantes de ejecutar.git clean - Instalar dependencias faltantes — reportar SKIPPED y dejar al usuario.
- Continuar a , push o merge tras un veredicto Apto sin instrucción explícita.
git commit - Ejecutar el skill en un repo sin .
package.json
- 修改被报告为错误的代码——本技能仅作审计。
- 使用或
--fix参数执行工具。--write - 修改添加缺失的脚本。
package.json - 将因实际错误失败的检查项标记为SKIPPED。
- 当某阻塞性检查因配置缺失被SKIPPED时,判定为通过——此类情况应标记为未完成。
- tsc失败后继续执行后续检查。
- 截断错误但未标注。
… 及N个更多 - 除非用户明确要求,否则并行执行检查项。
- 未通过锁文件检测就假设运行器。
- 执行前切换分支、执行或
git stash。git clean - 安装缺失的依赖——标记为SKIPPED并交由用户处理。
- 判定结果为通过后,未获用户明确指令就执行、push或merge。
git commit - 在无的仓库中执行本技能。
package.json
Notas
说明
Parseo por herramienta
工具解析规则
tsc — patrón: . Conteo: líneas con . Código 0 y sin líneas con → OK.
<archivo>(<línea>,<columna>): error TS<código>: <mensaje>: error TSerror TSeslint — preferir en fallback. Si por script: parsear línea final . Errors > 0 → FAIL. Errors = 0 y warnings > 0 → OK con detalle informativo.
--format jsonX problems (Y errors, Z warnings)tests (Vitest/Jest) — Vitest: / . Jest: . Código 0 → OK.
Test Files X passed | Y failedTests P passed | F failed | S skippedTests: P passed, F failed, S skipped, T totalbuild — estado por código de salida. Si usa , parsear con el mismo patrón de tsc. Vite/esbuild/Rollup: capturar bloque final de error.
tsc -p tsconfig.build.jsonsonar — éxito: código 0 y log contiene . Capturar URL del dashboard si aparece ().
EXECUTION SUCCESSANALYSIS SUCCESSFUL, you can find the results at: <url>tsc — 匹配模式:。统计:包含的行数。退出码为0且无行 → OK。
<文件>(<行号>,<列号>): error TS<代码>: <信息>: error TSerror TSeslint — 回退命令优先使用。若使用项目脚本:解析最终行。错误数>0 → FAIL。错误数=0且警告数>0 → OK并显示详细提示信息。
--format jsonX problems (Y errors, Z warnings)测试(Vitest/Jest) — Vitest: / 。Jest:。退出码为0 → OK。
Test Files X passed | Y failedTests P passed | F failed | S skippedTests: P passed, F failed, S skipped, T total构建 — 根据退出码判断状态。若使用,则按tsc的规则解析错误。Vite/esbuild/Rollup:捕获最终错误块。
tsc -p tsconfig.build.jsonSonar扫描 — 成功:退出码为0且日志包含。若出现仪表盘地址则捕获()。
EXECUTION SUCCESSANALYSIS SUCCESSFUL, you can find the results at: <地址>Relación con otros skills
与其他技能的关联
- story-implement ya ejecuta lint/typecheck/build por cada TK individual. Este skill amplía esa validación a la batería completa antes del merge.
- story-integrate requiere veredicto ✅ Apto como precondición del merge.
- git-pr puede invocar este skill de forma bloqueante antes de crear un PR.
- story-implement已针对单个TK执行lint/类型检查/构建。本技能在合并前将验证范围扩展至完整的校验集合。
- story-integrate要求判定结果为**✅ 通过**作为合并的前置条件。
- git-pr可在创建PR前以阻塞方式调用本技能。
Idioma del informe
报告语言
Aplicar orden canónico: (1) en ; (2) idioma del turno del usuario; (3) preguntar y persistir. Los mensajes de error originales de las herramientas no se traducen.
preferred language.agents/MEMORY.md遵循优先级:(1) 中的;(2) 用户当前会话的语言;(3) 询问用户并保存设置。工具的原始错误信息不翻译。
.agents/MEMORY.mdpreferred language