release-readiness-triage-mcp
Agrega falhas de CI e emite vereditos de release GO/NO_GO
Documentação
🚦 release-readiness-triage-mcp
Pare de ler logs de CI. Comece a receber veredictos.
Servidor MCP que agrega falhas de testes, cruza o histórico de flakiness e gera uma decisão de release GO / CONDITIONAL_GO / NO_GO / INVESTIGATE — para que seu agente de IA possa fazer a triagem de uma execução de CI quebrada em segundos, em vez de pedir que você leia 3000 linhas de logs.
🤔 O problema
Em qualquer codebase real, o CI sempre tem algo falhando. A pergunta difícil não é "existem falhas?" — é "essas falhas são regressões reais, ou apenas o ruído habitual?"
Responder a isso exige correlacionar três sinais ao mesmo tempo:
- 🔍 Assinaturas de erro — é a mesma falha repetida 12 vezes, ou 12 problemas diferentes?
- 📊 Histórico de flakiness — esse teste é conhecido por ser instável?
- 🔗 Mudanças de código — o teste que falha está realmente relacionado ao que mudou?
Um agente de IA não consegue fazer isso sem ferramentas estruturadas. Logs de CI brutos têm milhares de linhas. Bancos de dados de flakiness são externos. O mapeamento código→teste exige análise de AST. Sem este MCP, o agente apenas adivinha.
🛠️ Ferramentas
aggregate_suite_failures
Agrupa falhas por assinatura de erro normalizada, deduplica erros repetidos e categoriza como assertion / timeout / network / crash. Passe customInfraPatterns para erros específicos de nuvem.
cross_reference_flakiness
Pontua cada falha contra seu histórico de flakiness: KNOWN FLAKY, MILDLY FLAKY ou NO HISTORY.
correlate_code_changes
Corresponde arquivos alterados a testes que falham. Funciona de forma autônoma ou com listas de testes afetados pré-computadas do ast-impact-mapper-mcp.
generate_release_recommendation
A etapa final. Gera um veredicto ponderado por risco, com pontuação de confiança e detalhamento completo. Suporta format: "markdown" para comentários em PRs do GitHub e Slack.
Níveis de veredicto:
NO_GO— regressão em um domínio crítico (payment,auth,billing,checkout,security)CONDITIONAL_GO— regressão em um domínio de risco baixo/médio (analytics,docs,admin); revise antes de liberarGO— todas as falhas são conhecidas como flaky ou ruído de infraestruturaINVESTIGATE— há incógnitas demais para decidir
A saída inclui:
aggregate_risk_score— 0,0–1,0, união de probabilidade em todas as contribuições de risco de regressãofailing_tests_analysis[]— detalhamento por regressão comdomain,severity(HIGH/MEDIUM/LOW),risk_contribution,blast_radius
detect_temporal_failure_patterns
Analisa falhas históricas com timestamps para identificar artefatos cronométricos — falhas que só aparecem na mesma hora UTC, dia da semana, dia do mês, ou durante transições de horário de verão. Quando um padrão é encontrado, a falha é um artefato de tempo, não uma regressão de código.
A saída inclui:
temporal_pattern_detected— booleanoclusters[]— por teste:pattern_type(hourly | daily | monthly | timezone_shift),cluster_times,confidence_score
analyze_rollback_readiness
Escaneia um repositório em busca de arquivos de migração versionados (Flyway V*.sql, Prisma migration.sql, Liquibase XML/YAML) e classifica cada operação como aditiva (segura para rollback) ou destrutiva (somente correção para frente).
Operações destrutivas detectadas: DROP TABLE, DROP COLUMN, ALTER COLUMN TYPE, MODIFY COLUMN, TRUNCATE
A saída inclui:
rollback_eligible— booleanoblocking_migrations[]— cada um comfile,line,operation,reasondeployment_strategy—standard | forward_fix_only
🧪 Como é na prática
5 falhas no CI. O que é real, o que é ruído?
failures:
- Auth Suite > login with expired token → "Expected status 200, got 401"
- API Suite > health check → "connect ECONNREFUSED 127.0.0.1:3000"
- Button Suite > renders button correctly → "Expected null, got <button>Submit</button>"
- Search Suite > debounce timing → "Expected 42, received 43"
- Storage Suite > upload avatar → "GCP quota exceeded for this project"
changedFiles: ["src/components/Button.tsx"]
affectedTests: ["renders button correctly"]
customInfraPatterns: ["GCP quota exceeded"]
format: "markdown"
Saída:
## 🔴 Release Recommendation: NO_GO (75% confidence)
> 1 confirmed regression(s) in critical domain(s) [payment]. Do not release.
**Aggregate risk score:** 1.0
| Category | Count |
| ------------------- | ----- |
| Total failures | 5 |
| 🔴 Real regressions | 1 |
| 🟡 Known flaky | 2 |
| ⚪ Infra blips | 2 |
| ❓ Unknown | 0 |
### Risk Breakdown
| Test | Domain | Severity | Risk | Blast Radius |
| -------------------------------------- | ------ | -------- | ---- | ------------ |
| Button Suite::renders button correctly | core | MEDIUM | 0.5 | 1 |
### Blockers (must fix before release)
**Button Suite > renders button correctly**
- Test is directly affected by code changes in this commit
- `Expected null, got <button>Submit</button>`
### Safe to ignore
- ~~Auth Suite > login with expired token~~ — Historically flaky: 73% failure rate in history
- ~~API Suite > health check~~ — Error pattern matches infrastructure issues (network)
- ~~Search Suite > debounce timing~~ — Mildly flaky: 22% historical failure rate
- ~~Storage Suite > upload avatar~~ — Error pattern matches infrastructure issues (network)
Uma chamada de ferramenta. Um veredicto. Vá corrigir Button.tsx.
⚡ Configuração
{
"mcpServers": {
"release-readiness-triage": {
"command": "npx",
"args": ["-y", "release-readiness-triage-mcp"]
}
}
}
🚀 Uso
"Aqui estão as falhas da nossa execução de CI, nosso banco de dados de flakiness e os arquivos alterados neste PR. É seguro liberar?"
O agente chama generate_release_recommendation e retorna um veredicto com detalhamento completo — pronto para colar em um comentário de PR ou no Slack.
Funciona de forma autônoma, ou como meta-orquestrador sobre:
- flakiness-knowledge-graph-mcp — para histórico de flakiness
- ast-impact-mapper-mcp — para correlação código→teste
- playwright-trace-decoder-mcp — para análise de falhas em nível de trace
📦 Links
- npm: npmjs.com/package/release-readiness-triage-mcp
- GitHub: github.com/vola-trebla/release-readiness-triage-mcp
Licença
MIT