orquestador/specs/SIMULATION.md

38 lines
2.4 KiB
Markdown

# Simulación administrativa
POST /api/v1/admin/flows/{id}/simulate requiere FLOW_ADMIN_ENABLED, FLOW_EDITOR
y un businessScope permitido por ADMIN_BUSINESS_SCOPES. El actor del JSON es un
fixture para evaluar roles/guardias del flujo; no autentica al llamador. No acepta
un token dentro del JSON como autoridad. Flujos DRAFT/PUBLISHED/RETIRED pueden
evaluarse; nunca se cambia estado de publicación, checksum o revisión.
Se lee una versión del flujo y se libera el bloqueo antes de evaluar. Body UTF-8
máximo 1 MiB, sin claves duplicadas; requestData/event.data y cada resultado tienen
límite 256 KiB. Aplica SimulationInput/SimulationResult del contrato. Un error de
sintaxis es 400, tamaño 413, contrato/tipos/ambigüedad 422; rol de negocio del fixture
no permitido 403 y evento inexistente 409. Respuesta no-store.
La simulación recorre una transición: valida datos de estado actual (dataSchema),
evento, roles/guardia y mappings de entradas; luego valida fixtures de resultados
contra contratos/perfiles del catálogo confiable. results usa exactamente los
resultKey de acciones externas seleccionadas; no se permiten resultados sobrantes
ni omitidos. NO_OP toma output de su definición y no necesita una entrada results.
Sigue prohibido publicar/ejecutar NO_OP en el worker.
Los drafts usan versión de contrato/perfil indicada o default del catálogo. Las
publicadas usan sus versiones fijadas. No requiere rutas HTTP ni secretos; catálogo
de contratos sí. No resuelve referencias de schemas a red/archivos. Las guardias se
evalúan antes de resultados, como al aceptar un evento real. Las decisiones, updates,
validación final y reglas coincidentes usan TransitionEvaluator compartido con el
worker. UNIQUE ambiguo devuelve AMBIGUOUS_DECISION, no una ruta de negocio.
No crea solicitudes, ejecuciones, checkpoints, referencias documentales, auditorías
ni eventos. No invoca proveedores ni ejecuta reintentos. Las respuestas documentales
son fixtures, no prueba de propiedad/antivirus de un documento real. La simulación
valida MIME/tamaño/tipo configurados, no verifica almacenamiento o consentimiento.
No equivale a publicar un draft válido ni a un recorrido persistente de demo.
Ejemplo: [simulate.http](../examples/http/simulate.http). FlowSimulationTest cubre
fronteras, contrato, guardias, NO_OP y ambigüedad; SimulationIT comprueba JWT/ACL,
schemas HTTP, límites y que los conteos/revisión permanecen iguales tras simular.