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)ouexpect(true).toBe(true). - Valores esperados alterados para que o teste passe.
catchque 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.
- O Yuli escreve
.githooks/pre-commit,.githooks/commit-msge.githooks/pre-push. - 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.