6035542b67
Movidos do vault Hub para centralizar scripts. Hub mantem symlinks. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
107 lines
2.7 KiB
Bash
Executable File
107 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# validate-structure.sh — Valida a estrutura de um projecto contra o standard
|
|
# ESTRUTURA.md do Modelo-Organizacao-Proc-Dev
|
|
#
|
|
# Uso: ./scripts/validate-structure.sh [caminho_do_projecto]
|
|
# Se não for especificado caminho, valida o projecto actual (raiz)
|
|
#
|
|
# Exit codes:
|
|
# 0 — Em conformidade
|
|
# 1 — Não conforme (estrutura em falta)
|
|
# 2 — Erro de execução
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT="${1:-.}"
|
|
ERRORS=0
|
|
WARNINGS=0
|
|
|
|
echo "=== Validação Estrutural (ESTRUTURA.md) ==="
|
|
echo "Projecto: $(cd "$ROOT" && pwd)"
|
|
echo ""
|
|
|
|
# 1. docs/ existe
|
|
if [ -d "$ROOT/docs" ]; then
|
|
echo " [OK] docs/ existe"
|
|
else
|
|
echo " [FALHA] docs/ não existe"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
|
|
# 2. docs/PLANS/ existe
|
|
if [ -d "$ROOT/docs/PLANS" ]; then
|
|
echo " [OK] docs/PLANS/ existe"
|
|
else
|
|
echo " [FALHA] docs/PLANS/ não existe"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
|
|
# 3. docs/SPECS/ existe
|
|
if [ -d "$ROOT/docs/SPECS" ]; then
|
|
echo " [OK] docs/SPECS/ existe"
|
|
else
|
|
echo " [FALHA] docs/SPECS/ não existe"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
|
|
# 4. AGENTS.md existe
|
|
if [ -f "$ROOT/AGENTS.md" ]; then
|
|
# Verificar se tem conteúdo mínimo
|
|
LINES=$(wc -l < "$ROOT/AGENTS.md")
|
|
if [ "$LINES" -ge 5 ]; then
|
|
echo " [OK] AGENTS.md existe ($LINES linhas)"
|
|
else
|
|
echo " [AVISO] AGENTS.md existe mas tem apenas $LINES linhas"
|
|
WARNINGS=$((WARNINGS + 1))
|
|
fi
|
|
else
|
|
echo " [FALHA] AGENTS.md não existe"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
|
|
# 5. MEMORY.md existe
|
|
if [ -f "$ROOT/MEMORY.md" ]; then
|
|
echo " [OK] MEMORY.md existe"
|
|
else
|
|
echo " [FALHA] MEMORY.md não existe"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
|
|
# 6. desk.project existe e é JSON válido
|
|
if [ -f "$ROOT/desk.project" ]; then
|
|
if jq -e . "$ROOT/desk.project" > /dev/null 2>&1; then
|
|
TASK_ID=$(jq -r '.task_id // "vazio"' "$ROOT/desk.project")
|
|
echo " [OK] desk.project existe (task_id: $TASK_ID)"
|
|
else
|
|
echo " [FALHA] desk.project existe mas não é JSON válido"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
else
|
|
echo " [FALHA] desk.project não existe"
|
|
ERRORS=$((ERRORS + 1))
|
|
fi
|
|
|
|
# 7. Anti-pattern: verificar se existem pastas docs/PROC ou docs/RUNBOOK
|
|
if [ -d "$ROOT/docs/PROC" ]; then
|
|
echo " [AVISO] docs/PROC existe — não devia. Usar 06-Operacoes/Procedimentos/ no Hub"
|
|
WARNINGS=$((WARNINGS + 1))
|
|
fi
|
|
if [ -d "$ROOT/docs/RUNBOOK" ]; then
|
|
echo " [AVISO] docs/RUNBOOK existe — não devia. Usar 06-Operacoes/Runbooks/ no Hub"
|
|
WARNINGS=$((WARNINGS + 1))
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Resultado ==="
|
|
if [ "$ERRORS" -gt 0 ]; then
|
|
echo " FALHAS: $ERRORS"
|
|
echo " AVISOS: $WARNINGS"
|
|
echo " VEREDICTO: NÃO CONFORME"
|
|
exit 1
|
|
else
|
|
echo " FALHAS: 0"
|
|
echo " AVISOS: $WARNINGS"
|
|
echo " VEREDICTO: CONFORME"
|
|
exit 0
|
|
fi |