code-review

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Skill: 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
package.json
. Si no hay
package.json
, parar y avisar.
Veredicto:
✅ Apto
(4 bloqueantes OK, Sonar cualquier estado) ·
❌ No apto
(cualquier bloqueante FAIL) ·
⚠️ Incompleto
(algún bloqueante SKIPPED por config o herramienta ausente).

在确认TypeScript/Node项目的代码可合并前,执行固定的5项自动化校验,并返回结构化、可落地的报告。
**范围:**仅审计和报告。不修改代码、不更改配置、不安装依赖。
**最低要求:**需处于包含
package.json
的仓库根目录。若不存在
package.json
,则终止操作并告知用户。
判定结果:
✅ 通过
(4项阻塞性检查全部通过,Sonar状态不影响)·
❌ 不通过
(任意阻塞性检查失败)·
⚠️ 未完成
(因配置缺失或工具未安装导致某阻塞性检查被跳过)。

Checks

检查项

#CheckCategoríaComando basePolítica
1TipadoCrítico
tsc --noEmit
Bloqueante. Fail-fast: si falla, no ejecutar el resto.
2LinterCalidad
eslint
Bloqueante solo si hay
error
s. Warnings = informativos.
3TestsComportamientoscript
test
del proyecto
Bloqueante.
4BuildIntegraciónscript
build
del proyecto
Bloqueante.
5SonarAnálisis estático
sonar-scanner
Nunca bloqueante. Solo informativo.
Por qué fail-fast solo en tsc: si los tipos no compilan, eslint (
@typescript-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.
Por qué eslint bloquea solo con errors: eslint distingue
severity: error
(rompe contrato) y
severity: warning
(mejora opcional). Para tratar warnings como errors, usar el modificador
incluir-warnings-eslint
.

#检查项类别基础命令规则
1类型校验关键
tsc --noEmit
阻塞性。快速失败:若失败,不执行后续检查。
2代码规范检查质量
eslint
仅当存在
error
级别问题时为阻塞性。警告仅作信息提示。
3测试行为验证项目的
test
脚本
阻塞性。
4构建集成验证项目的
build
脚本
阻塞性。
5Sonar扫描静态分析
sonar-scanner
从不阻塞。仅作信息提示。
**为何仅对tsc启用快速失败:**若类型编译不通过,
eslint
@typescript-eslint
)、测试和构建会因代码损坏大量失败——这些冗余信息无法提供新的有效线索。而eslint、测试和构建的失败可能独立发生,且能提供不同的有效信息,因此需完整执行这四项检查。
**为何eslint仅因error阻塞:**eslint区分
severity: error
(违反约定)和
severity: warning
(可选优化)。若需将警告视为错误,可使用
incluir-warnings-eslint
参数。

Modificadores de invocación

调用参数

ModificadorEfecto
default
Ejecutar los 5 checks con la política descrita.
solo-bloqueantes
Omitir sonar.
incluir-warnings-eslint
Tratar warnings de eslint como errors (
--max-warnings=0
).
sin-sonar
Omitir sonar-scanner.
sin-tests
Omitir tests.
solo <check>
Ejecutar únicamente ese check (p. ej.
solo tsc
).
guardar-informe
Persistir el informe en
docs/code-review/<YYYYMMDD-HHMMSS>.md
.
Si el usuario no especifica modificador, asumir
default
.

参数作用
default
按上述规则执行全部5项检查。
solo-bloqueantes
跳过Sonar扫描。
incluir-warnings-eslint
将eslint警告视为错误(
--max-warnings=0
)。
sin-sonar
跳过
sonar-scanner
sin-tests
跳过测试。
solo <check>
仅执行指定检查项(例如
solo tsc
)。
guardar-informe
将报告保存至
docs/code-review/<YYYYMMDD-HHMMSS>.md
若用户未指定参数,默认使用
default

Flujo de ejecución

执行流程

Paso 1 — Detectar entorno

步骤1 — 环境检测

  1. Verificar
    package.json
    en la raíz; si no existe, parar.
  2. Detectar runner (
    npm
    /
    yarn
    /
    pnpm
    ) leyendo el lockfile presente. No asumir
    npm
    por defecto.
  3. Leer
    package.json.scripts
    para resolver el comando real por check; fallback a
    npx <tool>
    .
  4. Capturar metadata: rama actual (
    git rev-parse --abbrev-ref HEAD
    ), commit corto (
    git rev-parse --short HEAD
    ), estado del working tree (
    git status --porcelain
    ).
  1. 检查根目录是否存在
    package.json
    ;若不存在,终止操作。
  2. 通过检测锁文件确定运行器(
    npm
    /
    yarn
    /
    pnpm
    ),不默认假设使用
    npm
  3. 读取
    package.json.scripts
    解析各检查项的实际命令;若未配置,回退至
    npx <tool>
  4. 捕获元数据:当前分支(
    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):
  1. tsc
    tsc --noEmit
    . Si FAIL: marcar checks 2–5 como
    — (no ejecutado)
    y saltar al Paso 3.
  2. eslint — con formato JSON si se invoca por fallback; si por script, parsear línea final
    X problems (Y errors, Z warnings)
    .
  3. tests — detectar Vitest o Jest por
    devDependencies
    ; fallback
    npx vitest run
    /
    npx jest
    .
  4. build — por código de salida; si usa
    tsc -p tsconfig.build.json
    , parsear errores con el mismo patrón de tsc.
  5. sonar — verificar
    sonar-project.properties
    ; si falta → SKIPPED. Si el servidor no responde → FAIL (no bloquea veredicto).
No usar
--fix
,
--write
,
--force
ni equivalentes en ninguna herramienta.
按顺序执行(不并行——检查项共享缓存,并行输出难以阅读):
  1. tsc — 执行
    tsc --noEmit
    。若失败:标记检查项2–5为
    — (未执行)
    并跳至步骤3。
  2. eslint — 若使用回退命令则以JSON格式输出;若使用项目脚本,则解析最终行
    X problems (Y errors, Z warnings)
  3. 测试 — 通过
    devDependencies
    检测Vitest或Jest;回退执行
    npx vitest run
    /
    npx jest
  4. 构建 — 根据退出码判断状态;若使用
    tsc -p tsconfig.build.json
    ,则按tsc的规则解析错误。
  5. Sonar扫描 — 检查
    sonar-project.properties
    是否存在;若缺失则标记为SKIPPED。若服务器无响应则标记为FAIL(不影响判定结果)。
任何工具均不得使用
--fix
--write
--force
或等效参数。

Paso 3 — Construir informe

步骤3 — 生成报告

  1. Calcular veredicto según los 4 bloqueantes (tsc, eslint sin errors, tests, build).
  2. Generar tabla resumen con los 5 checks.
  3. Generar detalle solo para checks en FAIL o SKIPPED bloqueante; truncar a los primeros 10 errores por check (
    … y N más
    si hay más).
  4. Generar "Próximas acciones" priorizando: bloqueantes FAIL (tsc → tests → build → eslint errors) → eslint warnings → Sonar findings → checks SKIPPED por config ausente.
  5. Si
    guardar-informe
    está activo, escribir en
    docs/code-review/<YYYYMMDD-HHMMSS>.md
    y mencionar la ruta.
  1. 根据4项阻塞性检查(tsc、无error的eslint、测试、构建)的结果判定最终结果。
  2. 生成包含5项检查项的汇总表格。
  3. 仅为FAIL或阻塞性SKIPPED的检查项生成详细内容;每个检查项最多显示前10个错误,若有更多则标注
    … 及N个更多
  4. 生成“后续操作”列表,优先级为:阻塞性FAIL(tsc → 测试 → 构建 → eslint错误)→ eslint警告 → Sonar问题 → 因配置缺失被SKIPPED的检查项。
  5. 若启用
    guardar-informe
    参数,将报告写入
    docs/code-review/<YYYYMMDD-HHMMSS>.md
    并告知用户路径。

Paso 4 — Presentar resultado

步骤4 — 展示结果

Devolver el informe completo. No continuar con
git commit
, push ni merge aunque el veredicto sea Apto — salvo instrucción explícita del usuario.

返回完整报告。即使判定结果为通过,也不得自动执行
git commit
、push或merge操作
——除非用户明确指令。

Formato del informe

报告格式

undefined
undefined

Revisió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

汇总

#CheckCategoríaEstadoDetalleDuración
1tsc --noEmitCrítico✅/❌/⚠️<N errores><s>
2eslintCalidad<N errores, M warnings>
3testsComportamiento<P passed, F failed>
4buildIntegraciónOKFAIL
5sonarAnálisis est.<findings>URL
#检查项类别状态详情耗时
1tsc --noEmit关键✅/❌/⚠️<错误数量><秒>
2eslint质量<错误数量, 警告数量>
3tests行为验证<通过数量, 失败数量>
4build集成验证OKFAIL
5sonar静态分析<问题数量>地址

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ónCómo actuar
Falta
package.json
Parar antes de ejecutar nada.
Falta
tsconfig.json
tsc → SKIPPED. Continuar con el resto. Veredicto: Incompleto.
Runner ausente del PATHParar y preguntar al usuario qué runner usa.
Script en
package.json
pero binario inexistente
FAIL — no SKIPPED (el proyecto está mal configurado).
Test runner sin script ni configIntentar
npx vitest run
o
npx jest
; si ambos fallan, SKIPPED.
sonar-scanner
no disponible
SKIPPED. No afecta veredicto.
Falta
sonar-project.properties
SKIPPED. No bloquea veredicto.
Errores de red en sonarFAIL con motivo de red. No bloquea veredicto.
Ejecución > 10 min en un checkContinuar pero avisar al usuario; permitir cancelación.
Working tree sucioNo bloquear. Incluir nota en el encabezado del informe.
tsc
FAIL
STOP. Fail-fast. Marcar checks 2–5 como
— (no ejecutado)
.

场景处理方式
缺少
package.json
未执行任何操作即终止。
缺少
tsconfig.json
tsc → SKIPPED。继续执行其余检查。判定结果:未完成
运行器未在PATH中终止操作并询问用户使用的运行器。
package.json
中有脚本但二进制文件不存在
FAIL — 不标记为SKIPPED(项目配置有误)。
无测试脚本或配置尝试
npx vitest run
npx jest
;若均失败则标记为SKIPPED。
sonar-scanner
不可用
SKIPPED。不影响判定结果。
缺少
sonar-project.properties
SKIPPED。不阻塞判定结果。
Sonar扫描出现网络错误FAIL并标注网络原因。不阻塞判定结果。
某检查项执行时间超过10分钟继续执行但告知用户;允许用户取消。
工作区未干净不阻塞。在报告标题中添加说明。
tsc
失败
立即终止,快速失败。标记检查项2–5为
— (未执行)

Anti-patterns

反模式

  • Corregir el código reportado como erróneo — el skill solo audita.
  • Ejecutar herramientas con
    --fix
    o
    --write
    .
  • Modificar
    package.json
    para añadir scripts faltantes.
  • 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
    git stash
    o
    git clean
    antes de ejecutar.
  • Instalar dependencias faltantes — reportar SKIPPED y dejar al usuario.
  • Continuar a
    git commit
    , push o merge tras un veredicto Apto sin instrucción explícita.
  • Ejecutar el skill en un repo sin
    package.json
    .

  • 修改被报告为错误的代码——本技能仅作审计。
  • 使用
    --fix
    --write
    参数执行工具。
  • 修改
    package.json
    添加缺失的脚本。
  • 将因实际错误失败的检查项标记为SKIPPED。
  • 当某阻塞性检查因配置缺失被SKIPPED时,判定为通过——此类情况应标记为未完成。
  • tsc失败后继续执行后续检查。
  • 截断错误但未标注
    … 及N个更多
  • 除非用户明确要求,否则并行执行检查项。
  • 未通过锁文件检测就假设运行器。
  • 执行前切换分支、执行
    git stash
    git clean
  • 安装缺失的依赖——标记为SKIPPED并交由用户处理。
  • 判定结果为通过后,未获用户明确指令就执行
    git commit
    、push或merge。
  • 在无
    package.json
    的仓库中执行本技能。

Notas

说明

Parseo por herramienta

工具解析规则

tsc — patrón:
<archivo>(<línea>,<columna>): error TS<código>: <mensaje>
. Conteo: líneas con
: error TS
. Código 0 y sin líneas con
error TS
→ OK.
eslint — preferir
--format json
en fallback. Si por script: parsear línea final
X problems (Y errors, Z warnings)
. Errors > 0 → FAIL. Errors = 0 y warnings > 0 → OK con detalle informativo.
tests (Vitest/Jest) — Vitest:
Test Files X passed | Y failed
/
Tests P passed | F failed | S skipped
. Jest:
Tests: P passed, F failed, S skipped, T total
. Código 0 → OK.
build — estado por código de salida. Si usa
tsc -p tsconfig.build.json
, parsear con el mismo patrón de tsc. Vite/esbuild/Rollup: capturar bloque final de error.
sonar — éxito: código 0 y log contiene
EXECUTION SUCCESS
. Capturar URL del dashboard si aparece (
ANALYSIS SUCCESSFUL, you can find the results at: <url>
).
tsc — 匹配模式:
<文件>(<行号>,<列号>): error TS<代码>: <信息>
。统计:包含
: error TS
的行数。退出码为0且无
error TS
行 → OK。
eslint — 回退命令优先使用
--format json
。若使用项目脚本:解析最终行
X problems (Y errors, Z warnings)
。错误数>0 → FAIL。错误数=0且警告数>0 → OK并显示详细提示信息。
测试(Vitest/Jest) — Vitest:
Test Files X passed | Y failed
/
Tests P passed | F failed | S skipped
。Jest:
Tests: P passed, F failed, S skipped, T total
。退出码为0 → OK。
构建 — 根据退出码判断状态。若使用
tsc -p tsconfig.build.json
,则按tsc的规则解析错误。Vite/esbuild/Rollup:捕获最终错误块。
Sonar扫描 — 成功:退出码为0且日志包含
EXECUTION SUCCESS
。若出现仪表盘地址则捕获(
ANALYSIS 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)
preferred language
en
.agents/MEMORY.md
; (2) idioma del turno del usuario; (3) preguntar y persistir. Los mensajes de error originales de las herramientas no se traducen.
遵循优先级:(1)
.agents/MEMORY.md
中的
preferred language
;(2) 用户当前会话的语言;(3) 询问用户并保存设置。工具的原始错误信息不翻译。