workspace-v1/devtools/scripts/propagation/validate-propagation-chain.sh
rckrdmrd 66161b1566 feat: Workspace-v1 complete migration with NEXUS v3.4
Sistema NEXUS v3.4 migrado con:

Estructura principal:
- core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles)
- core/catalog: Catalogo de funcionalidades reutilizables
- shared/knowledge-base: Base de conocimiento compartida
- devtools/scripts: Herramientas de desarrollo
- control-plane/registries: Control de servicios y CI/CD
- orchestration/: Configuracion de orquestacion de agentes

Proyectos incluidos (11):
- gamilit (submodule -> GitHub)
- trading-platform (OrbiquanTIA)
- erp-suite con 5 verticales:
  - erp-core, construccion, vidrio-templado
  - mecanicas-diesel, retail, clinicas
- betting-analytics
- inmobiliaria-analytics
- platform_marketing_content
- pos-micro, erp-basico

Configuracion:
- .gitignore completo para Node.js/Python/Docker
- gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git)
- Sistema de puertos estandarizado (3005-3199)

Generated with NEXUS v3.4 Migration System
EPIC-010: Configuracion Git y Repositorios
2026-01-04 03:37:42 -06:00

301 lines
10 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# validate-propagation-chain.sh
# Valida integridad post-propagacion
# Version: 1.0.0
# Sistema: NEXUS v3.4 + SIMCO + CAPVED
# EPIC: EPIC-012
# =============================================================================
#
# Uso:
# ./validate-propagation-chain.sh <propagacion_id>
# ./validate-propagation-chain.sh --all
# ./validate-propagation-chain.sh --last
#
# Parametros:
# propagacion_id ID de propagacion (ej: PROP-2026-001)
# --all Validar todas las propagaciones recientes
# --last Validar ultima propagacion registrada
#
# Validaciones:
# 1. REGISTRO-PROPAGACIONES.yml tiene entrada
# 2. TRAZABILIDAD-PROYECTOS.yml versiones actualizadas
# 3. HERENCIA-SIMCO.md de proyectos actualizados
# 4. PROJECT-STATUS.md menciona propagacion (opcional)
# 5. Versiones consistentes entre archivos
#
# Ejemplo:
# ./validate-propagation-chain.sh PROP-2026-001
#
# =============================================================================
set -e
# Configuracion
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
KB_PATH="/home/isem/workspace-v1/shared/knowledge-base"
REGISTRO="$KB_PATH/propagacion/REGISTRO-PROPAGACIONES.yml"
TRAZABILIDAD="$KB_PATH/TRAZABILIDAD-PROYECTOS.yml"
PROJECTS_PATH="/home/isem/workspace-v1/projects"
# Colores
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Contadores
PASS=0
FAIL=0
WARN=0
# Funciones de logging
check_pass() { ((PASS++)); echo -e " ${GREEN}[PASS]${NC} $1"; }
check_fail() { ((FAIL++)); echo -e " ${RED}[FAIL]${NC} $1"; }
check_warn() { ((WARN++)); echo -e " ${YELLOW}[WARN]${NC} $1"; }
log_info() { echo -e " ${BLUE}[INFO]${NC} $1"; }
# Funcion de ayuda
show_help() {
head -32 "$0" | tail -25
exit 0
}
# Parsear argumentos
if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
show_help
fi
PROP_ID="${1:-}"
if [ -z "$PROP_ID" ]; then
echo -e "${RED}ERROR:${NC} Debe especificar un ID de propagacion"
echo "Uso: $0 <propagacion_id> | --all | --last"
exit 1
fi
# Manejar --last
if [ "$PROP_ID" == "--last" ]; then
if [ -f "$REGISTRO" ]; then
PROP_ID=$(grep -E "^ - id:" "$REGISTRO" 2>/dev/null | tail -1 | sed 's/.*id: *//' | tr -d '"' || echo "")
if [ -z "$PROP_ID" ]; then
echo -e "${RED}ERROR:${NC} No se encontraron propagaciones en el registro"
exit 1
fi
echo "Usando ultima propagacion: $PROP_ID"
else
echo -e "${RED}ERROR:${NC} REGISTRO-PROPAGACIONES.yml no existe"
exit 1
fi
fi
# Manejar --all (simplificado - solo muestra resumen)
if [ "$PROP_ID" == "--all" ]; then
echo "╔═══════════════════════════════════════════════════════════════╗"
echo "║ VALIDACION DE TODAS LAS PROPAGACIONES ║"
echo "╚═══════════════════════════════════════════════════════════════╝"
echo ""
if [ -f "$REGISTRO" ]; then
PROP_IDS=$(grep -E "^ - id:" "$REGISTRO" 2>/dev/null | sed 's/.*id: *//' | tr -d '"' || echo "")
if [ -z "$PROP_IDS" ]; then
echo "No se encontraron propagaciones en el registro"
exit 0
fi
echo "$PROP_IDS" | while read -r pid; do
if [ -n "$pid" ]; then
echo " - $pid"
fi
done
echo ""
echo "Para validar una especifica: $0 <PROP-ID>"
else
echo "REGISTRO-PROPAGACIONES.yml no existe"
fi
exit 0
fi
echo "╔═══════════════════════════════════════════════════════════════╗"
echo "║ VALIDACION DE CADENA DE PROPAGACION ║"
echo "║ ID: $PROP_ID"
echo "╚═══════════════════════════════════════════════════════════════╝"
echo ""
# =============================================================================
# 1. Verificar REGISTRO-PROPAGACIONES.yml
# =============================================================================
echo "=== 1. REGISTRO-PROPAGACIONES.yml ==="
if [ -f "$REGISTRO" ]; then
if grep -q "$PROP_ID" "$REGISTRO" 2>/dev/null; then
check_pass "Propagacion registrada en REGISTRO-PROPAGACIONES.yml"
# Extraer informacion de la propagacion
MODULO=$(grep -A10 "$PROP_ID" "$REGISTRO" | grep "modulo:" | head -1 | sed 's/.*modulo: *//' | tr -d '"' || echo "desconocido")
VERSION=$(grep -A10 "$PROP_ID" "$REGISTRO" | grep "version:" | head -1 | sed 's/.*version: *//' | tr -d '"' || echo "desconocida")
log_info "Modulo: $MODULO, Version: $VERSION"
else
check_fail "Propagacion NO encontrada en registro"
MODULO="desconocido"
VERSION="desconocida"
fi
else
check_fail "REGISTRO-PROPAGACIONES.yml no existe"
MODULO="desconocido"
VERSION="desconocida"
fi
echo ""
# =============================================================================
# 2. Verificar TRAZABILIDAD-PROYECTOS.yml
# =============================================================================
echo "=== 2. TRAZABILIDAD-PROYECTOS.yml ==="
if [ -f "$TRAZABILIDAD" ]; then
check_pass "Archivo existe"
if [ "$MODULO" != "desconocido" ]; then
if grep -q "$MODULO" "$TRAZABILIDAD" 2>/dev/null; then
check_pass "Modulo $MODULO referenciado en trazabilidad"
else
check_warn "Modulo $MODULO no encontrado en trazabilidad"
fi
fi
else
check_fail "TRAZABILIDAD-PROYECTOS.yml no existe"
fi
echo ""
# =============================================================================
# 3. Verificar HERENCIA-SIMCO.md de proyectos
# =============================================================================
echo "=== 3. HERENCIA-SIMCO.md de proyectos ==="
PROYECTOS=("gamilit" "trading-platform" "erp-core" "erp-suite")
for proj in "${PROYECTOS[@]}"; do
HERENCIA="$PROJECTS_PATH/$proj/orchestration/00-guidelines/HERENCIA-SIMCO.md"
if [ -f "$HERENCIA" ]; then
# Verificar si tiene seccion de propagacion
if grep -qi "propagacion" "$HERENCIA" 2>/dev/null; then
check_pass "$proj: Seccion de propagacion existe"
else
check_warn "$proj: Sin seccion de propagacion"
fi
else
# Intentar ruta alternativa
HERENCIA_ALT="$PROJECTS_PATH/$proj/orchestration/HERENCIA-SIMCO.md"
if [ -f "$HERENCIA_ALT" ]; then
check_pass "$proj: HERENCIA-SIMCO.md existe (ruta alternativa)"
else
check_warn "$proj: HERENCIA-SIMCO.md no encontrado"
fi
fi
done
echo ""
# =============================================================================
# 4. Verificar PROJECT-STATUS.md (opcional)
# =============================================================================
echo "=== 4. PROJECT-STATUS.md (opcional) ==="
for proj in "${PROYECTOS[@]}"; do
STATUS="$PROJECTS_PATH/$proj/orchestration/00-guidelines/PROJECT-STATUS.md"
if [ -f "$STATUS" ]; then
log_info "$proj: PROJECT-STATUS.md existe"
else
# No es error, es opcional
log_info "$proj: Sin PROJECT-STATUS.md (opcional)"
fi
done
echo ""
# =============================================================================
# 5. Verificar consistencia de versiones
# =============================================================================
echo "=== 5. Consistencia de versiones ==="
if [ "$MODULO" != "desconocido" ] && [ "$VERSION" != "desconocida" ]; then
# Verificar en NIVELES-PROPAGACION.yml
NIVELES_FILE="$KB_PATH/propagacion/NIVELES-PROPAGACION.yml"
if [ -f "$NIVELES_FILE" ]; then
check_pass "NIVELES-PROPAGACION.yml existe"
else
check_warn "NIVELES-PROPAGACION.yml no existe"
fi
# Verificar PROTOCOLO-COORDINACION.yml
PROTOCOLO_FILE="$KB_PATH/propagacion/PROTOCOLO-COORDINACION.yml"
if [ -f "$PROTOCOLO_FILE" ]; then
check_pass "PROTOCOLO-COORDINACION.yml existe"
else
check_warn "PROTOCOLO-COORDINACION.yml no existe"
fi
else
check_warn "No se puede verificar versiones (modulo/version desconocidos)"
fi
echo ""
# =============================================================================
# 6. Verificar scripts de propagacion
# =============================================================================
echo "=== 6. Scripts de propagacion ==="
SCRIPTS=(
"$SCRIPT_DIR/propagate-module-update.sh"
"$SCRIPT_DIR/generate-scrum-tasks.sh"
"$SCRIPT_DIR/cascade-propagation.sh"
"$SCRIPT_DIR/validate-propagation-chain.sh"
)
for script in "${SCRIPTS[@]}"; do
SCRIPT_NAME=$(basename "$script")
if [ -f "$script" ]; then
if [ -x "$script" ]; then
check_pass "$SCRIPT_NAME ejecutable"
else
check_warn "$SCRIPT_NAME existe pero no es ejecutable"
fi
else
check_fail "$SCRIPT_NAME no existe"
fi
done
echo ""
# =============================================================================
# Resumen
# =============================================================================
echo "═══════════════════════════════════════════════════════════════"
echo " RESUMEN DE VALIDACION"
echo "═══════════════════════════════════════════════════════════════"
echo ""
echo -e " ${GREEN}PASS:${NC} $PASS"
echo -e " ${YELLOW}WARN:${NC} $WARN"
echo -e " ${RED}FAIL:${NC} $FAIL"
echo ""
# Calcular porcentaje
TOTAL=$((PASS + WARN + FAIL))
if [ $TOTAL -gt 0 ]; then
PERCENT=$((PASS * 100 / TOTAL))
echo " Porcentaje de exito: ${PERCENT}%"
echo ""
fi
# Resultado final
if [ $FAIL -eq 0 ]; then
if [ $WARN -eq 0 ]; then
echo -e "${GREEN}[VALIDACION EXITOSA]${NC} Cadena de propagacion integra"
else
echo -e "${YELLOW}[VALIDACION CON ADVERTENCIAS]${NC} Revisar warnings"
fi
exit 0
else
echo -e "${RED}[VALIDACION FALLIDA]${NC} Hay errores que corregir"
exit 1
fi