---
id: db-env-check
agent: data-engineer
title: Validar variáveis de ambiente do banco
inputs: [ambiente alvo (local/staging/prod)]
outputs: [relatório de validação, veredito GO/NO-GO para operar o banco]
elicit: false
modes: [interactive, yolo]
---

# Validar variáveis de ambiente do banco

**Objetivo:** confirmar que as variáveis de ambiente do banco estão presentes, coerentes e seguras
antes de qualquer operação — para nenhuma task de banco rodar às cegas ou contra o alvo errado.

**Pré-condições:**
- Existe uma fonte de configuração de ambiente (`.env`, variáveis exportadas, ou config do projeto).
  Se nenhuma fonte existe, **pare** e reporte: não há o que validar.
- O ambiente alvo está claro (local, staging ou prod). Se ambíguo, elicito qual — operar no alvo
  errado é o pior erro de banco que existe.

## Passos

1. **Liste as variáveis exigidas** pelo ambiente alvo: host, porta, nome do banco, usuário, senha/
   credencial, e — em Supabase — URL do projeto, anon key e service role key.
2. **Verifique presença e formato** de cada variável. Vazia, ausente ou malformada (URL inválida,
   porta não numérica) é falha imediata para aquele item.
3. **Cheque coerência de alvo:** o host/URL aponta para o ambiente declarado? Uma string de produção
   num check de "local" é **NO-GO** — sinalizo antes que alguém escreva no lugar errado.
4. **Valide a postura de segurança:** em produção, exijo Pooler com `sslmode=require`. Service role
   bypassa RLS — confirmo que está presente só onde é justificado e nunca exposto em cliente.
5. **Teste a conexão** com uma query trivial e read-only (`SELECT 1`), sem escrever nada. Confirma que
   a credencial conecta de fato, não só que a string existe.
6. **Redija os segredos** no relatório: presença e formato são reportados como OK/FALHA, nunca o valor
   inteiro de senha ou token.
7. **Emita o veredito:** **GO** (todas as variáveis presentes, coerentes, conexão OK) ou **NO-GO**
   (lista objetiva do que falta ou está errado, com o que corrigir).

## Critério de pronto (DoD)

- [ ] Todas as variáveis exigidas pelo alvo verificadas (presença + formato)
- [ ] Coerência de alvo confirmada (host/URL bate com o ambiente declarado)
- [ ] Postura de segurança validada (SSL em prod; service role só onde justificado)
- [ ] Conexão testada com query read-only
- [ ] Segredos redigidos no relatório (nunca valor inteiro)
- [ ] Veredito GO/NO-GO emitido com itens acionáveis no caso de NO-GO

## Falha / recuperação

- **Variável ausente ou malformada** → **NO-GO**; reporto exatamente qual e o formato esperado, sem
  adivinhar o valor.
- **Alvo incoerente** (string de prod num check de local) → **NO-GO** imediato e **HALT** em qualquer
  operação subsequente até a correção.
- **Conexão falha** → reporto o erro bruto (redigido) e o veredito NO-GO; nenhuma task de banco deve
  prosseguir.
- **Segredo exposto em cliente ou local inseguro** → sinalizo como achado de segurança e bloqueio até
  remediar; gestão de MCP/infra de credencial, se necessária, é delegada ao @devops.
