Skip to content

Motor de Resolución de Eventos (v0.1)

1. Propósito

El Motor de Resolución de Eventos es responsable de:

  • Resolver referencias de eventos
  • Validar triggers y handlers de eventos
  • Forzar integridad de dependencias de eventos
  • Detectar ciclos
  • Producir un modelo de ejecución determinista

Opera sobre el Grafo Canónico y produce un Modelo de Eventos Resuelto.

NO DEBE:

  • Ejecutar eventos en runtime
  • Realizar migraciones
  • Mutar el Grafo Canónico

2. Modelo Conceptual

Los eventos en RIGOR representan triggers declarativos vinculados a:

  • Nodos
  • Transiciones de proceso
  • Cambios de atributos
  • Señales externas (si está soportado)

El motor transforma definiciones declarativas en un Grafo de Eventos Resuelto.


3. Contratos de Entrada y Salida

3.1 Entrada

resolverEventos(grafo: GrafoCanónico): ResultadoResoluciónEventos

El grafo DEBE ser canónico y validado estructuralmente antes de la resolución.

3.2 Salida

ResultadoResoluciónEventos {
    estado: "válido" | "inválido"
    eventosResueltos: ColecciónOrdenada<EventoResuelto>
    violaciones: ColecciónOrdenada<ViolaciónEvento>
}

Si existen violaciones → estado DEBE ser "inválido".


4. Modelo de Evento

Cada evento DEBE definir:

  • id (estable y único)
  • trigger
  • scope
  • condición (opcional)
  • acción

4.1 Esquema de Evento (Forma Canónica)

Evento {
    id: string
    trigger: DefiniciónTrigger
    scope: RutaCanónica
    condición?: Expresión
    acción: DefiniciónAcción
}

5. Tipos de Trigger

Los tipos de trigger soportados DEBEN enumerarse explícitamente:

  • ON_CREATE
  • ON_UPDATE
  • ON_DELETE
  • ON_STATE_ENTER
  • ON_STATE_EXIT
  • ON_ATTRIBUTE_CHANGE
  • CUSTOM (si la especificación lo permite)

Los tipos de trigger DEBEN ser estables entre versiones.


6. Proceso de Resolución

La resolución de eventos DEBE ocurrir en fases:

Fase 1 – Resolución de Scope

  • Verificar que la ruta destino existe
  • Vincular evento al nodo
  • Validar compatibilidad del trigger con tipo de nodo

Fase 2 – Resolución de Dependencias

  • Resolver atributos referenciados
  • Resolver estados de proceso
  • Resolver nodos referenciados

Referencia no resuelta → violación.

Fase 3 – Validación de Condición

  • Parsear expresión de condición (si está presente)
  • Validar campos referenciados
  • Forzar gramática de evaluación determinista

Expresión inválida → violación.

Fase 4 – Validación de Acción

  • Validar tipo de acción
  • Validar parámetros de acción
  • Asegurar que el objetivo de acción existe

Fase 5 – Detección de Ciclos

  • Construir grafo de dependencias de eventos
  • Detectar ciclos directos o indirectos
  • Rechazar cadenas de eventos cíclicos

La detección de ciclos DEBE ser determinista.


7. Esquema de EventoResuelto

EventoResuelto {
    id: string
    trigger: TipoTrigger
    scope: RutaCanónica
    dependenciasResueltas: string[]
    índiceOrdenEjecución: número
}

El orden de ejecución DEBE ser determinista.


8. Orden de Ejecución Determinista

Los eventos resueltos DEBEN ordenarse por:

  1. Ruta del scope (lexicográfica)
  2. Precedencia de trigger (mapeo interno estable)
  3. ID de evento (lexicográfica)

El mismo grafo DEBE siempre producir orden idéntico.


9. Reglas de Compatibilidad de Triggers

El motor DEBE forzar:

  • ON_STATE_ENTER solo válido para nodos de estado de proceso
  • ON_ATTRIBUTE_CHANGE solo válido para nodos con atributos
  • ON_DELETE solo válido donde existen semánticas de eliminación

Combinaciones inválidas DEBEN producir violaciones.


10. Tipos de Acción

Los tipos de acción soportados PUEDEN incluir:

  • SET_ATTRIBUTE
  • TRANSITION_STATE
  • EMIT_EVENT
  • LOG
  • CUSTOM (si está permitido)

Cada tipo de acción DEBE definir parámetros requeridos.


11. Restricciones de Expresión

Las condiciones DEBEN:

  • Ser libres de efectos secundarios
  • Ser deterministas
  • No acceder a sistemas externos
  • No depender de valores de runtime

El motor DEBE validar sintaxis e identificadores referenciados.


12. Grafo de Dependencias de Eventos

Las dependencias incluyen:

  • Evento → Nodo
  • Evento → Atributo
  • Evento → Estado de Proceso
  • Evento → Otro Evento (si es EMIT_EVENT)

El grafo de dependencias DEBE ser acíclico.


13. Esquema de Violación

ViolaciónEvento {
    código: string
    idEvento: string
    ruta: RutaCanónica
    mensaje: string
}

Los códigos DEBEN ser estables y estar namespaced.


14. Integración con Motor de Validación

La resolución de eventos PUEDE invocarse durante la Fase de Validación "EVENT".

Si la resolución falla:

  • Las violaciones DEBEN surfacear como errores de validación
  • El estado de validación DEBE ser inválido

15. Integración con Motor de Migraciones

La migración PUEDE modificar definiciones de eventos.

Después de la migración:

  • La resolución de eventos DEBE ejecutarse nuevamente
  • Ciclos o referencias inválidas DEBEN invalidar la migración

16. Expectativas de Rendimiento

El motor DEBERÍA operar en:

O(E + D)

Donde:

  • E = número de eventos
  • D = número de dependencias

La detección de ciclos DEBERÍA usar recorrido de grafo determinista (ej., DFS con listas de adyacencia ordenadas).


17. Objetivos No Incluidos

El Motor de Resolución de Eventos NO:

  • Ejecuta eventos
  • Programa triggers en runtime
  • Se integra con sistemas externos
  • Realiza efectos secundarios

Es validación puramente estructural y semántica.


18. Criterios de Cumplimiento

Una implementación es compatible si:

  • Resuelve referencias de eventos determinísticamente
  • Detecta ciclos confiablemente
  • Fuerza compatibilidad de triggers
  • Valida expresiones estáticamente
  • Produce ordenamiento estable

19. Resumen

El Motor de Resolución de Eventos:

  • Resuelve eventos declarativos
  • Fuerza integridad estructural
  • Detecta ciclos
  • Produce modelo de ejecución determinista
  • Se integra con validación y migraciones

Protocolo de Restricción de IA