# Code checker

Binario `ardumaker check`: reglas del estándar de ArduMaker sobre el repositorio, hooks de Git y salida JSON para CI y agentes de IA.

Fuente: https://ardumaker.com/docs/code-checker/

- Categoría: Inteligencia artificial y agentes
- Estado: Disponible
- Requisitos: Una cuenta de ArduMaker (el programa no tiene modo anónimo); Linux x86-64 o Windows de 64 bits (no hay binario para macOS); Un repositorio Git para los hooks
- Herramientas MCP: Sin herramientas MCP: se usa desde el panel.

## ¿Qué permite hacer?

- Revisar un repositorio contra las reglas del estándar de ArduMaker (198 en la versión actual), agrupadas en familias con identificador (`FMT`, `SEC`, `REPO`, `LANG`, `CMT`, `PY`…).
- Corregir solo lo que se arregla solo (`ardumaker fix`).
- Instalar hooks de Git que rechazan un commit o un push con errores: `pre-commit`, `commit-msg` y `pre-push`.
- Obtener el resultado en JSON para CI y para agentes, y las reglas completas en un único Markdown para un agente (`ardumaker rules --agents`).
- Poner y mantener el encabezado de autoría en cada archivo.

## ¿Cuándo conviene usarlo?

- Antes de cada commit (los hooks lo hacen solos).
- En CI, con `--strict` y `--json`, como modo de entrega.
- Cuando un agente de IA escribe código: le da las reglas y una forma objetiva de comprobarlas.

## ¿Cómo funciona en ArduMaker?

### Instalar y entrar

1. Se descarga el binario de la página de descargas: un archivo nativo por sistema (`ardumaker-<versión>-linux-x86_64` o `ardumaker-<versión>-windows-amd64.exe`), con su SHA-256 publicado.
2. `ardumaker login` abre el navegador; sin navegador (SSH, contenedores, agentes), `ardumaker login --device` imprime un enlace y un código corto que se aprueban en la web. La sesión se renueva sola mientras se use.
3. En CI no hay terminal: con `ARDUMAKER_EMAIL` y `ARDUMAKER_PASSWORD` cada comando entra solo; la contraseña no se guarda, solo los tokens.
4. `ardumaker init` prepara la carpeta: Git, `.gitignore`, encabezados y hooks, y deja el binario en `.ardumaker/` para que quien clone pueda correr las revisiones.

### Revisar

```bash
ardumaker check                       # todo el proyecto
ardumaker check --staged              # solo lo que va al commit
ardumaker check --strict --json       # avisos cuentan como error; JSON a stdout
ardumaker check --only SEC,REPO       # solo esas familias
ardumaker check --range origin/main..HEAD
ardumaker rules FMT-003               # qué mide una regla y cómo exceptuarla
```

- `check` no escribe nada, con una excepción: con `--staged` pone el encabezado de ArduMaker en los archivos que van al commit y los vuelve a agregar (`--no-headers` solo lo informa).
- Cada hallazgo trae el identificador de la regla y el valor medido.
- Códigos de salida: `0` limpio, `1` errores (o avisos con `--strict`), `2` uso incorrecto.
- Reusa la última corrida para archivos sin cambios; `--no-cache` revisa todo otra vez.

### Ajustar el estándar

- Por proyecto, en `.ardumaker/.ardumaker.conf`: por ejemplo `{"rules": {"off": ["CMT-002"]}}`, con el motivo escrito al lado.
- En una línea, con motivo obligatorio: `#` + `estandar: ignore` + la regla (`PY-002`) + ` - <motivo>`.
- Por corrida: `--only` y `--skip`.
- Un hook se saltea una vez con `git commit --no-verify`.

## ¿Qué cambia realmente?

- `check` no cambia archivos (salvo encabezados con `--staged`); `fix` sí escribe las correcciones automáticas.
- `hooks --install` agrega los hooks en `.git/hooks`; nunca pisa el hook de otra herramienta sin `--force`.
- `init` crea `.ardumaker/` con el binario y la configuración, y lo deja en el repositorio.
- En la cuenta: una sesión de tipo binario por equipo, visible y revocable desde `/me`.

## Qué se puede afirmar con el resultado

El resultado de `check` es una medición contra reglas concretas, no un juicio sobre el código. Un agente que lo informa a una persona tiene que decir exactamente eso:

| Se puede afirmar | No se puede afirmar |
| --- | --- |
| «`ardumaker check --strict` terminó con código 0 en esta versión y con esta configuración» | «El código es correcto» o «funciona»: el checker no ejecuta el programa |
| «Hay N hallazgos: SEC-xxx en tal archivo y línea, con tal valor medido» | «Las pruebas pasan»: puede exigir que una prueba exista, no que pase |
| «Las familias revisadas fueron estas» (si se usó `--only` o `--skip`) | «No hay vulnerabilidades»: las reglas de seguridad buscan patrones (secretos, logs sensibles, configuraciones peligrosas), no auditan |
| «Con `--staged`, lo que va en este commit cumple» | «El repositorio entero cumple», si solo se revisó lo preparado o un rango |
| «Estas reglas están apagadas o exceptuadas, con estos motivos» | «La arquitectura es la adecuada»: no reemplaza el diseño ni la revisión de una persona |

> **INFO:** Sin `--strict`, un resultado limpio puede tener avisos. Un resultado reusado de la caché refleja la corrida anterior para los archivos sin cambios.

## Esquema

**Un commit con los hooks instalados**

```text
git commit (dispara pre-commit)
  ↓
ardumaker check --staged (reglas sobre lo preparado; pone encabezados)
  ↓
commit-msg (revisa el mensaje del commit)
  ↓
pre-push (revisa antes de subir)
  ↓
Resultado (código 0 sigue; código 1 rechaza)
```

## Resultado esperado

- Con `--json`, el resultado sale como un solo objeto JSON en stdout y todo lo demás por stderr: `ardumaker check --json | jq` funciona sin filtrar nada.
- `ardumaker version` dice qué build corre; `ardumaker update` busca e instala una versión nueva, comparando tamaño y SHA-256 antes de reemplazar.
- Si el programa falla por dentro, envía un informe de falla a ArduMaker y muestra el número de reporte para citarlo.

## Errores y resolución

| Situación | Causa | Qué hacer |
| --- | --- | --- |
| Código de salida 1 | Hay errores (o avisos con `--strict`) | Corregir o correr `ardumaker fix` para lo que se arregla solo |
| Código de salida 2 | Uso incorrecto del comando | Revisar `ardumaker check --help` |
| Pide iniciar sesión | Todo comando trabaja a nombre de una cuenta | `ardumaker login` o `login --device` |
| El hook no se instala | Ya hay un hook de otra herramienta | Revisar `ardumaker hooks --status`; usar `--force` solo a conciencia |
| Una excepción en línea no se acepta | Falta el motivo | Escribir `- <motivo>` después del identificador |

## Relación con MCP

No hay herramientas MCP para el checker: corre en la máquina donde está el código, como binario. Un agente lo usa desde su terminal con `ardumaker check --json` y `ardumaker rules --agents`. Más información en [/checker](https://ardumaker.com/checker).

## Funciones relacionadas

- [Servidor MCP](https://ardumaker.com/docs/servidor-mcp/)
- [Deploy desde GitHub](https://ardumaker.com/docs/github-deploy/)
- [Sesiones y dispositivos](https://ardumaker.com/docs/sesiones-y-dispositivos/)
