#!/bin/bash # validate-structure.sh - Valida la estructura del workspace # Uso: ./validate-structure.sh [proyecto] set -e WORKSPACE_ROOT="${HOME}/workspace" PROJECT=$1 ERRORS=0 WARNINGS=0 # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${BLUE}=== Validación de Estructura del Workspace ===${NC}" echo "" # Función para verificar directorio check_dir() { local path=$1 local required=$2 if [ -d "$path" ]; then echo -e " ${GREEN}✓${NC} $path" return 0 else if [ "$required" = "required" ]; then echo -e " ${RED}✗${NC} $path (FALTA - requerido)" ((ERRORS++)) return 1 else echo -e " ${YELLOW}○${NC} $path (no existe)" ((WARNINGS++)) return 0 fi fi } # Función para verificar archivo check_file() { local path=$1 local required=$2 if [ -f "$path" ]; then echo -e " ${GREEN}✓${NC} $path" return 0 else if [ "$required" = "required" ]; then echo -e " ${RED}✗${NC} $path (FALTA - requerido)" ((ERRORS++)) return 1 else echo -e " ${YELLOW}○${NC} $path (no existe)" ((WARNINGS++)) return 0 fi fi } # Validar estructura principal echo -e "${BLUE}1. Validando estructura principal...${NC}" check_dir "${WORKSPACE_ROOT}/core" "required" check_dir "${WORKSPACE_ROOT}/projects" "required" check_dir "${WORKSPACE_ROOT}/customers" "required" check_dir "${WORKSPACE_ROOT}/knowledge-base" "required" check_dir "${WORKSPACE_ROOT}/workspaces" "required" check_dir "${WORKSPACE_ROOT}/devtools" "required" check_file "${WORKSPACE_ROOT}/README.md" "required" echo "" # Validar core echo -e "${BLUE}2. Validando core/...${NC}" check_dir "${WORKSPACE_ROOT}/core/orchestration" "required" check_dir "${WORKSPACE_ROOT}/core/orchestration/agents" "required" check_dir "${WORKSPACE_ROOT}/core/orchestration/directivas" "required" check_dir "${WORKSPACE_ROOT}/core/orchestration/templates" "required" check_dir "${WORKSPACE_ROOT}/core/orchestration/claude" "required" check_dir "${WORKSPACE_ROOT}/core/modules" "required" check_dir "${WORKSPACE_ROOT}/core/standards" "required" check_file "${WORKSPACE_ROOT}/core/README.md" "required" check_file "${WORKSPACE_ROOT}/core/orchestration/README.md" "required" echo "" # Validar knowledge-base echo -e "${BLUE}3. Validando knowledge-base/...${NC}" check_dir "${WORKSPACE_ROOT}/knowledge-base/patterns" "required" check_dir "${WORKSPACE_ROOT}/knowledge-base/reference" "required" check_dir "${WORKSPACE_ROOT}/knowledge-base/guides" "required" check_dir "${WORKSPACE_ROOT}/knowledge-base/snippets" "optional" check_dir "${WORKSPACE_ROOT}/knowledge-base/lessons-learned" "optional" echo "" # Validar devtools echo -e "${BLUE}4. Validando devtools/...${NC}" check_dir "${WORKSPACE_ROOT}/devtools/scripts" "required" check_dir "${WORKSPACE_ROOT}/devtools/templates" "required" check_dir "${WORKSPACE_ROOT}/devtools/docker" "optional" echo "" # Si se especificó un proyecto, validarlo if [ -n "$PROJECT" ]; then echo -e "${BLUE}5. Validando proyecto: ${PROJECT}...${NC}" PROJECT_PATH="${WORKSPACE_ROOT}/projects/${PROJECT}" if [ ! -d "$PROJECT_PATH" ]; then echo -e " ${RED}✗${NC} Proyecto '${PROJECT}' no existe" ((ERRORS++)) else # Estructura de apps check_dir "${PROJECT_PATH}/apps" "required" # Estructura de docs check_dir "${PROJECT_PATH}/docs" "required" check_dir "${PROJECT_PATH}/docs/00-overview" "required" check_dir "${PROJECT_PATH}/docs/01-requerimientos" "required" check_dir "${PROJECT_PATH}/docs/02-especificaciones-tecnicas" "required" # Estructura de orchestration check_dir "${PROJECT_PATH}/orchestration" "required" check_dir "${PROJECT_PATH}/orchestration/00-guidelines" "required" check_dir "${PROJECT_PATH}/orchestration/01-analisis" "required" check_dir "${PROJECT_PATH}/orchestration/02-planeacion" "required" check_dir "${PROJECT_PATH}/orchestration/03-tareas" "required" check_dir "${PROJECT_PATH}/orchestration/estados" "required" check_dir "${PROJECT_PATH}/orchestration/inventarios" "required" # Archivos requeridos check_file "${PROJECT_PATH}/README.md" "required" check_file "${PROJECT_PATH}/orchestration/PROXIMA-ACCION.md" "required" check_file "${PROJECT_PATH}/orchestration/estados/REGISTRO-SUBAGENTES.json" "required" check_file "${PROJECT_PATH}/orchestration/00-guidelines/CONTEXTO-PROYECTO.md" "required" fi echo "" else # Validar todos los proyectos existentes echo -e "${BLUE}5. Validando proyectos existentes...${NC}" for project_dir in "${WORKSPACE_ROOT}/projects"/*; do if [ -d "$project_dir" ]; then project_name=$(basename "$project_dir") echo -e " ${BLUE}→ ${project_name}${NC}" # Verificaciones básicas [ -f "${project_dir}/README.md" ] && echo -e " ${GREEN}✓${NC} README.md" || { echo -e " ${YELLOW}○${NC} README.md"; ((WARNINGS++)); } [ -d "${project_dir}/orchestration" ] && echo -e " ${GREEN}✓${NC} orchestration/" || { echo -e " ${RED}✗${NC} orchestration/"; ((ERRORS++)); } [ -d "${project_dir}/docs" ] && echo -e " ${GREEN}✓${NC} docs/" || { echo -e " ${RED}✗${NC} docs/"; ((ERRORS++)); } [ -d "${project_dir}/apps" ] && echo -e " ${GREEN}✓${NC} apps/" || { echo -e " ${RED}✗${NC} apps/"; ((ERRORS++)); } fi done echo "" fi # Resumen echo -e "${BLUE}=== Resumen ===${NC}" if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then echo -e "${GREEN}✓ Validación exitosa: Estructura correcta${NC}" exit 0 elif [ $ERRORS -eq 0 ]; then echo -e "${YELLOW}⚠ Validación con advertencias: ${WARNINGS} warnings${NC}" exit 0 else echo -e "${RED}✗ Validación fallida: ${ERRORS} errores, ${WARNINGS} warnings${NC}" exit 1 fi