๐ Gates de qualidade automatizados
Os gates de qualidade sao verificacoes automaticas que rodam a cada task completada pelo swarm, antes que o resultado seja aceito como "feito". Em vez de depender de revisao humana para cada mudanca, o swarm aplica uma bateria de verificacoes programaticas que detectam problemas em segundos. O conceito vem de CI/CD tradicional, mas adaptado para o contexto agentico onde o "desenvolvedor" e uma IA que frequentemente produz codigo sintaticamente correto mas semanticamente problematico.
O sistema de 6 gates implementado no opencode-swarm processa cada task em sequencia, e qualquer falha bloqueia a entrega: (1) Syntax Check via Tree-sitter para 9+ linguagens, (2) Placeholder Scan para detectar TODOs e stubs, (3) SAST para vulnerabilidades de seguranca, (4) SBOM para rastreamento de dependencias, (5) Build Check para garantir que compila/roda e (6) Quality Budget para metricas de manutenibilidade. Juntos, esses gates formam uma rede de seguranca que impede codigo ruim de chegar a producao.
๐ก Os 6 Gates
- 1. Syntax Check (Tree-sitter): Parse do AST em 9+ linguagens. Detecta erros de sintaxe que o LLM gerou โ surpreendentemente comum com funcoes incompletas
- 2. Placeholder Scan: Regex + AST para detectar TODO, FIXME, funcoes vazias, return placeholder, "implement this" โ nada incompleto passa
- 3. SAST (Security): Analise estatica para OWASP Top 10 โ injection, XSS, secrets, path traversal detectados automaticamente
- 4. SBOM (Dependencies): Inventario de dependencias com verificacao de CVEs conhecidos e conformidade de licencas
- 5. Build Check: Compilacao/transpilacao para garantir que o codigo e executavel โ nao apenas sintaticamente valido
- 6. Quality Budget: Limites de complexidade ciclomatica, tamanho de funcao e acoplamento โ codigo mantivel a longo prazo
๐ Impacto dos gates
- pre_check_batch: Todos os 6 gates rodam em batch antes de aceitar qualquer task โ latencia total < 5 segundos para projetos medios
- Reducao de 80% em bugs de producao: Gates detectam problemas antes que cheguem ao reviewer humano ou ao deploy
- Feedback instantaneo: O agente recebe feedback especifico ("funcao X na linha Y tem complexidade 15, maximo permitido e 10") e pode corrigir imediatamente
- Zero falsos negativos: Gates programaticos nao "esquecem" de verificar โ toda task passa por todas as verificacoes, sempre
๐ก๏ธ SAST: analise de seguranca estatica
Codigo gerado por IA tem um problema de seguranca documentado: LLMs aprendem de repositorios publicos que frequentemente contem vulnerabilidades conhecidas. Estudos mostram que codigo gerado por IA e 40% mais propenso a conter vulnerabilidades que codigo escrito por humanos experientes. O SAST (Static Application Security Testing) resolve isso analisando o codigo antes da execucao, procurando padroes que correspondem as vulnerabilidades mais comuns โ os OWASP Top 10.
O gate SAST no swarm verifica automaticamente: SQL Injection (concatenacao de strings em queries), XSS (output nao sanitizado em templates), SSRF (URLs construidas a partir de input do usuario), Path Traversal (fs.readFile com paths nao validados), Hardcoded Secrets (API keys, senhas e tokens no codigo-fonte) e Insecure Deserialization (eval, JSON.parse sem validacao). Cada vulnerabilidade detectada bloqueia a entrega e o agente recebe instrucoes especificas de como corrigir.
๐ก OWASP Top 10 para Codigo IA
- โข A01 - Injection: SQL, NoSQL, LDAP, OS command injection โ LLMs frequentemente geram queries concatenadas em vez de parametrizadas
- โข A02 - Broken Auth: Tokens sem expiracao, sessoes nao invalidadas, passwords fracas โ IA gera auth "funcional" mas insegura
- โข A03 - Sensitive Data: API keys hardcoded, logs com dados pessoais, transmissao sem TLS โ erros classicos de IA
- โข A07 - XSS: Output de usuario renderizado sem sanitizacao โ innerHTML, dangerouslySetInnerHTML, template strings nao escapadas
๐จ Vulnerabilidades reais em codigo IA
- Caso 1: LLM gerou endpoint de login com query SQL concatenada โ permitia login sem senha via injection
- Caso 2: Agente salvou API key da OpenAI diretamente no arquivo de configuracao commiteado no Git
- Caso 3: Funcao de upload aceitava qualquer tipo de arquivo sem validacao โ path traversal permitia sobrescrever arquivos do sistema
- Caso 4: Endpoint retornava dados completos do usuario incluindo hash de senha โ ausencia total de filtragem de campos
๐ฆ SBOM: rastreamento de dependencias
O SBOM (Software Bill of Materials) e o inventario completo de todas as dependencias do projeto โ diretas e transitivas โ com suas versoes, licencas e vulnerabilidades conhecidas. Em 2026, supply chain attacks sao a maior ameaca de seguranca em software: atacantes comprometem pacotes populares no npm, PyPI ou Maven, e todo projeto que depende daquele pacote fica vulneravel automaticamente.
Quando um agente adiciona uma dependencia (npm install, pip install), o gate SBOM automaticamente verifica: a versao tem CVEs conhecidos? A licenca e compativel com o projeto? O pacote e mantido ativamente (ultimo commit, numero de maintainers)? Pacotes com vulnerabilidades criticas bloqueiam a entrega. Pacotes com licencas incompativeis geram alerta. Pacotes abandonados (sem atualizacao em 12+ meses) geram warning para revisao humana.
๐ก Componentes do SBOM
- โข Dependency Tracking: Inventario de todos os pacotes (diretos + transitivos) com versoes exatas โ lockfile como source of truth
- โข CVE Checking: Verificacao contra bancos de vulnerabilidades (NVD, GitHub Advisory, Snyk DB) โ bloqueio automatico para severity Critical/High
- โข License Compliance: Verificacao de compatibilidade de licencas โ GPL em projeto MIT, licencas comerciais nao pagas, etc.
- โข Health Score: Avaliacao da saude do pacote โ maintainers, frequencia de atualizacao, presenca de testes, community size
โ ๏ธ Supply Chain Attacks em 2026
- Typosquatting: Pacotes com nomes similares a populares (lodas em vez de lodash) โ IA e particularmente vulneravel a isso
- Dependency Confusion: Pacotes privados sobrescritos por pacotes publicos maliciosos com mesmo nome
- Maintainer Compromise: Conta de maintainer comprometida injeta malware em atualizacao de pacote legitimo
- Relevancia para IA: LLMs podem sugerir pacotes inexistentes (alucinacao) que atacantes registram antecipadamente
๐งน Anti-slop: detectando codigo lixo
"AI Slop" e o termo para codigo gerado por IA que parece correto na superficie mas esconde problemas graves. O codigo compila, os nomes de variaveis sao bons, os comentarios parecem profissionais โ mas por baixo, funcoes de 300 linhas fazem tudo ("God Functions"), testes verificam strings de prompt em vez de comportamento real ("Testing Theater"), e logica complexa e duplicada em 5 lugares diferentes. O anti-slop review e o gate que detecta esses padroes.
O caso mais ilustrativo e o testing theater: em um projeto real, um agente gerou 268 assertions que testavam se o texto do system prompt continha palavras especificas ("Voce e um agente de revisao que..."). Os testes passavam com 100% de cobertura, mas se voce mudasse o prompt inteiro, os testes continuavam passando โ porque nenhum teste verificava comportamento real. O anti-slop review detecta este padrao (assertions que testam strings fixas em vez de outputs funcionais) e bloqueia a entrega.
๐ก Padroes de AI Slop
- โข God Functions: Funcoes com 100+ linhas, 10+ parametros, complexidade ciclomatica > 15 โ fazem tudo em vez de delegar
- โข Testing Theater: Testes que verificam implementacao (strings, nomes internos) em vez de comportamento (input โ output esperado)
- โข Copy-Paste Coding: Blocos de codigo identicos ou quase identicos em multiplos lugares โ violacao do DRY principle
- โข Hollow Abstractions: Classes e interfaces que adicionam camadas sem valor โ wrapper de wrapper de wrapper
๐จ Caso Real: 268 Assertions Falsas
Em um projeto open-source real, um agente de IA gerou um suite de testes com 268 assertions. A analise revelou:
- โ95% das assertions verificavam que strings de prompt continham palavras especificas
- โNenhuma assertion testava output real de funcoes com inputs variados
- โCobertura de codigo era 92% โ numeros "perfeitos" que escondiam testes inuteis
- โMutation testing revelou que 0% das mutacoes eram detectadas โ os testes nao pegavam nenhum bug real
๐ Placeholder scan: nada fica incompleto
Agentes de IA tem uma tendencia sutil e perigosa: quando encontram uma parte dificil do codigo, frequentemente deixam um placeholder que parece codigo real mas nao faz nada. Uma funcao que retorna return [] // TODO: implement query, um bloco try/catch com catch vazio, um import que nunca e usado, um handler que so faz console.log. Para quem olha rapidamente, parece completo. Para quem executa, falha silenciosamente.
O placeholder scan combina regex patterns (detectar TODO, FIXME, HACK, XXX, "implement", "placeholder") com analise AST (detectar funcoes com body vazio, catch blocks vazios, returns sem logica, variaveis declaradas mas nunca usadas). O resultado e um report que lista cada placeholder encontrado com localizacao exata e contexto. Se qualquer placeholder e detectado, a task nao pode ser marcada como "done" โ o agente deve completar ou justificar explicitamente por que o placeholder e intencional.
๐ก Tipos de Placeholders
- โข Texto explicito: TODO, FIXME, HACK, XXX, "implement this", "add logic here" โ detectaveis por regex simples
- โข Funcoes vazias: Funcoes declaradas com body vazio ou que so retornam null/undefined/[] sem logica
- โข Error swallowing: try/catch com catch vazio ou que so faz console.log โ erros sao silenciados
- โข Commented code: Blocos grandes de codigo comentado que indicam implementacao incompleta ou alternativas nao resolvidas
๐ Quality budget: metricas de manutenibilidade
O quality budget define limites numericos para metricas de qualidade de codigo que o swarm deve respeitar. Em vez de instrucoes vagas ("escreva codigo limpo"), o swarm recebe limites concretos: funcoes com no maximo 50 linhas, complexidade ciclomatica maxima de 10, no maximo 5 parametros por funcao, acoplamento aferente maximo de 10. Quando o agente gera codigo que excede esses limites, o gate bloqueia e fornece feedback especifico.
As metricas mais importantes sao: Complexidade Ciclomatica (numero de caminhos independentes no codigo โ quanto maior, mais dificil de testar e manter), Function Length (funcoes longas indicam violacao de Single Responsibility), Coupling (quanto um modulo depende de outros โ alto acoplamento dificulta mudancas) e Cognitive Complexity (quao dificil e para um humano entender o codigo). O budget e calibrado por linguagem e contexto โ uma funcao de configuracao pode ser mais longa que uma funcao de logica de negocio.
๐ก Metricas do Quality Budget
- โข Cyclomatic Complexity: Max 10 por funcao. Cada if/for/switch/catch adiciona 1. Acima de 10 = dificil de testar e manter
- โข Function Length: Max 50 linhas (configuravel). Funcoes maiores devem ser decompostas em subfuncoes com responsabilidade clara
- โข Parameter Count: Max 5 parametros. Mais de 5 indica que a funcao faz coisas demais ou precisa de um objeto de configuracao
- โข Coupling Metrics: Aferent coupling (quantos modulos dependem deste) e eferent coupling (de quantos modulos este depende) โ equilibrio e chave
๐ Exemplo de budget
- Funcao processOrder(): Complexidade 12 (max 10) โ BLOCKED. Feedback: "Decomponha validacao, calculo e persistencia em funcoes separadas"
- Arquivo api-handler.ts: 380 linhas (max 300) โ WARNING. Sugestao: "Extraia rotas de autenticacao para auth-routes.ts"
- Classe UserService: 8 dependencias injetadas (max 5) โ BLOCKED. "Service faz demais โ separe em UserAuthService e UserProfileService"
- Modulo utils.ts: 15 funcoes exportadas (max 10) โ WARNING. "Agrupe funcoes por dominio em modulos especificos"
๐ Resumo do Modulo
Proximo Modulo:
3.5 - Projeto 3: Pesquisa Profunda Multiagente