# Validador: Caminhos Balanceados

**Bloqueia:** warning
**Escopo:** grafo do fluxo (BFS de start_block_id ate terminais)

## O que valida

Todo caminho leva a um terminal MEANINGFUL. Caminho que termina em "tchau" sem CTA e oportunidade perdida.

## Como faz

1. BFS de `start_block_id` ate todos os terminais (`redirect`)
2. Lista todos os caminhos unicos
3. Avalia cada caminho

## Regras

### Todo caminho precisa terminar em `redirect`
Excecao: caminhos de descarte explicito ("nao e pra voce"), max 1 no fluxo, e devem ter `text` de despedida elegante.

### Distribuicao de caminhos
Se bot tem 4+ caminhos:
- Pelo menos 1 tem que ir pra checkout/conversao primaria
- Pelo menos 1 tem que ir pra escalada humana (whatsapp/calendly)
- Outros podem ser nutricao/descarte/oferta-secundaria

### Comprimento dos caminhos
- Min 5 blocos (caminho muito curto = atalho que parece quebrado)
- Max 25 blocos (caminho longo demais = visitante desiste)
- Caminho de descarte: 3-5 blocos OK

### Caminhos com ramo morto
Bloco que nenhum caminho usa = orfao (validado em flow-estrutural).
Mas: bloco que so e alcancado por 1 condicao MUITO restrita (<5% dos casos), e desperdicio. Warning.

### UTM em todos os redirects comerciais
Cada `redirect` que vai pra checkout/calendly/whatsapp DEVE ter `utm` preenchido com `content` diferente por caminho.

```
caminho aprovado    → redirect com utm.content="aprovado"
caminho em_duvida   → redirect com utm.content="em_duvida"
caminho rejeitado   → redirect com utm.content="rejeitado"
```

Sem UTM diferenciada por caminho, mentorada nao consegue medir performance por perfil.

### Distribuicao estimada (warning se muito desigual)

Se um caminho recebe >70% do trafego esperado E outro caminho recebe <5%, ratio desbalanceado. Pode ser legitimo (ex: todos passam por "boas-vindas"), mas pra ramos diagnosticos isso e bandeira.

Skill simula distribuicao com 100 visitantes virtuais escolhendo randomico em cada `choice`. Se 1 caminho recebe <5 visitantes, warning.

## Output do validador

```json
{
  "passed": true,
  "level": "warning",
  "issues": [
    {
      "message": "Caminho 'rejeitado' sem UTM em redirect — analytics nao vai conseguir segmentar",
      "suggestion": "Adicionar utm.content='rejeitado' em b121"
    },
    {
      "message": "Caminho 'avancado' tem 4 blocos (min 5) — parece atalho quebrado",
      "suggestion": "Adicionar bloco text de transicao antes de redirect"
    }
  ],
  "score": 80,
  "metrics": {
    "total_caminhos": 4,
    "comprimento_medio": 12.5,
    "redirects_com_utm": 3,
    "redirects_sem_utm": 1
  }
}
```

## Quando regenerar

Apenas warning. Sugestao em `07-auditoria-checklist.md`.

Excecao: redirect sem UTM em caminho comercial principal vira ERROR — escala pra bloqueio.
