Skip to content

VALIDATION PIPELINE - Arquitectura del Motor de Validación

🎯 Pipeline de 5 Fases

Phase 1: Parse & Load

Objetivo: Cargar módulos y construir grafo de dependencias

Algoritmo: - Leer metadata de todos los módulos - Construir DependencyGraph (adjacency list + reverse adjacency) - Indexar módulos por nivel

Output: Grafo completo de dependencias


Phase 2: Rule Checking

Objetivo: Aplicar todas las composition rules

Algoritmo: - Para cada módulo: - Ejecutar RuleEngine.check_all() - Recolectar violaciones - Clasificar por severidad (ERROR/WARNING)

Output: Lista de violaciones


Phase 3: Cycle Detection

Objetivo: Detectar dependencias circulares

Algoritmo: DFS-based

State: {0=unvisited, 1=visiting, 2=visited}

function DFS(node):
    state[node] = 1  // visiting
    for each neighbor:
        if state[neighbor] == 0:
            DFS(neighbor)
        else if state[neighbor] == 1:
            // Back edge detected - CYCLE!
            extract_cycle()
    state[node] = 2  // visited

Complejidad: O(V + E) donde V=módulos, E=dependencias

Output: Lista de ciclos detectados


Phase 4: Transitive Validation

Objetivo: Validar jerarquía transitiva

Algoritmo: Floyd-Warshall Closure

// Compute transitive closure
for k in modules:
    for i in modules:
        if i can reach k:
            i can reach all(k can reach)

// Validate hierarchy
for module in modules:
    for trans_dep in transitive_deps[module]:
        assert level(trans_dep) < level(module)

Complejidad: O(V³) para closure, O(V²) para validación

Output: Violaciones de jerarquía transitiva


Phase 5: Report Generation

Objetivo: Generar reporte comprensivo

Formatos: - TEXT: Human-readable - JSON: Machine-readable - HTML: Web-friendly con CSS

Contenido: - Timestamp - Overall pass/fail - Resultados por fase - Todas las violaciones - Ciclos detectados - Estadísticas


📊 Ejemplo de Flujo

Modules: {A, B, C, D}
Dependencies: A→B, B→C, C→D

Phase 1: Parse & Load
  ✓ Graph built: 4 nodes, 3 edges

Phase 2: Rule Checking
  ✓ A (L2) → B (L1): Valid
  ✓ B (L1) → C (L0): Valid
  ✓ C (L0) → D (?): D not in catalog (external dep)
  → 0 violations

Phase 3: Cycle Detection
  ✓ DFS from A, B, C, D
  → 0 cycles found

Phase 4: Transitive Validation
  ✓ A can reach {B, C, D}
  ✓ Hierarchy preserved: level(D) < level(C) < level(B) < level(A)
  → 0 violations

Phase 5: Report Generation
  ✓ JSON exported
  ✓ Total duration: 15.3ms

RESULT: ✅ PASSED

🚨 Ejemplo con Violaciones

Modules: {X, Y, Z}
Dependencies: X→Y, Y→Z, Z→X

Phase 1: Parse & Load
  ✓ Graph built

Phase 2: Rule Checking
  ✓ Direct rules passed

Phase 3: Cycle Detection
  ❌ CYCLE: X → Y → Z → X
  → 1 cycle found

Phase 4: Transitive Validation
  ⚠️  Skipped (cycles present)

Phase 5: Report Generation
  ✓ Report generated

RESULT: ❌ FAILED (1 cycle)

⚙️ Optimizaciones

Caching

  • Cache grafo entre ejecuciones
  • Invalidar solo si módulos cambian

Incremental Validation

  • Solo validar módulos modificados
  • Recalcular closure solo si deps cambian

Paralelización

  • Phase 2 puede ejecutarse en paralelo (rule checking por módulo)
  • Phase 3 puede buscar ciclos en componentes conexas separadas

📈 Performance Targets

Métrica Target Actual (500 módulos)
Phase 1 <1s ~0.2s
Phase 2 <20s ~5s
Phase 3 <5s ~1s
Phase 4 <10s ~3s
Phase 5 <1s ~0.1s
Total <30s ~10s

🔧 Configuración

ValidationEngine engine;

// Deshabilitar fases (para debugging)
engine.enable_phase(3, false);  // Skip cycle detection

// Usar rule engine custom
RuleEngine custom_engine;
engine.set_rule_engine(&custom_engine);

// Validación rápida (solo errores)
bool valid = engine.quick_validate(modules);

Última actualización: 2025-10-10 Versión: 1.0.0