Skip to content

RIGOR

Implementación

Motor de Restricciones (Normativo – v0.1)

Estado: Normativo
Alcance: Define la evaluación, cumplimiento y resolución determinista de restricciones declarativas dentro del Grafo Canónico.

Este documento formaliza cómo se definen, resuelven, evalúan e integran las restricciones con el Motor de Validación.


1. Propósito

El Motor de Restricciones es responsable de:

  • Resolver declaraciones de restricciones
  • Validar la estructura de las restricciones
  • Evaluar expresiones de restricciones
  • Detectar violaciones de forma determinista
  • Producir resultados de restricciones estructurados

Opera sobre un Grafo Canónico y DEBE ser puro.

NO DEBE:

  • Mutar el grafo
  • Ejecutar efectos secundarios en tiempo de ejecución
  • Realizar migraciones
  • Modificar el estado de validación fuera de su salida definida

2. Modelo Conceptual

Las restricciones son invariantes declarativos adjuntos a:

  • Nodos
  • Atributos
  • Procesos
  • Alcance global del grafo

Representan condiciones lógicas que DEBEN cumplirse para que el grafo sea válido.


3. Contratos de Entrada y Salida

3.1 Entrada

evaluateConstraints(
    graph: CanonicalGraph
): ConstraintEvaluationResult

El grafo DEBE estar canonicalizado antes de la evaluación.


3.2 Salida

ConstraintEvaluationResult {
    status: "valid" | "invalid"
    violations: OrderedCollection<ConstraintViolation>
    evaluatedCount: number
}

Si existen violaciones → el estado DEBE ser "invalid".


4. Modelo de Restricción

Cada restricción DEBE incluir:

Constraint {
    id: string
    scope: CanonicalPath | "graph"
    expression: Expression
    severity: "error" | "warning"
}

Las restricciones DEBEN tener IDs estables y únicos.


5. Alcance de la Restricción (Scope)

El alcance define el contexto de evaluación.

Alcances permitidos:

  • Nivel de grafo
  • Nivel de nodo
  • Nivel de atributo
  • Nivel de proceso

El motor DEBE vincular la restricción a su alcance de forma determinista.

Las referencias de alcance inválidas DEBEN producir violaciones.


6. Modelo de Expresión

Las expresiones DEBEN ser:

  • Declarativas
  • Libres de efectos secundarios
  • Deterministas
  • Puramente evaluativas

Las expresiones PUEDEN referenciar:

  • Atributos del nodo con alcance
  • Nodos relacionados a través de aristas definidas
  • Colecciones agregadas
  • Constantes

Las expresiones NO DEBEN:

  • Acceder a sistemas externos
  • Depender del tiempo
  • Depender de la aleatoriedad
  • Modificar el estado

7. Fases de Evaluación

La evaluación de restricciones DEBE ocurrir en fases:

Fase 1 – Resolución

  • Validar la ruta del alcance
  • Validar los atributos referenciados
  • Parsear la gramática de la expresión

Referencia inválida → violación.


Fase 2 – Construcción del Grafo de Dependencias

  • Identificar nodos y atributos referenciados
  • Construir mapa de dependencias
  • Detectar dependencias circulares de restricciones

La dependencia circular DEBE invalidar la evaluación.


Fase 3 – Evaluación de Expresiones

  • Evaluar la expresión por cada instancia de alcance
  • Recolectar violaciones
  • Respetar la severidad declarada

El orden de evaluación DEBE ser determinista.


8. Requisitos de Determinismo

El motor DEBE garantizar:

  • Orden de evaluación estable
  • Ordenamiento de violaciones estable
  • Parseo de expresiones estable
  • Códigos de error estables

El ordenamiento DEBE seguir:

  1. Ruta del alcance (lexicográfico)
  2. ID de la restricción (lexicográfico)
  3. Mensaje de la violación

Entradas idénticas DEBEN producir salidas idénticas.


9. Esquema de ConstraintViolation

ConstraintViolation {
    code: string
    constraintId: string
    path: CanonicalPath
    message: string
    severity: "error" | "warning"
}

Los códigos DEBEN ser estables y estar en un espacio de nombres.


10. Restricciones de Agregación

El motor DEBE soportar agregación determinista:

Ejemplos:

  • COUNT(coleccion) > 0
  • ALL(estados, condicion)
  • EXISTS(nodos, condicion)

Las agregaciones DEBEN operar sobre colecciones canonicalizadas y ordenadas.


11. Restricciones entre Nodos (Cross-Node)

Las restricciones PUEDEN referenciar nodos relacionados a través de aristas.

El motor DEBE:

  • Resolver referencias de forma determinista
  • Prevenir recorridos infinitos
  • Forzar una evaluación acíclica

El orden de recorrido DEBE estar ordenado lexicográficamente.


12. Expectativas de Rendimiento

El Motor de Restricciones DEBERÍA operar en:

O(C × N)

Donde:

  • C = número de restricciones
  • N = nodos en el alcance relevante

Las implementaciones PUEDEN cachear búsquedas intermedias pero DEBEN preservar el determinismo.


13. Integración con el Motor de Validación

La evaluación de restricciones PUEDE ejecutarse durante la Fase de Validación "SEMANTIC".

Las violaciones de restricciones DEBEN mapearse a ValidationErrors o ValidationWarnings.

Los IDs de las restricciones DEBEN permanecer estables entre versiones.


14. Interacción con el Versionado

La adición, eliminación o modificación de restricciones PUEDE clasificarse como:

  • Cambio de ruptura (breaking) (si fortalece el invariante)
  • Cambio menor (si relaja el invariante)
  • Parche (si es solo metadatos)

Las reglas de clasificación DEBEN definirse en el Motor de Versionado.


15. Manejo de Conflictos

El motor DEBE detectar:

  • IDs de restricciones duplicados
  • Referencias de atributos no resolubles
  • Alcances de restricciones conflictivos
  • Gramática de expresión inválida

Dichas condiciones DEBEN producir violaciones deterministas.


16. No-Objetivos

El Motor de Restricciones NO:

  • Corrige automáticamente las violaciones
  • Genera sugerencias
  • Modifica el grafo
  • Ejecuta validación de datos en tiempo de ejecución
  • Realiza validación a nivel de base de datos

Solo valida invariantes de la especificación.


17. Criterios de Conformidad

Una implementación es conforme si:

  • Evalúa las restricciones de forma determinista
  • Fuerza la corrección del alcance
  • Detecta dependencias circulares
  • Produce un ordenamiento de violaciones estable
  • Se integra limpiamente con el Motor de Validación

18. Resumen

El Motor de Restricciones:

  • Hace cumplir invariantes declarativos
  • Opera puramente sobre el Grafo Canónico
  • Garantiza la evaluación determinista
  • Detecta errores de alcance y dependencia
  • Se integra en el ciclo de vida de validación

Protocolo de Restricción de IA