Documentação / Qualidade e governança

Gate e Central de Governança

Um único gate aplica o contrato em cada commit, push e pipeline, e a Central de Governança reúne o ciclo de vida completo.

O contrato de qualidade diz o que a equipe exige. O gate faz com que seja cumprido. Ele é um único comando do motor, usado da mesma forma pelos hooks do Git, pela CI, pelo comando yuli-mcp gate e pelos hooks dos agentes. O resultado não depende de quem o invoca.

O comando

agent-engine gate --project <raíz> --stage pre-commit|commit-msg|pre-push|ci \
  [--message-file <archivo>] [--base <revisión>] [--format text|json]

Se você omitir --project, é usada a pasta atual. Uma pasta sem Git sempre passa.

Código de saída Significado
0 Passa.
1 Bloqueado: algum controle falhou.
2 Erro de uso.

O que cada etapa verifica

Etapa O que compara Controles
pre-commit O que está em stage Todos os abaixo.
commit-msg A mensagem do commit Apenas atribuição a IA e exceções.
pre-push Contra @{upstream} (ou origin/HEAD) Todos os abaixo.
ci Contra o branch de destino do PR ou MR (ou HEAD~1) Todos os abaixo.

Os controles

Controle Rótulo no Yuli Resultado
Segredos nas linhas adicionadas Segredos Bloqueia. São informados o tipo e a linha, nunca o valor.
Trapaças nos testes Integridade dos testes Bloqueia se o perfil bloqueia trapaças; caso contrário, avisa.
Tamanho da alteração Tamanho da alteração Bloqueia com aplicação estrita; caso contrário, avisa.
Arquivos protegidos alterados Caminhos protegidos Bloqueia com aplicação estrita; caso contrário, avisa.
Atribuição a uma IA nas mensagens Atribuição a IA Verifica que não haja Co-Authored-By de uma IA.
Exceções vencidas Exceções Avisa. Nunca bloqueia.
Código existente sem testes Rede de segurança Avisa. Nunca bloqueia.

Antitrapaça nos testes

Um agente pressionado para terminar pode “consertar” um teste em vez do código. O Yuli detecta isso.

Nos testes:

  • Asserções removidas ou testes apagados.
  • Testes pulados: @Disabled, @Ignore, .skip(, xit, #[ignore], skips do pytest ou do unittest, t.Skip.
  • Asserções triviais, como assertTrue(true) ou expect(true).toBe(true).
  • Valores esperados alterados para que o teste passe.
  • catch que captura tudo dentro de um teste.

No build e na CI:

  • Cobertura mínima reduzida.
  • Testes pulados no build.
  • Falhas ignoradas, como npm test || true.
  • Script de testes substituído por um vazio.
  • Gate de qualidade desativado ou tarefa de testes desabilitada.

Rede de segurança

Se arquivos de código existentes mudarem sem testes de caracterização ou unitários, o gate avisa: a alteração deve preservar o comportamento. Ele nunca bloqueia o commit.

Instalar os hooks do Git

Na Central de Governança, aba Portões, clique em Instalar hooks.

  1. O Yuli escreve .githooks/pre-commit, .githooks/commit-msg e .githooks/pre-push.
  2. Configura git config --local core.hooksPath .githooks.

O Yuli não instala nada se core.hooksPath já apontar para outra ferramenta (por exemplo, husky) ou se existir um hook que ele não escreveu. Se o motor não estiver disponível, o hook avisa e deixa passar: você nunca fica impedido de fazer commit.

Desinstalar hooks remove a configuração e apaga apenas os scripts do Yuli.

Na CI

Os pipelines gerados por Criar CI incluem a etapa “Portões do contrato”, que executa agent-engine gate --stage ci. Assim, a CI aplica as mesmas regras que a sua equipe local.

A Central de Governança

Abra-a pelo trilho direito (Mais ferramentas → Central de Governança) ou pela paleta de comandos: Abrir a Central de Governança. Ela tem 10 abas.

Aba O que contém
Contrato Criticidade, limites, caminhos protegidos, exceções, camadas, SLO, política de licenças, revisor independente, classificação de dados, orçamentos FinOps e histórico.
Portões Executar o gate para uma etapa, instalar ou desinstalar os hooks e o cartão de CI.
Dados sensíveis Valores ocultados ao sair do computador, campos classificados no código e segredos no histórico do Git.
Análise Requisitos (padrões EARS, ambiguidade, atributos ISO 25010, Gherkin) e glossário.
Design Decisões (ADR), Ameaças (STRIDE), APIs (OpenAPI), C4, SLO e Legado.
Medição Funções de aptidão de arquitetura, LCOM4, acoplamento de alterações, bus factor, registro de dívida, twelve-factor e feature flags.
Testes Testes instáveis e quarentena, mutação, tipos de teste, condições de corrida e carga.
Cadeia de suprimentos Dependências e licenças, SBOM, IaC, contêineres, DAST, procedência (SLSA, cosign), CODEOWNERS e histórico.
Entrega CI, release, rollback, deploy progressivo, runbook, post-mortems, DORA, SPACE, builds e FinOps.
Agentes Contexto, Revisão, Telemetria, Aprendizado, Benchmark e Injeção.

Documentos que ela gera

Documento Caminho
ADR (decisões de arquitetura) docs/architecture/adr/
Modelo de ameaças STRIDE docs/architecture/threat-model.md
Diagramas C4 docs/architecture/c4.md
SBOM docs/reports/sbom.cdx.json e docs/reports/sbom.spdx.json
Runbook docs/operations/runbook.md
Post-mortems docs/operations/postmortems/

DORA

A aba Entrega calcula as quatro métricas DORA: frequência de deploy, lead time, taxa de falhas em alterações e MTTR, com as faixas Elite, Alta, Média e Baixa. Ela usa os deploys registrados ou a CI. O Yuli não enxerga um APM de produção.

Revisão independente

Um modelo de outra família revisa a alteração. Nunca é usada a mesma família do modelo que a escreveu. Se nenhum estiver configurado, ela é indicada como indisponível. É obrigatória nos perfis Regulada e Segurança crítica.

Contexto para todos os agentes

Em Agentes → Contexto, a seção “Contexto para todos os agentes” escreve as mesmas regras para cada ferramenta:

Destino Arquivo
Claude Code (CLAUDE.md) .claude/CLAUDE.md
AGENTS.md (Codex e outros) AGENTS.md
Kiro (.kiro/steering) .kiro/steering/yuli.md
Antigravity .agent/rules/yuli.md
Cursor (.cursor/rules) .cursor/rules/yuli.mdc
GitHub Copilot .github/copilot-instructions.md
Gemini (GEMINI.md) GEMINI.md

O conteúdo vai em um bloco gerenciado; o que você escrever fora dele é respeitado. Por padrão, os arquivos ficam fora do Git; ative isso com Versionar no Git. Cada destino mostra o seu estado: Atualizado, Desatualizado, Não existe ou Editado manualmente.

Regras aprendidas

Quando um mesmo achado aparece 3 vezes ou mais em pelo menos 2 tarefas dentro de 30 dias, ele se torna uma regra em .ai/rules/learned.md. Você pode rejeitá-la em Agentes → Aprendizado; ela só volta a ser proposta se a sua evidência dobrar.

Limites honestos

  • DAST (OWASP ZAP), a varredura de contêineres (Trivy ou Grype) e a assinatura (cosign) só são executados se estiverem instalados, e sempre com confirmação. Se faltarem, o Yuli informa e não simula o resultado.
  • As regras preventivas e as de IaC são padrões sobre o texto. Cada achado traz o seu arquivo e a sua linha para que uma pessoa o confirme.