Revisão de código¶
O AurumCode v2.0.0 é uma etapa do pipeline de CI: em todo pull request, depois que os testes e os tutoriais passam, ele confere a mudança contra as regras do próprio projeto. O veredito é o status aurumcode/policy-gate, que reprova com um achado error e é obrigatório para o merge no main. Ele publica o parecer como comentário no pull request e nunca aprova um pull request; o merge é decisão de uma pessoa.
Como está ligado¶
| Arquivo | Papel |
|---|---|
.github/workflows/ci.yml, job aurumcode |
Chama o workflow reutilizável Mpaape/AurumCode/.github/workflows/review.yml@v2.0.0 depois de test e tutorials |
.aurumcode/config.yml |
Idioma, publicação, gate, scanners, deliberação e exceções |
.aurumcode/prompt.md |
Contexto do projeto enviado ao modelo |
.aurumcode/skills/<nome>/SKILL.md |
Regras do projeto; cada seção ## vira uma regra citável |
A configuração e as skills são lidas do branch base do PR: uma regra nova vale para PRs para o dev quando está no dev, e para dev → main quando está no main.
| Job | Faz |
|---|---|
aurumcode |
Revisão pelo modelo, passe determinístico de segurança, gitleaks, Semgrep e go vet; só roda se test e tutorials passaram |
upload-sarif |
Envia o SARIF para a aba Security (code scanning); pulado em PRs de fork |
provider |
Falha fechado: sem LLM_API_KEY e LLM_BASE_URL, marca aurumcode/policy-gate como reprovado |
Secrets e variáveis¶
Os mesmos nomes do repositório do AurumCode. Settings → Secrets and variables → Actions.
| Tipo | Nome | Obrigatório | Valor com a API da Anthropic |
|---|---|---|---|
| Secret | LLM_API_KEY |
Sim | A sua chave da API do Claude |
| Secret | LLM_BASE_URL |
Sim | https://api.anthropic.com/v1 |
| Variável | LLM_PROVIDER |
Não | anthropic |
| Variável | LLM_MODEL |
Depende do provedor | Id do modelo, por exemplo claude-haiku-5-5 |
| Secret | LLM_FALLBACK_1_API_KEY, LLM_FALLBACK_1_BASE_URL |
Não | Provedor reserva |
| Variável | LLM_FALLBACK_1_PROVIDER, LLM_FALLBACK_1_MODEL |
Não | Provedor reserva |
Com a GitHub CLI; gh secret set sem --body pede o valor sem ecoá-lo:
gh secret set LLM_API_KEY -R Mpaape/keyholder-mcp
gh secret set LLM_BASE_URL -R Mpaape/keyholder-mcp --body "https://api.anthropic.com/v1"
gh variable set LLM_PROVIDER -R Mpaape/keyholder-mcp --body "anthropic"
gh variable set LLM_MODEL -R Mpaape/keyholder-mcp --body "claude-haiku-5-5"
Perfis e URLs de provedores: provedores do AurumCode. PRs do Dependabot só recebem Dependabot secrets; para revisá-los, cadastre LLM_API_KEY e LLM_BASE_URL lá também.
Gate¶
| Configuração | Efeito |
|---|---|
gate.fail_on: [error] |
Um achado error do modelo, de uma skill ou de um scanner reprova o check |
gate.inconclusive: block |
Uma revisão que não terminou (provedor fora, scanner falhou) nunca passa |
gitleaks, required: true |
Segredos em qualquer commit do PR, não só na árvore final |
semgrep |
SAST; reprova só em linhas que o PR acrescentou |
govet |
go vet nos pacotes alterados; reprova com um aviso |
O aurumcode/policy-gate é check obrigatório no ruleset do main (.github/rulesets/main.json).
Regras do projeto¶
Id citável: <skill>#<slug do título da seção>, por exemplo security#sec-001. O título da seção traz só o id, e o nome da regra abre o corpo: o AurumCode v2.0.0 põe todos os ids de regra no prompt com um teto fixo de 512 tokens e se recusa a rodar quando ele estoura, então ids longos parariam a revisão. As regras estão em inglês, a língua principal do repositório. As marcadas "Sim" têm severity: error e bloqueiam o merge; as outras são avisos.
security — caminhos ["**"]¶
| Regra | Bloqueia | Em resumo |
|---|---|---|
| SEC-001 A secret value never goes back to the agent | Sim | Nenhum valor de segredo volta ao agente |
| SEC-002 A secret never goes to a log, an error or a file | Sim | Segredo nunca vai para log, erro ou arquivo |
| SEC-003 Execution without a shell | Sim | Execução sem shell |
| SEC-004 Command allow list | Sim | Lista de comandos permitidos |
| SEC-005 The vault token stays out of the child process | Sim | O token do cofre fica fora do processo filho |
| SEC-006 Project scope | Sim | Escopo do projeto |
| SEC-007 Reference validation | Sim | Validação das referências |
| SEC-008 Masking covers all output | Sim | O mascaramento cobre toda a saída |
| SEC-009 Token in memory only | Sim | Token só em memória |
| SEC-010 TLS and vault address | Sim | TLS e endereço do cofre |
| SEC-011 Bounded output and time | Não | Saída e tempo limitados |
| SEC-012 New dependencies are justified | Não | Dependência nova tem justificativa |
| SEC-013 Public repository: nothing internal | Sim | Repositório público: nada interno |
| SEC-014 Examples and tests use fake values only | Sim | Exemplos e testes só com valores falsos |
review — caminhos ["cmd/", "internal/"]¶
| Regra | Bloqueia | Em resumo |
|---|---|---|
| REV-001 Errors are handled and carry context | Sim | Erros são tratados e levam contexto |
| REV-002 New behavior comes with a test | Sim | Comportamento novo vem com teste |
| REV-003 Context is propagated | Não | O context é propagado |
| REV-004 stdout belongs to the MCP protocol | Sim | O stdout é do protocolo MCP |
| REV-005 No panic on a request path | Sim | Sem panic no caminho de uma requisição |
| REV-006 Windows, Linux and macOS | Não | Windows, Linux e macOS |
| REV-007 Messages to the agent are actionable | Não | Mensagens ao agente dizem o que fazer |
| REV-008 Formatted and vetted code | Não | Código formatado e passado no vet |
| REV-009 Docs follow the change | Não | A documentação acompanha a mudança |
solid — caminhos ["cmd/", "internal/"]¶
| Regra | Bloqueia | Em resumo |
|---|---|---|
| SOLID-S One responsibility per package | Não | Uma responsabilidade por pacote |
| SOLID-O Open for extension, closed for modification | Não | Aberto para extensão, fechado para modificação |
| SOLID-L Substitution without surprise | Não | Substituição sem surpresa |
| SOLID-I Small interfaces, defined by the consumer | Não | Interfaces pequenas, definidas por quem consome |
| SOLID-D Depend on abstractions | Sim | Dependa de abstrações |
Para mudar uma regra, edite a seção dela no SKILL.md. Para criar uma, acrescente uma seção ## com id e título; severity: error na primeira linha do corpo a torna bloqueante.
Exceções aprovadas¶
Um falso positivo revisado entra em exceptions no .aurumcode/config.yml, com a regra e o caminho exatos, dono, motivo e validade. Ele deixa de valer sozinho na data.
| Regra | Arquivo | Motivo | Expira |
|---|---|---|---|
analysis/hardcoded-secret |
internal/bao/bao.go |
EnvWrappingToken e EnvToken guardam nomes de variáveis de ambiente, não segredos |
2027-04-13 |
Rodar localmente¶
Com a CLI do AurumCode (Go 1.27 ou a imagem Docker dele), na raiz do repositório:
aurumcode review --base origin/main --seguranca
Limites conhecidos do AurumCode v2.0.0 encontrados na adoção (teto do catálogo de regras, grupo de concorrência reservado, job de SARIF) estão em Mpaape/AurumCode#179.
Sem LLM_API_KEY e LLM_BASE_URL só a análise determinística roda; sem gitleaks e semgrep no PATH esses scanners aparecem como inconclusivos. Veja o início rápido do AurumCode.