# Dependabot Validation

> Dependabot Validation

- Skill: `flaviomilan/dependabot-validation` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add flaviomilan/dependabot-validation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/flaviomilan/dependabot-validation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: flaviomilan (https://skillmd.com/u/flaviomilan)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/flaviomilan/dependabot-validation

---


# Dependabot Validation

Poupa o trabalho manual de auditar dependências: junta os PRs abertos do
Dependabot, o status de CI de cada um, os alertas de segurança do repositório,
e aplica regras de "até onde pode atualizar" para te dizer, por PR, **o que
subir, o que revisar e o que segurar**. É **somente leitura** — nunca faz
merge, approve, comentário ou label.

## Pré-requisitos

- `gh` (GitHub CLI) autenticado (`gh auth status`) e `jq` instalados.
- Acesso de leitura ao repositório. Os **alertas de segurança** exigem permissão
  extra (admin/security); sem ela, a skill segue só com os PRs e avisa.

## Como usar

1. **Descobrir o repositório.** Use o `owner/repo` que o usuário informar. Se
   não vier nenhum e você estiver dentro de um repo git, descubra com
   `gh repo view --json nameWithOwner -q .nameWithOwner`. Em caso de dúvida,
   pergunte — não invente.

2. **Coletar os dados** (read-only):
   ```bash
   bash "$SKILL_DIR/scripts/fetch.sh" <owner/repo>
   ```
   (`$SKILL_DIR` = a pasta desta skill.) Isso imprime um JSON com
   `pull_requests[]` (cada um com `ecosystem`, `dependency`, `from_version`,
   `to_version`, `grouped`, `ci`, `labels`, `body_excerpt`) e
   `security_alerts[]` (com `severity`, `package`, `ecosystem`,
   `vulnerable_range`, `patched`). Se `security_alerts_error` não for nulo,
   mencione isso no relatório.

3. **Ler os guardrails** em `constraints.yml` (mesma pasta da skill) com a
   ferramenta Read. Cada regra tem `ecosystem`, `match`, `max_major`, `reason`.

4. **Classificar cada PR** (regras abaixo) e **cruzar com os alertas**.

5. **Emitir o relatório** no formato abaixo. Sem ações de escrita.

## Como classificar cada PR

Determine o **tipo de salto** comparando `from_version` → `to_version`:
muda o major = **major**; muda o minor = **minor**; senão = **patch**.
(Para PRs com `grouped: true`, não há um único par de versões — use o
`body_excerpt` para listar os pacotes do grupo e trate como **revisar**.)

Aplique os **guardrails**: para cada regra de `constraints.yml` cujo
`ecosystem` bate com o do PR e cujo `match` é substring (case-insensitive) de
`dependency`, se o **major de `to_version` > `max_major`**, o PR é **⛔ HOLD**
(cite a `reason` da regra).

Buckets, em ordem de prioridade:

1. **🔴 Corrige alerta de segurança** — o `package`/`ecosystem` do PR casa com
   algum `security_alerts[]` aberto e o `to_version` ≥ `patched`. Prioridade
   máxima. (Se também cruzar um guardrail, sinalize o conflito explicitamente:
   "corrige falha MAS cruzaria o teto — avaliar backport/exceção".)
2. **⛔ Hold (guardrail)** — cruza um teto de versão. Não subir; explicar o porquê.
3. **🟡 Revisar** — major bump (sem guardrail), OU `ci` = FAILURE, OU `grouped`,
   OU `ci` = PENDING/NONE. Explique o motivo (build vermelho? salto grande?).
4. **🟢 Seguro para subir** — patch/minor, `ci` = SUCCESS, sem guardrail e sem
   alerta pendente.

Mostre sempre, por PR: número (link), ecossistema, dependência,
`from → to` com o tipo de salto, estado do CI e o motivo da classificação.

## Formato do relatório

```
## Dependabot — <owner/repo>  ·  <data>
PRs abertos: <N>  ·  Alertas de segurança abertos: <M>
<se houver security_alerts_error: linha de aviso sobre alertas indisponíveis>

### 🔴 Corrigem alertas de segurança (subir primeiro)
- #<n> <eco>: <dep> <from> → <to> (<salto>) · CI <✅/❌/⏳> · <severidade> — <recomendação>

### ⛔ Hold — guardrail
- #<n> <eco>: <dep> <from> → <to> (major) — BLOQUEADO: <reason do constraints.yml>

### 🟡 Revisar
- #<n> <eco>: <dep> <from> → <to> (<salto>) · CI <...> — <motivo: build vermelho / major / grupo>

### 🟢 Seguro para subir
- #<n> <eco>: <dep> <from> → <to> (<salto>) · CI ✅

### ⚠️ Alertas de segurança sem PR correspondente
- <severidade> <package> (<eco>) — vulnerável <vulnerable_range>, corrigido em <patched> — <url>

---
**Resumo:** <X seguros, Y a revisar, Z em hold, W alertas sem correção>. Próximo passo sugerido: <ex.: subir os 🟢 e o 🔴, fechar o PR de Spring 4, investigar o CI do #18>.
```

Omita seções vazias. Seja direto: o objetivo é o usuário bater o olho e saber o
que fazer.

## Notas e limitações

- **Read-only por design.** Nunca rode `gh pr merge/review/comment`, nem
  `gh pr edit`/`label`. Se o usuário quiser agir, ele decide e executa.
- O ecossistema vem do branch do Dependabot (`dependabot/maven/...`,
  `dependabot/npm_and_yarn/...`). Ecossistemas fora de Maven/npm aparecem como
  `unknown` mas ainda são listados.
- A correspondência PR↔alerta é por nome de pacote; pode haver pequenas
  diferenças de nomenclatura entre ecossistemas — na dúvida, sinalize em vez de
  afirmar com certeza.
- Para checar risco de quebra além da versão, vale ler o `body_excerpt` (o
  Dependabot inclui release notes e um "compatibility score").

