workspace-v1/devtools/scripts/propagation/validate-propagation-chain.sh
rckrdmrd fa13a9760d chore: Configurar arquitectura de subrepositorios
Cambios principales:
- Actualizar .gitmodules: gamilit usa HTTPS (github.com)
- Actualizar .gitignore: ignorar proyectos con repos en Gitea
- Crear SUBREPOSITORIOS.md: documentacion de arquitectura de repos
- Actualizar submodulo gamilit: sincronizado con workspace desarrollo

Proyectos removidos del tracking (4050 archivos):
- erp-suite, erp-core, erp-construccion, erp-clinicas
- erp-retail, erp-mecanicas-diesel, erp-vidrio-templado
- trading-platform, betting-analytics, inmobiliaria-analytics
- platform_marketing_content

Estos proyectos tienen repositorios independientes en Gitea:
http://72.60.226.4:3000/rckrdmrd/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 05:27:54 -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=$((PASS + 1)); echo -e " ${GREEN}[PASS]${NC} $1"; }
check_fail() { FAIL=$((FAIL + 1)); echo -e " ${RED}[FAIL]${NC} $1"; }
check_warn() { WARN=$((WARN + 1)); 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