Skip to content

Núcleo de la Spec (v0.1)

1. Introducción

Un Proceso RIGOR es una máquina de estados determinista y dirigida por eventos donde todas las mutaciones están restringidas a transiciones declaradas y se ejecutan atómicamente por evento.

2. Definición de Proceso

Un Proceso DEBE definir:

  • Una identidad única
  • Un conjunto finito de estados
  • Un estado inicial (que DEBE existir en el conjunto de estados)
  • Un conjunto finito de transiciones
  • Un esquema de contexto

3. Modelo de Transición y Declaración de Mutación (CRÍTICO)

El mapeo formal es: (estado_actual, evento) -> (estado_siguiente, mutaciones)

  • Una transición DEBE definir from, on, y to.
  • Una transición PUEDE definir una lista de mutate.
  • Regla: Las transiciones NO DEBEN mutar campos de contexto no declarados explícitamente en la lista mutate. Si mutate se omite, el contexto es inmutable para esa transición.

4. Semántica Transaccional

Cada evento DEBE procesarse atómicamente.

  • La ejecución exitosa resulta en una transición de estado atómica y actualización de contexto.
  • El fallo resulta en ningún cambio de estado y ninguna mutación (rollback).

5. Garantía de Determinismo

Para cualquier par dado `(estado, evento)**, debe haber a lo sumo una transición válida. Los mapeos ambiguos están prohibidos y DEBEN ser rechazados en el momento de la validación.

6. Estados Terminales

Un estado terminal es un estado sin transiciones salientes. Una vez alcanzado, el proceso NO DEBE aceptar más eventos.

7. Invariantes

7.1 Invariantes Estructurales

  • Un Proceso DEBE tener un único estado inicial.
  • Todos los objetivos de transición DEBEN existir en el conjunto de estados.
  • No DEBEN existir pares de transiciones duplicados (estado, evento).

7.2 Invariantes de Runtime

  • El estado actual DEBE siempre ser un miembro del conjunto de estados declarados.
  • El contexto DEBE siempre ajustarse al esquema declarado.

8. Ejemplo Normativo

json
{
  "process": {
    "id": "OrderProcess",
    "version": "1.0.0",
    "initial_state": "created",
    "context_schema": {
      "order_id": { "type": "uuid" },
      "status": { "type": "string", "enum": ["created", "approved", "rejected", "shipped"] },
      "approved_at": { "type": "datetime", "required": false },
      "rejected_at": { "type": "datetime", "required": false }
    },
    "states": [
      { "id": "created", "type": "default" },
      { "id": "approved", "type": "default" },
      { "id": "rejected", "type": "terminal" },
      { "id": "shipped", "type": "terminal" }
    ],
    "transitions": [
      {
        "id": "approve",
        "from": "created",
        "on": "approve",
        "to": "approved",
        "mutate": ["status", "approved_at"]
      },
      {
        "id": "reject",
        "from": "created",
        "on": "reject",
        "to": "rejected",
        "mutate": ["status", "rejected_at"]
      },
      {
        "id": "ship",
        "from": "approved",
        "on": "ship",
        "to": "shipped",
        "mutate": ["status"]
      }
    ]
  }
}

Desglose del Ejemplo:

  • Esquema de Contexto: Define order_id, status, approved_at, rejected_at.
  • Transición con Mutación: La transición approve declara explícitamente mutate: ["status", "approved_at"]. Solo estos campos pueden cambiar.
  • Estados Terminales: rejected y shipped no tienen transiciones salientes.
  • Determinismo: Cada par (estado, evento) mapea a exactamente una transición.

Protocolo de Restricción de IA