Skip to content

Motor de Validación (v0.1) ​

1. Propósito ​

El Motor de Validación evalúa un Grafo Canónico contra las reglas definidas por la Especificación de RIGOR.

Es responsable de:

  • Validación estructural
  • Validación referencial
  • Validación semántica
  • Validación de proceso
  • Validación de evento
  • Validación de versión

NO DEBE:

  • Mutar el Grafo Canónico
  • Ejecutar lógica de diff
  • Aplicar migraciones
  • Generar artefactos

El Motor de Validación es un sistema de evaluación puro.


2. Contratos de Entrada y Salida ​

2.1 Entrada ​

El motor DEBE aceptar:

validar(grafo: GrafoCanónico, opciones?: OpcionesValidación)

Donde:

  • grafo DEBE ser canónico
  • opciones PUEDE incluir parámetros de strictness y filtrado

El motor NO DEBE aceptar YAML raw o IR.

2.2 Salida ​

El motor DEBE retornar un Reporte de Validación:

ReporteValidación {
    estado: "válido" | "inválido"
    errores: ColecciónOrdenada<ErrorValidación>
    advertencias: ColecciónOrdenada<AdvertenciaValidación>
    metadatos: {
        conteoReglas
        tiempoEjecución
    }
}

estado DEBE ser "inválido" si existe al menos un error.


3. Descomposición Arquitectónica ​

El Motor de Validación DEBE consistir lógicamente de los siguientes componentes:

3.1 Registro de Reglas ​

Responsable de:

  • Registrar reglas de validación
  • Proporcionar ordenamiento determinista de reglas
  • Forzar identificadores de regla únicos

Cada regla DEBE tener:

Regla {
    id: string
    categoría: CategoríaRegla
    severidad: "error" | "advertencia"
    aplicaA: TipoNodo | "grafo"
    ejecutar(grafo, contexto): ResultadoRegla[]
}

Los IDs de regla DEBEN ser estables e inmutables.

3.2 Ejecutor de Reglas ​

Responsable de:

  • Iterar reglas en orden determinista
  • Ejecutar lógica de reglas
  • Recolectar violaciones
  • Respetar fases de ejecución

3.3 Contexto de Validación ​

Proporciona:

  • Acceso al grafo
  • Búsqueda de nodos
  • Utilidades auxiliares
  • Estado compartido de solo lectura

El contexto NO DEBE permitir mutación.

3.4 Agregador de Errores ​

Responsable de:

  • Recolectar errores
  • Forzar ordenamiento determinista
  • Deduplicar- Producir si es necesario reporte final

4. Fases de Validación ​

Las reglas DEBEN ejecutarse en fases ordenadas definidas.

Las fases DEBEN ser:

  1. Estructural
  2. Referencial
  3. Semántica
  4. Proceso
  5. Evento
  6. Versión

Las reglas dentro de una fase DEBEN ejecutarse en orden lexicográfico determinista del ID de regla.

Una fase posterior NO DEBE ejecutarse si se viola un invariante estructural fatal (umbral definido por implementación).


5. Categorías de Reglas ​

Cada regla DEBE pertenecer a una categoría:

  • ESTRUCTURAL
  • REFERENCIAL
  • SEMÁNTICA
  • PROCESO
  • EVENTO
  • VERSIÓN

Las categorías determinan la fase de ejecución.


6. Requisitos de Determinismo ​

El motor DEBE garantizar:

  • Orden de ejecución de reglas estable
  • Orden de errores estable
  • Códigos de error estables
  • Rutas canónicas estables

Dado un Grafo Canónico de entrada idéntico, la salida DEBE ser idéntica.

El orden de errores DEBE seguir:

  1. Ruta canónica (lexicográfica)
  2. ID de Regla
  3. Mensaje

7. Esquema de ErrorValidación ​

Cada error DEBE incluir:

ErrorValidación {
    código: string
    idRegla: string
    ruta: RutaCanónica
    mensaje: string
    severidad: "error"
}

Las advertencias DEBEN seguir:

AdvertenciaValidación {
    código: string
    idRegla: string
    ruta: RutaCanónica
    mensaje: string
    severidad: "advertencia"
}

Los códigos DEBEN ser estables entre versiones.


8. Modo Estricto vs No Estricto ​

OpcionesValidación PUEDE incluir:

OpcionesValidación {
    modo: "estricto" | "no-estricto"
    reglasDeshabilitadas?: string[]
}

En modo estricto:

  • Todas las reglas DEBEN ejecutarse

En modo no-estricto:

  • La implementación PUEDE degradar errores específicos a advertencias
  • Las reglas deshabilitadas DEBEN excluirse determinísticamente

La deshabilitación de reglas NO DEBE alterar el orden de las reglas restantes.


9. Estrategia de Cortocircuito ​

El motor PUEDE implementar cortocircuito solo en límites de fase.

NO DEBE cortocircuitar dentro de una fase de manera no determinista.

Ejemplo:

  • Si la fase estructural produce violación de invariante fatal, la fase semántica PUEDE ser omitida.

Este comportamiento DEBE ser documentado y estable.


10. Restricciones de Implementación de Reglas ​

Las reglas DEBEN:

  • Ser funciones puras
  • No mutar el grafo
  • No depender de estado global
  • No depender de efectos secundarios de orden de ejecución
  • No modificar el comportamiento de otras reglas

Las reglas NO DEBEN:

  • Registrar nuevas reglas en runtime
  • Acceder al sistema de archivos
  • Realizar llamadas de red

11. Reglas de Acceso al Grafo ​

Las reglas PUEDEN:

  • Recorrer nodos
  • Inspeccionar atributos
  • Seguir aristas
  • Consultar mapas de búsqueda

Las reglas NO DEBEN:

  • Modificar nodos
  • Modificar aristas
  • Añadir atributos derivados

12. Validación de Versión ​

Las reglas de versión DEBEN:

  • Comparar versión declarada
  • Validar formato de versión semántica
  • Forzar requisitos de incremento (si se proporciona ChangeSet)

Si no se proporciona ChangeSet, la validación de incremento de versión PUEDE ser omitida.


13. Integración con Motor de Diff ​

Si la validación se ejecuta en contexto de evolución:

validar(grafo, { changeSet })

El motor PUEDE:

  • Ejecutar reglas de versión
  • Ejecutar verificaciones de seguridad de migración

Validación NO DEBE computar diff por sí misma.


14. Expectativas de Rendimiento ​

El motor DEBERÍA operar en:

O(R × N)

Donde:

  • R = número de reglas
  • N = número de nodos

Las reglas DEBERÍAN evitar recorridos anidados de grafo completo.

Caché PUEDE usarse dentro del contexto pero DEBE ser determinista.


15. Códigos de Error ​

Los códigos de error DEBEN:

  • Ser estables
  • Estar namespaced (ej., RIGOR-VAL-001)
  • Nunca ser reutilizados para diferentes significados

Eliminar una regla DEBE deprecar su código explícitamente.


16. Integración con CLI ​

El comportamiento del CLI DEBE seguir:

  • Código de salida 0 → sin errores
  • Código de salida 1 → errores de validación presentes
  • Código de salida >1 → fallo interno

El formato de salida DEBE soportar:

  • JSON
  • Texto legible por humano

JSON DEBE serializar ReporteValidación exactamente.


17. Logging ​

El Motor de Validación PUEDE emitir logs, pero:

  • Los logs NO DEBEN afectar comportamiento
  • Los logs NO DEBEN alterar el determinismo
  • El logging DEBE ser opcional

18. Requisitos de Testing ​

El Motor de Validación DEBE soportar:

  • Pruebas unitarias por regla
  • Pruebas de integración sobre grafos de muestra
  • Pruebas doradas para salida de errores
  • Pruebas de determinismo (misma entrada, misma salida)
  • Pruebas de regresión para evolución de reglas

El comportamiento de las reglas DEBE ser testeable independientemente.


19. Objetivos No Incluidos ​

El Motor de Validación NO:

  • Aplica cambios
  • Corrige errores automáticamente
  • Genera migraciones
  • Reordena el grafo
  • Canónica el grafo

La canonicalización DEBE ocurrir antes.


20. Criterios de Cumplimiento ​

Una implementación es compatible si:

  • Ejecuta reglas en orden determinista por fases
  • Produce ReporteValidación estable
  • Respeta inmutabilidad
  • Fuerza códigos de error estables
  • Soporta modo estricto

21. Resumen ​

El Motor de Validación es:

  • Determinista
  • Guiado por fases
  • Pura
  • Basada en reglas
  • Inmutable en comportamiento

Hace cumplir la corrección de la especificación sin alterar la estructura y proporciona un resultado de validación estable y reproducible.

Protocolo de Restricción de IA