---
name: quality-validator
description: Validação de componentes contra os standards Descomplicar® — frontmatter, checklists e quality gates antes de activação ou release.
allowed-tools: Read, Glob, Grep
---

# Quality Validator

Skill para validar componentes e garantir qualidade mínima antes de activação.

## Triggers

Esta skill deve ser activada quando:
- Novo componente é criado
- Comando `/descomplicar:validate` é invocado
- Antes de release (`/descomplicar:release`)
- Após edição de componente existente
- Durante sync para bloquear componentes inválidos

## Capabilities

### 1. Validar Skill

**Checklist Obrigatório:**

| Campo | Obrigatório | Peso |
|-------|-------------|------|
| `name:` | Sim | 15 |
| `description:` | Sim | 20 |
| `author:` | Sim | 5 |
| `version:` | Sim | 5 |
| `desk_task:` | Não | 5 |
| `allowed-tools:` | Sim | 10 |
| Triggers section | Sim | 10 |
| Capabilities section | Sim | 10 |
| Workflow | Não | 5 |
| Exemplo de Uso | Não | 10 |
| Limites section | Não | 5 |

**Validações de Qualidade:**
- `description:` contém triggers (keywords) → +5 pontos
- `description:` tem 5+ keywords → +5 pontos
- Tamanho < 500 linhas → +5 pontos
- Sem erros de sintaxe YAML → obrigatório

### 2. Validar Agent

**Checklist Obrigatório:**

| Campo | Obrigatório | Peso |
|-------|-------------|------|
| `name:` | Sim | 15 |
| `description:` | Sim | 20 |
| `model:` | Sim | 10 |
| `tools:` | Sim | 10 |
| `allowed-mcps:` | Sim | 15 |
| `category:` | Sim | 10 |
| `author:` | Sim | 5 |
| `version:` | Sim | 5 |
| Quando Usar section | Não | 5 |
| Workflow section | Não | 5 |

**Validações de Qualidade:**
- MCPs mapeados existem em `cr_mcps` → +5 pontos
- Categoria válida (dev|business|marketing|infra) → obrigatório
- Model válido (sonnet|opus|haiku) → obrigatório

### 3. Validar Command

**Checklist Obrigatório:**

| Campo | Obrigatório | Peso |
|-------|-------------|------|
| `name:` | Sim | 20 |
| `description:` | Sim | 30 |
| `argument-hint:` | Não | 10 |
| Objectivo section | Sim | 15 |
| Sintaxe section | Sim | 15 |
| Output section | Não | 10 |

### 4. Calcular Score

**Fórmula:**
```
score = (campos_obrigatorios * peso_obrigatorio) + (campos_opcionais * peso_opcional) + bonus_qualidade
```

**Interpretação:**
| Score | Status | Acção |
|-------|--------|-------|
| >= 90 | Production | Pronto para uso |
| 70-89 | Beta | Pode activar com aviso |
| 50-69 | Draft | Requer melhorias |
| < 50 | Invalid | **BLOQUEAR** activação |

### 5. Gerar Relatório

**Output:**
```
╔══════════════════════════════════════════════════════════════════════╗
║  QUALITY VALIDATION: <component-name>                                ║
║  Type: Skill | Path: skills/<name>/SKILL.md                         ║
╠══════════════════════════════════════════════════════════════════════╣
║  FRONTMATTER                                                         ║
║  ├── name:          ✓ Present                                        ║
║  ├── description:   ✓ Present (5 keywords detected)                  ║
║  ├── author:        ✓ Present                                        ║
║  ├── version:       ✓ Present (1.0.0)                                ║
║  ├── desk_task:     ✗ Missing (optional)                             ║
║  └── allowed-tools: ✓ Present (Read, Glob, Grep)                     ║
╠══════════════════════════════════════════════════════════════════════╣
║  CONTENT SECTIONS                                                    ║
║  ├── Triggers:      ✓ Present                                        ║
║  ├── Capabilities:  ✓ Present (3 capabilities)                       ║
║  ├── Workflow:      ✓ Present                                        ║
║  ├── Exemplo:       ✗ Missing (recommended)                          ║
║  └── Limites:       ✗ Missing (recommended)                          ║
╠══════════════════════════════════════════════════════════════════════╣
║  QUALITY CHECKS                                                      ║
║  ├── Lines:         234 (< 500 ✓)                                    ║
║  ├── YAML syntax:   Valid ✓                                          ║
║  └── Keywords:      5 detected ✓                                     ║
╠══════════════════════════════════════════════════════════════════════╣
║  SCORE: 78/100  ████████████████░░░░  BETA                           ║
╠══════════════════════════════════════════════════════════════════════╣
║  SUGGESTIONS                                                         ║
║  1. Adicionar secção "Exemplo de Uso" (+10 pontos)                   ║
║  2. Adicionar secção "Limites" (+5 pontos)                           ║
║  3. Adicionar desk_task no frontmatter (+5 pontos)                   ║
╚══════════════════════════════════════════════════════════════════════╝
```

## Quality Gates

### Gate 1: Criação
- Score >= 50 para criar componente
- Se < 50: BLOQUEAR e mostrar erros

### Gate 2: Activação
- Score >= 70 para activar componente
- Se < 70: AVISO + sugestões

### Gate 3: Release
- Score >= 90 para todos os componentes
- Se algum < 90: BLOQUEAR release

## Integração com Sync

Durante `/descomplicar:sync`:
```sql
-- Verificar componentes com score baixo
SELECT c.slug, c.quality_score, c.status
FROM cr_skills c
WHERE c.quality_score < 70 AND c.status = 'active';

-- Marcar para revisão
UPDATE cr_skills
SET status = 'review_required'
WHERE quality_score < 70 AND status = 'active';
```

## Workflow

```
READ COMPONENT → PARSE FRONTMATTER → CHECK SECTIONS → CALCULATE SCORE → REPORT
      ↓                  ↓                 ↓                ↓            ↓
   File path         YAML valid       All present      0-100       Suggestions
```

## Exemplo de Uso

```
User: Valida a skill infrastructure-manager

Quality Validator:
1. [Lê skills/infrastructure-manager/SKILL.md]
2. [Verifica frontmatter: 6/6 campos]
3. [Verifica secções: 4/5 presentes]
4. [Calcula score: 85/100]
5. Resultado:
   "Score: 85/100 (BETA)
    ✓ Pronto para uso
    Sugestão: Adicionar secção 'Limites' para score 90+"
```

## Limites

- Não modifica componentes (apenas lê e reporta)
- Não cria componentes (usar component-generator)
- Não executa correções automáticas (usar /descomplicar:upgrade)

---

## Healing Log

Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.

```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```

*Adicionar nova linha após cada erro corrigido.*
