Documentos de Decision Gate

Evaluación de puertas determinista, reproducible con decisiones auditables.

Documentación de Asset Core

configuración de decision-gate.toml

Resumen

decision-gate.toml configura el servidor MCP, las políticas de confianza, los valores predeterminados de divulgación de evidencia y el registro de proveedores. Todas las entradas son validadas y fallan en cerrado ante errores.

Secciones de Nivel Superior

[server]

Configuración de transporte del servidor, autenticación, límites y auditoría.

CampoTipoPredeterminadoNotas
transport”stdio” | “http” | “sse”stdioProtocolo de transporte para MCP.
mode”strict” | “dev_permissive”strictModo operativo para MCP (dev_permissive es legado).
tls_termination”server” | “upstream”serverDonde se termina TLS para el transporte HTTP/SSE.
bindcadenanullDirección de enlace para el transporte HTTP/SSE.
max_body_bytesentero1048576Tamaño máximo de la solicitud JSON-RPC en bytes.
limitstabla{ max_inflight = 256 }Límites de solicitud para el servidor MCP.
authtablanullConfiguración de autenticación entrante para llamadas a herramientas MCP.
tlstablanullConfiguración de TLS para transportes HTTP/SSE.
audittabla{ enabled = true }Configuración de registro de auditoría estructurada.
feedbacktablan/aConfiguración de divulgación de comentarios para respuestas de herramientas.
toolstabla{ mode = “filter”, allowlist = [], denylist = [] }Configuración de visibilidad de herramientas para listados de herramientas MCP.

HTTP/SSE requieren bind; el no-loopback requiere una opción explícita de CLI más TLS o tls_termination = "upstream" + autenticación no local.

[server.auth]

Autenticación/autorización entrante para llamadas a herramientas MCP.

CampoTipoPredeterminadoNotas
mode”local_only” | “bearer_token” | “mtls”local_onlyModo de autenticación entrante para llamadas a herramientas MCP.
bearer_tokensarray[]Tokens de portador permitidos.
mtls_subjectsarray[]Sujetos mTLS permitidos (a través del encabezado de proxy de confianza).
allowed_toolsarray[]Lista opcional de herramientas permitidas para llamadas entrantes.
principalsarray[]Mapeos opcionales de principal a rol.

Ejemplo de token de portador:

[server.auth]
mode = "bearer_token"
bearer_tokens = ["token-1", "token-2"]
allowed_tools = ["scenario_define", "scenario_start", "scenario_next"]

ejemplo de sujeto mTLS (a través de encabezado de proxy de confianza):

[server.auth]
mode = "mtls"
mtls_subjects = ["CN=decision-gate-client,O=Example Corp"]

Cuando se utiliza el modo mtls, el servidor espera el encabezado x-decision-gate-client-subject de un proxy TLS de confianza.

Ejemplo de mapeo principal (ACL de registro):

[[server.auth.principals]]
subject = "loopback"
policy_class = "prod"

[[server.auth.principals.roles]]
name = "TenantAdmin"
tenant_id = 1
namespace_id = 1

El ACL del registro incorporado espera valores de policy_class como prod, project o scratch (sin distinción entre mayúsculas y minúsculas). Los valores desconocidos se tratan como prod.

[server.audit]

Configuración de registro de auditoría estructurada.

CampoTipoPredeterminadoNotas
enabledbooltrueHabilitar el registro de auditoría estructurado (líneas JSON).
pathstringnullRuta del registro de auditoría (líneas JSON).
log_precheck_payloadsboolfalseRegistrar cargas útiles de prechequeo en bruto (opción explícita).

[server.feedback]

Controles de divulgación de comentarios para las respuestas de la herramienta.

CampoTipoPredeterminadoNotas
scenario_nexttabla{ default = “summary”, local_only_default = “trace”, max = “trace” }Política de retroalimentación para las respuestas de scenario_next.

Niveles de retroalimentación: summary (solo puertas no cumplidas), trace (estado de puerta + condición), evidence (incluye registros de evidencia, sujeto a la política de divulgación).

[server.feedback.scenario_next]

Política de retroalimentación para respuestas de scenario_next.

CampoTipoPredeterminadoNotas
default”summary” | “trace” | “evidence”summaryNivel de retroalimentación predeterminado para solicitudes no locales.
local_only_default”summary” | “trace” | “evidence”traceNivel de retroalimentación predeterminado para solicitudes solo locales.
max”summary” | “trace” | “evidence”traceNivel máximo de retroalimentación permitido.
trace_subjectsarray[“loopback”, “stdio”]Identificadores de sujeto permitidos para solicitar retroalimentación de trazas.
trace_rolesarray[]Nombres de roles permitidos para solicitar retroalimentación de trazas.
evidence_subjectsarray[]Identificadores de sujeto permitidos para solicitar retroalimentación de evidencia.
evidence_rolesarray[]Nombres de roles permitidos para solicitar retroalimentación de evidencia.

Los valores predeterminados solo locales se aplican a loopback/stdio. Los sujetos y roles se resuelven a partir de server.auth.principals.

[server.tools]

Configuración de visibilidad de herramientas para la salida de herramientas/lista.

CampoTipoPredeterminadoNotas
mode”filter” | “passthrough”filterModo de visibilidad para la salida de herramientas/lista.
allowlistarray[]
denylistarray[]

La visibilidad es independiente de la autenticación: las herramientas ocultas se omiten de tools/list y se tratan como desconocidas cuando se llaman.

[server.limits]

Solicitar concurrencia y límites de tasa.

CampoTipoPredeterminadoNotas
max_inflightentero256Máximo de solicitudes MCP concurrentes.
rate_limittablanullConfiguración de límite de tasa opcional.

[server.limits.rate_limit]

Configuración de límite de tasa opcional estilo token-bucket.

CampoTipoPredeterminadoNotas
max_requestsentero1000Máximo de solicitudes por ventana de límite de tasa.
window_msentero1000Ventana de límite de tasa en milisegundos.
max_entriesentero4096Máximo de entradas de límite de tasa distintas.

[server.tls]

Configuración de TLS para transportes HTTP/SSE.

CampoTipoPredeterminadoNotas
cert_pathcadenan/aCertificado TLS del servidor (PEM).
key_pathcadenan/aClave privada TLS del servidor (PEM).
client_ca_pathcadenanullPaquete CA del cliente opcional para mTLS.
require_client_certbooltrueRequiere certificado del cliente para mTLS.

[dev]

Sobrescrituras explícitas de permisos de desarrollo (solo con opt-in).

CampoTipoPredeterminadoNotas
permissiveboolfalseHabilitar modo dev-permissive (opción explícita).
permissive_scope”asserted_evidence_only”asserted_evidence_onlySelección de ámbito dev-permissive.
permissive_ttl_daysintegernullTTL opcional para advertencias dev-permissive (días).
permissive_warnbooltrueEmitir advertencias cuando dev-permissive esté habilitado/expirado.
permissive_exempt_providersarray[“assetcore_read”, “assetcore”]Proveedores exentos de relajaciones dev-permissive.

Dev-permissive es rechazado cuando namespace.authority.mode = "assetcore_http".

[namespace]

Lista blanca de espacios de nombres y selección de autoridad.

CampoTipoPredeterminadoNotas
allow_defaultboolfalsePermitir el ID del espacio de nombres predeterminado (1).
default_tenantsarray[]Lista de permitidos de inquilinos requerida cuando allow_default es verdadero.
authoritytable{ mode = “none” }Selección del backend de autoridad del espacio de nombres.

[namespace.authority]

Configuración del backend de autoridad de namespace.

CampoTipoPredeterminadoNotas
mode”none” | “assetcore_http”noneSelección del backend de autoridad de namespace.
assetcoretablanullConfiguraciones de autoridad de namespace de Asset Core.

[namespace.authority.assetcore]

Configuración de autoridad del espacio de nombres de Asset Core.

CampoTipoPredeterminadoNotas
base_urlcadenan/aURL base del daemon de escritura de Asset Core.
auth_tokencadenanullToken de portador opcional para la búsqueda de espacio de nombres.
connect_timeout_msentero500Tiempo de espera de conexión HTTP (ms).
request_timeout_msentero2000Tiempo de espera de solicitud HTTP (ms).

Ejemplo de autoridad de Asset Core:

[namespace.authority]
mode = "assetcore_http"

[namespace.authority.assetcore]
base_url = "http://127.0.0.1:9001"
auth_token = "token"
connect_timeout_ms = 500
request_timeout_ms = 2000

[confianza]

Configuraciones predeterminadas de la confianza y aplicación de la firma del proveedor.

CampoTipoPredeterminadoNotas
default_policy”audit”auditPolítica de confianza predeterminada para proveedores.
min_lane”verified” | “asserted”verifiedMínima evidencia de confianza aceptada.

require_signature formulario:

[trust]
default_policy = { require_signature = { keys = ["key1.pub"] } }

[evidencia]

Política de divulgación de evidencia por defecto.

CampoTipoPredeterminadoNotas
allow_raw_valuesboolfalsePermitir la divulgación de valores de evidencia en bruto.
require_provider_opt_inbooltrueRequerir la aceptación del proveedor para la divulgación en bruto.

[descubrimientodelproveedor]

Controles de divulgación del contrato/esquema del proveedor.

CampoTipoPredeterminadoNotas
allowlistarray[]Lista de permitidos opcional para la divulgación del proveedor.
denylistarray[]Identificadores de proveedores denegados para la divulgación.
max_response_bytesinteger1048576Tamaño máximo de respuesta para herramientas de descubrimiento de proveedores.

[anclas]

Configuración de la política de anclaje de evidencia.

CampoTipoPredeterminadoNotas
providersarray[]Requisitos de anclaje específicos del proveedor.

[[anchors.providers]]

Requisitos de anclaje específicos del proveedor.

CampoTipoRequeridoPredeterminadoNotas
provider_idcadenan/aIdentificador del proveedor que requiere anclajes.
anchor_typecadenan/aIdentificador del tipo de anclaje esperado en los resultados.
required_fieldsarrayn/aCampos requeridos en anchor_value.

Ejemplo de política de anclaje (Asset Core):

[anchors]
[[anchors.providers]]
provider_id = "assetcore_read"
anchor_type = "assetcore.anchor_set"
required_fields = ["assetcore.namespace_id", "assetcore.commit_id", "assetcore.world_seq"]

[política]

Selección del motor de políticas de despacho.

CampoTipoPredeterminadoNotas
engine”permit_all” | “deny_all” | “static”permit_allSelección del motor de política de despacho.
statictablanullReglas de política de despacho estático.

Ejemplo de política estática:

[policy]
engine = "static"

[policy.static]
default = "deny"

[[policy.static.rules]]
effect = "permit"
target_kinds = ["agent"]
require_labels = ["public"]

[policy.static]

Reglas de política de despacho estático.

CampoTipoPredeterminadoNotas
default”permitir” | “denegar”denegarDecisión predeterminada cuando no coinciden las reglas.
rulesarray[]Lista ordenada de reglas de política estáticas.

[[policy.static.rules]]

Campos de reglas de política estática.

CampoTipoPredeterminadoNotas
effect”permitir” | “denegar” | “error”n/aEfecto de la regla.
error_messagecadenanullMensaje de error cuando el efecto es ‘error’.
target_kindsarray[]Tipos de destino que pueden recibir el paquete.
targetsarray[]Selectores de destino específicos.
require_labelsarray[]Etiquetas de visibilidad requeridas para coincidir.
forbid_labelsarray[]Etiquetas de visibilidad que bloquean una coincidencia.
require_policy_tagsarray[]Etiquetas de política requeridas para coincidir.
forbid_policy_tagsarray[]Etiquetas de política que bloquean una coincidencia.
content_typesarray[]Tipos de contenido permitidos.
schema_idsarray[]Identificadores de esquema permitidos.
packet_idsarray[]Identificadores de paquete permitidos.
stage_idsarray[]Identificadores de etapa permitidos.
scenario_idsarray[]Identificadores de escenario permitidos.

Campos del selector de destino (policy.static.rules.targets):

CampoTipoNotas
target_kind”agent” | “session” | “external” | “channel”Tipo de objetivo.
target_idcadenaIdentificador de agente/sesión/canal.
systemcadenaNombre del sistema externo (solo externo).
targetcadenaIdentificador del objetivo externo (solo externo).

[validación]

Política de validación de comparadores para escenarios y prechecks.

CampoTipoPredeterminadoNotas
strictbooltrueHacer cumplir la validación del comparador estricto.
profile”strict_core_v1”strict_core_v1Identificador del perfil de comparador estricto.
allow_permissiveboolfalseOpción explícita para la validación permisiva.
enable_lexicographicboolfalseHabilitar comparadores lexicográficos (opción por esquema).
enable_deep_equalsboolfalseHabilitar comparadores de igualdad profunda (opción por esquema).

Validación estricta (por defecto):

[validation]
strict = true
profile = "strict_core_v1"

Validación permisiva (opt-in explícito):

[validation]
strict = false
allow_permissive = true

Familias de comparadores opcionales:

[validation]
enable_lexicographic = true
enable_deep_equals = true

[runpack_storage]

Configuración de almacenamiento de Runpack.

CampoTipoRequeridoPredeterminadoNotas
type”object_store”n/aSelección del backend de almacenamiento de runpack.
provider”s3”n/aProveedor de almacenamiento de objetos.
bucketstringn/aNombre del bucket para el almacenamiento de runpack.
regionstringnonullAnulación opcional de la región S3.
endpointstringnonullEndpoint opcional compatible con S3.
prefixstringnonullPrefijo de clave opcional dentro del bucket.
force_path_styleboolnofalseForzar la dirección de estilo de ruta (compatible con S3).
allow_httpboolnofalsePermitir endpoints no TLS (opción explícita).

[runstatestore]

Ejecutar configuraciones de persistencia del estado de ejecución.

CampoTipoPredeterminadoNotas
type”memory” | “sqlite”memorySelección del backend de almacenamiento del estado de ejecución.
pathcadenanullRuta de la base de datos SQLite.
busy_timeout_msentero5000Tiempo de espera ocupado de SQLite (ms).
journal_mode”wal” | “delete”walModo de diario de SQLite.
sync_mode”full” | “normal”fullModo de sincronización de SQLite.
max_versionsenteronullMáximas versiones opcionales retenidas por ejecución.

Ejemplo de SQLite:

[run_state_store]
type = "sqlite"
path = "decision-gate.db"
journal_mode = "wal"
sync_mode = "full"
busy_timeout_ms = 5000
max_versions = 1000

[schema_registry]

Persistencia y límites del registro de esquemas.

CampoTipoPredeterminadoNotas
type”memory” | “sqlite”memorySelección del backend del registro de esquemas.
pathcadenanullRuta de la base de datos SQLite.
busy_timeout_msentero5000Tiempo de espera ocupado de SQLite (ms).
journal_mode”wal” | “delete”walModo de diario de SQLite.
sync_mode”full” | “normal”fullModo de sincronización de SQLite.
max_schema_bytesentero1048576Tamaño máximo de carga útil del esquema en bytes.
max_entriesenteronullMáximo opcional de esquemas por inquilino + espacio de nombres.
acltabla{ mode = “builtin” }Configuración de ACL del registro de esquemas.

[schema_registry.acl]

Configuración de ACL del registro de esquemas.

CampoTipoPredeterminadoNotas
mode”builtin” | “custom”builtinReglas de rol integradas o reglas de ACL personalizadas.
default”deny” | “allow”denyDecisión predeterminada cuando no hay coincidencias de reglas (solo personalizado).
allow_local_onlyboolfalsePermitir que los sujetos solo locales accedan al registro al usar la ACL integrada.
require_signingboolfalseRequerir metadatos de firma de esquema en las escrituras.
rulesarray[]Reglas de ACL personalizadas (modo = custom).

La ACL incorporada se basa en server.auth.principals para la resolución de roles y policy_class. Sin los principales, el acceso al registro se niega por defecto a menos que allow_local_only esté habilitado (solo loopback/stdio). Habilite allow_local_only por conveniencia en desarrollo; elude el mapeo de principales para llamadores solo locales.

Ejemplo de ACL personalizada:

[schema_registry.acl]
mode = "custom"
default = "deny"

[[schema_registry.acl.rules]]
effect = "allow"
actions = ["register", "list", "get"]
tenants = [1]
namespaces = [1]
roles = ["TenantAdmin", "NamespaceAdmin"]

[[schema_registry.acl.rules]]

Campos de regla ACL personalizados.

CampoTipoPredeterminadoNotas
effect”allow” | “deny”n/aEfecto de la regla.
actionsarray[]Acciones del registro cubiertas por la regla.
tenantsarray[]Alcance del identificador del inquilino.
namespacesarray[]Alcance del identificador del espacio de nombres.
subjectsarray[]Sujetos principales en alcance.
rolesarray[]Nombres de roles en alcance.
policy_classesarray[]Etiquetas de clase de política en alcance.

[docs]

Búsqueda de documentación y configuración de recursos.

CampoTipoPredeterminadoNotas
enabledbooltrueHabilitar superficies de documentos globalmente.
enable_searchbooltrueHabilitar herramienta de búsqueda de documentos.
enable_resourcesbooltrueHabilitar lista/lectura de recursos MCP.
include_default_docsbooltrueIncluir el conjunto de documentos predeterminados incrustados.
extra_pathsarray[]Rutas de documentos adicionales para ingerir (archivos o directorios).
max_doc_bytesinteger262144Tamaño máximo para una entrada de documento única en bytes.
max_total_bytesinteger1048576Tamaño total máximo de documentos para el catálogo.
max_docsinteger32Número máximo de documentos en el catálogo.
max_sectionsinteger10Máximo de secciones devueltas por la búsqueda de documentos.

La búsqueda de documentos y los recursos son deterministas y solo locales por defecto. Utilice extra_paths para ingerir archivos o directorios markdown locales.

[[providers]]

Las entradas de proveedor registran proveedores integrados o MCP.

CampoTipoRequeridoPredeterminadoNotas
namecadenan/aIdentificador del proveedor.
type”builtin” | “mcp”n/aTipo de proveedor.
commandarrayno[]
urlcadenanonullURL HTTP del proveedor.
allow_insecure_httpboolnofalsePermitir URLs http:// para proveedores MCP.
capabilities_pathcadenanonullRuta al contrato de capacidades del proveedor en formato JSON.
authtablanonull
trustdesconocidononullPolítica de confianza predeterminada para proveedores.
allow_rawboolnofalsePermitir la divulgación de evidencia en bruto para este proveedor.
timeoutstablano{ connect_timeout_ms = 2000, request_timeout_ms = 10000 }Anulaciones de tiempo de espera HTTP para proveedores MCP.
configjsonnonullBlob de configuración específico del proveedor.

auth form:

auth = { bearer_token = "token" }

trust formulario de anulación:

trust = { require_signature = { keys = ["provider.pub"] } }

capabilities_path ejemplo para proveedores de MCP:

[[providers]]
name = "mongo"
type = "mcp"
command = ["mongo-provider", "--stdio"]
capabilities_path = "contracts/mongo_provider.json"

timeouts formulario (proveedores HTTP MCP):

timeouts = { connect_timeout_ms = 2000, request_timeout_ms = 10000 }

Ejemplo de proveedor HTTP con tiempos de espera:

[[providers]]
name = "ci"
type = "mcp"
url = "https://ci.example.com/rpc"
capabilities_path = "contracts/ci_provider.json"
timeouts = { connect_timeout_ms = 2000, request_timeout_ms = 10000 }

Restricciones de tiempo:

  • connect_timeout_ms debe estar entre 100 y 10000.
  • request_timeout_ms debe estar entre 500 y 30000 y ser >= connect_timeout_ms.

[providers.timeouts]

Timeouts de anulación para proveedores HTTP MCP.

CampoTipoPredeterminadoNotas
connect_timeout_msentero2000Tiempo de espera de conexión TCP/TLS (ms).
request_timeout_msentero10000Tiempo de espera total de la solicitud (ms).

Configuración del Proveedor Incorporado

Los proveedores integrados aceptan bloques config opcionales:

  • time:
    • allow_logical (bool, por defecto true)
  • env:
    • lista blanca (array)
    • lista_de_negación (array)
    • max_value_bytes (entero)
    • max_key_bytes (entero)
    • anulaciones (tabla)
  • json:
    • raíz (string)
    • root_id (cadena)
    • max_bytes (entero)
    • allow_yaml (bool)
  • http:
    • allow_http (bool)
    • timeout_ms (entero)
    • max_response_bytes (entero)
    • allowed_hosts (array)
    • user_agent (cadena)
    • hash_algorithm (cadena)