Libro de Cocina para la Autorización de Condiciones
A primera vista
Qué: Definir condiciones que evalúen de manera determinista y validen de forma clara Por qué: Las condiciones conectan puertas a evidencia; la precisión es importante Quién: Desarrolladores y operadores que redactan escenarios de Decision Gate Requisitos previos: evidence_flow_and_execution_model.md
¿Qué es una Condición?
Una condición es una verificación de evidencia:
{
"condition_id": "tests_ok",
"query": {
"provider_id": "json",
"check_id": "path",
"params": { "file": "report.json", "jsonpath": "$.summary.failed" }
},
"comparator": "equals",
"expected": 0,
"policy_tags": []
}
Consiste en:
- Consulta: qué evidencia recuperar.
- Comparador: cómo comparar.
- Valor esperado: el valor con el que comparar (si es necesario).
Resultados de Tri-State
Los comparadores devuelven TriState:
- verdadero
- falso
- desconocido
Reglas clave (exactas):
- Si
EvidenceResult.valueestá faltante, el resultado esunknown(exceptoexists/not_exists). - Si
expectedestá faltante, el resultado esunknown(exceptoexists/not_exists). equals/not_equalsdevuelve false/true en caso de desajuste de tipo.- Ordering, lexicográfico, contiene, in_set, deep_* devuelve
unknownen caso de desajuste de tipo.
Referencia del Comparador
Reglas Generales
exists/not_existsverifica la presencia de EvidenceResult.value, nonullde JSON.- JSON
nulles un valor presente (por lo queexistsdevuelve verdadero).
Tabla de Comparadores
| Comparador | Tipos de Evidencia | Requerido Esperado | Comportamiento de Desajuste de Tipo |
|---|---|---|---|
equals | cualquier valor JSON, bytes | sí | devuelve false |
not_equals | cualquier valor JSON, bytes | sí | devuelve true |
greater_than / >= / < / <= | número o cadena de fecha/hora RFC3339 | sí | unknown |
lex_* | cadena | sí | unknown |
contains | cadena o array | sí | unknown |
in_set | JSON escalar | sí (array) | unknown |
deep_equals / deep_not_equals | objeto o array | sí | unknown |
exists / not_exists | cualquier | no | n/a |
Detalles
Igualdad (equals, not_equals)
- Los números se comparan mediante igualdad consciente de decimales (
10==10.0). - Para tipos no numéricos, se utiliza la igualdad JSON.
Ordenación (greater_than, etc.)
- Acepta números o cadenas de fecha/hora RFC3339 (incluyendo solo fecha
YYYY-MM-DD). - Cualquier otro tipo ->
unknown.
Lexicográfico (lex_*)
- Solo cadenas; compara puntos de código Unicode.
- Requiere configuración explícita + opción de esquema (ver “Validación estricta”).
Contiene
- Cadena: coincidencia de subcadena.
- Array: el array de evidencia debe contener todos los elementos del array esperado.
En Conjunto (in_set)
- Se esperaba que fuera un array.
- La evidencia debe ser escalar (no un array/objeto).
Deep Equals
- Objetos/arrays solamente; tipos no coincidentes ->
unknown. - Requiere configuración explícita + opción de esquema.
Bytes
- Solo se definen
equals/not_equals. - Se espera que sea un array JSON de enteros
0..255.
Validación Estricta (Activado por Defecto)
La puerta de decisión valida las condiciones en el momento de scenario_define:
- Para las condiciones basadas en el proveedor, el contrato del proveedor define los comparadores y tipos de resultados permitidos.
- Para la pre-verificación, el esquema de forma de datos define los comparadores y tipos permitidos.
Los comparadores especiales requieren ambos:
- Configurar las banderas (
validation.enable_lexicographic/validation.enable_deep_equals), y - Opción explícita de esquema a través de
x-decision-gate.allowed_comparators(precheck) o contratoallowed_comparators.
Si la validación falla, scenario_define o precheck son rechazados.
Patrones de Proveedor
Proveedor de tiempo
- Comprobaciones:
now,after,before. after/beforeaceptantimestampcomo unix millis o cadena RFC3339.afteres estrictamente mayor que;beforees estrictamente menor que.
proveedor env
- Verificar:
get. - La clave faltante devuelve
value = Nonesin error. - Las claves bloqueadas o inválidas devuelven un error del proveedor (
provider_erroren el límite de la herramienta).
proveedor json
- Verifique:
path. - JSONPath no-match devuelve
error.code = "jsonpath_not_found"yvalue = None.
Proveedor http
- Comprobaciones:
status,body_hash. statusdevuelve un estado HTTP entero.body_hashdevuelve un objeto HashDigest{ algorithm, value }.body_hashpermite soloexists/not_exists(según contrato).
Evitando unknown
Para minimizar los resultados unknown:
- Proporcionar
expectedpara todos los comparadores exceptoexists/not_exists. - Coincidir tipos exactamente para comparadores de no igualdad.
- Utilice contratos de proveedor para confirmar los comparadores permitidos.
Divulgación de Evidencias
Los valores de evidencia no son devueltos por scenario_next por defecto. Utilice feedback: "evidence" si está permitido, o inspeccione la evidencia a través de:
- Utilice
evidence_query(sujeto a la política de divulgación), o - Exportar un runpack con runpack_export.
La política de divulgación está configurada en decision-gate.toml:
[evidence]
allow_raw_values = false
require_provider_opt_in = true
[[providers]]
name = "json"
type = "builtin"
allow_raw = true
allow_raw es una bandera de config por proveedor (no forma parte del contrato del proveedor). Los nombres de los proveedores son únicos; los identificadores integrados (time, env, json, http) están reservados.
Checklist
- Los IDs de condición son únicos dentro del escenario.
- El nombre de verificación del proveedor coincide con el contrato del proveedor.
- Se permite el comparador para el esquema de resultados.
- El tipo de valor esperado coincide con el tipo de evidencia.
-
policy_tagspresente (requerido por el esquema, puede estar vacío).