# Code checker

Binário `ardumaker check`: regras do padrão da ArduMaker sobre o repositório, hooks de Git e saída JSON para CI e agentes de IA.

Fonte: https://ardumaker.com/pt/docs/code-checker/

- Categoria: Inteligência artificial e agentes
- Estado: Disponível
- Requisitos: Uma conta ArduMaker (o programa não tem modo anónimo); Linux x86-64 ou Windows de 64 bits (não há binário para macOS); Um repositório Git para os hooks
- Ferramentas MCP: Sem ferramentas MCP: usa-se a partir do painel.

## O que permite fazer?

- Rever um repositório contra as regras do padrão da ArduMaker (198 na versão atual), agrupadas em famílias com identificador (`FMT`, `SEC`, `REPO`, `LANG`, `CMT`, `PY`…).
- Corrigir só o que se corrige sozinho (`ardumaker fix`).
- Instalar hooks de Git que rejeitam um commit ou um push com erros: `pre-commit`, `commit-msg` e `pre-push`.
- Obter o resultado em JSON para CI e para agentes, e as regras completas em um único Markdown para um agente (`ardumaker rules --agents`).
- Pôr e manter o cabeçalho de autoria em cada arquivo.

## Quando convém usar?

- Antes de cada commit (os hooks fazem-no sozinhos).
- Em CI, com `--strict` e `--json`, como modo de entrega.
- Quando um agente de IA escreve código: dá-lhe as regras e uma forma objetiva de as verificar.

## Como funciona na ArduMaker?

### Instalar e entrar

1. Descarrega-se o binário da página de transferências: um arquivo nativo por sistema (`ardumaker-<versão>-linux-x86_64` ou `ardumaker-<versão>-windows-amd64.exe`), com o seu SHA-256 publicado.
2. `ardumaker login` abre o navegador; sem navegador (SSH, contêineres, agentes), `ardumaker login --device` imprime um link e um código curto que se aprovam na web. A sessão renova-se sozinha enquanto for usada.
3. Em CI não há terminal: com `ARDUMAKER_EMAIL` e `ARDUMAKER_PASSWORD` cada comando entra sozinho; a senha não é guardada, só os tokens.
4. `ardumaker init` prepara a pasta: Git, `.gitignore`, cabeçalhos e hooks, e deixa o binário em `.ardumaker/` para que quem clonar possa correr as revisões.

### Rever

```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` não escreve nada, com uma exceção: com `--staged` põe o cabeçalho da ArduMaker nos arquivos que vão para o commit e volta a adicioná-los (`--no-headers` só o informa).
- Cada achado traz o identificador da regra e o valor medido.
- Códigos de saída: `0` limpo, `1` erros (ou avisos com `--strict`), `2` uso incorreto.
- Reutiliza a última execução para arquivos sem alterações; `--no-cache` revê tudo outra vez.

### Ajustar o padrão

- Por projeto, em `.ardumaker/.ardumaker.conf`: por exemplo `{"rules": {"off": ["CMT-002"]}}`, com o motivo escrito ao lado.
- Em uma linha, com motivo obrigatório: `#` + `estandar: ignore` + a regra (`PY-002`) + ` - <motivo>`.
- Por execução: `--only` e `--skip`.
- Um hook salta-se uma vez com `git commit --no-verify`.

## O que muda realmente?

- `check` não altera arquivos (salvo cabeçalhos com `--staged`); `fix` escreve as correções automáticas.
- `hooks --install` acrescenta os hooks em `.git/hooks`; nunca substitui o hook de outra ferramenta sem `--force`.
- `init` cria `.ardumaker/` com o binário e a configuração, e deixa-o no repositório.
- Na conta: uma sessão de tipo binário por máquina, visível e revogável a partir de `/me`.

## O que se pode afirmar com o resultado

O resultado do `check` é uma medição contra regras concretas, não um juízo sobre o código. Um agente que o comunica a uma pessoa tem de dizer exatamente isso:

| Pode afirmar-se | Não pode afirmar-se |
| --- | --- |
| “`ardumaker check --strict` terminou com código 0 nesta versão e com esta configuração” | “O código está correto” ou “funciona”: o checker não executa o programa |
| “Há N achados: SEC-xxx em tal arquivo e linha, com tal valor medido” | “Os testes passam”: pode exigir que um teste exista, não que passe |
| “As famílias revistas foram estas” (se se usou `--only` ou `--skip`) | “Não há vulnerabilidades”: as regras de segurança procuram padrões (segredos, logs sensíveis, configurações perigosas), não auditam |
| “Com `--staged`, o que vai neste commit cumpre” | “O repositório inteiro cumpre”, se só se reviu o preparado ou um intervalo |
| “Estas regras estão desligadas ou excecionadas, com estes motivos” | “A arquitetura é a adequada”: não substitui o desenho nem a revisão de uma pessoa |

> **INFO:** Sem `--strict`, um resultado limpo pode ter avisos. Um resultado reutilizado da cache reflete a execução anterior para os arquivos sem alterações.

## Esquema

**Um commit com os hooks instalados**

```text
git commit (dispara o pre-commit)
  ↓
ardumaker check --staged (regras sobre o preparado; põe cabeçalhos)
  ↓
commit-msg (revê a mensagem do commit)
  ↓
pre-push (revê antes de enviar)
  ↓
Resultado (código 0 segue; código 1 rejeita)
```

## Resultado esperado

- Com `--json`, o resultado sai como um único objeto JSON no stdout e tudo o resto pelo stderr: `ardumaker check --json | jq` funciona sem filtrar nada.
- `ardumaker version` diz que build corre; `ardumaker update` procura e instala uma versão nova, comparando tamanho e SHA-256 antes de substituir.
- Se o programa falhar por dentro, envia um relatório de falha à ArduMaker e mostra o número do relatório para o citar.

## Erros e resolução

| Situação | Causa | O que fazer |
| --- | --- | --- |
| Código de saída 1 | Há erros (ou avisos com `--strict`) | Corrigir ou correr `ardumaker fix` para o que se corrige sozinho |
| Código de saída 2 | Uso incorreto do comando | Rever `ardumaker check --help` |
| Pede para iniciar sessão | Todo o comando trabalha em nome de uma conta | `ardumaker login` ou `login --device` |
| O hook não é instalado | Já existe um hook de outra ferramenta | Rever `ardumaker hooks --status`; usar `--force` só conscientemente |
| Uma exceção em linha não é aceite | Falta o motivo | Escrever `- <motivo>` depois do identificador |

## Relação com MCP

Não há ferramentas MCP para o checker: corre como binário na máquina onde está o código. Um agente usa-o a partir do seu terminal com `ardumaker check --json` e `ardumaker rules --agents`. Mais informação em [/checker](https://ardumaker.com/pt/checker).

## Funcionalidades relacionadas

- [Servidor MCP](https://ardumaker.com/pt/docs/servidor-mcp/)
- [Deploy do GitHub](https://ardumaker.com/pt/docs/github-deploy/)
- [Sessões e dispositivos](https://ardumaker.com/pt/docs/sesiones-y-dispositivos/)
