Decision Gate Docs

Avaluació de portes determinista, reproduïble amb decisions auditable.

Asset Core docs

configuració decision-gate.toml

Visió general

decision-gate.toml configura el servidor MCP, les polítiques de confiança, els valors per defecte de divulgació d’evidències i el registre de proveïdors. Totes les entrades són validades i fallen tancades en cas d’errors.

Seccions de nivell superior

[server]

Configuració del transport del servidor, autenticació, límits i auditoria.

CampTipusPer defecteNotes
transport”stdio” | “http” | “sse”stdioProtocol de transport per MCP.
mode”strict” | “dev_permissive”strictMode operatiu per MCP (dev_permissive és llegat).
tls_termination”server” | “upstream”serverOn es finalitza TLS per al transport HTTP/SSE.
bindcadenanullAdreça de vinculació per al transport HTTP/SSE.
max_body_bytesenter1048576Mida màxima de la sol·licitud JSON-RPC en bytes.
limitstaula{ max_inflight = 256 }Límits de sol·licitud per al servidor MCP.
authtaulanullConfiguració d’autenticació d’entrada per a les crides d’eines MCP.
tlstaulanullConfiguració de TLS per als transports HTTP/SSE.
audittaula{ enabled = true }Configuració de registre d’auditoria estructurada.
feedbacktaulan/aConfiguració de divulgació de comentaris per a les respostes d’eines.
toolstaula{ mode = “filter”, allowlist = [], denylist = [] }Configuració de visibilitat d’eines per a les llistes d’eines MCP.

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

[server.auth]

Autenticació i autorització d’entrada per a les trucades d’eines MCP.

CampTipusPer defecteNotes
mode”local_only” | “bearer_token” | “mtls”local_onlyMode d’autenticació entrant per a les trucades d’eines MCP.
bearer_tokensarray[]Tokens de portador permesos.
mtls_subjectsarray[]Subjectes mTLS permesos (a través de l’encapçalament de proxy de confiança).
allowed_toolsarray[]Llista d’eines opcional per a trucades entrants.
principalsarray[]Mapeigs opcionals de principals a rols.

Exemple de token portador:

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

Exemple de subjecte mTLS (a través de l’encapçalament de proxy de confiança):

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

Quan s’utilitza el mode mtls, el servidor espera l’encapçalament x-decision-gate-client-subject d’un proxy TLS de confiança.

Exemple de mapeig principal (ACL del registre):

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

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

El registre ACL integrat espera valors de policy_class com prod, project o scratch (sense distinció entre majúscules i minúscules). Els valors desconeguts es tracten com a prod.

[server.audit]

Configuració de registre d’auditoria estructurada.

CampTipusPer defecteNotes
enabledbooltrueHabilita el registre d’auditoria estructurat (linies JSON).
pathstringnullRuta del registre d’auditoria (linies JSON).
log_precheck_payloadsboolfalseRegistra les càrregues útils de precomprovació en brut (opció explícita).

[server.feedback]

Controls de divulgació de comentaris per a les respostes de l’eina.

CampTipusPer defecteNotes
scenario_nexttaula{ default = “summary”, local_only_default = “trace”, max = “trace” }Política de retroalimentació per a les respostes de scenario_next.

Nivells de retroalimentació: summary (només portes no complertes), trace (estat de la porta + condició), evidence (inclou registres d’evidència, subjectes a la política de divulgació).

[server.feedback.scenario_next]

Política de feedback per a les respostes de scenario_next.

CampTipusPer defecteNotes
default”summary” | “trace” | “evidence”summaryNivell de retroalimentació per defecte per a sol·licituds no locals.
local_only_default”summary” | “trace” | “evidence”traceNivell de retroalimentació per defecte per a sol·licituds només locals.
max”summary” | “trace” | “evidence”traceNivell màxim de retroalimentació permès.
trace_subjectsarray[“loopback”, “stdio”]Identificadors de subjectes permesos per sol·licitar retroalimentació de traç.
trace_rolesarray[]Noms de rols permesos per sol·licitar retroalimentació de traç.
evidence_subjectsarray[]Identificadors de subjectes permesos per sol·licitar retroalimentació d’evidència.
evidence_rolesarray[]Noms de rols permesos per sol·licitar retroalimentació d’evidència.

Els valors per defecte només locals s’apliquen a loopback/stdio. Els subjectes i rols es resolen a partir de server.auth.principals.

[server.tools]

Configuració de visibilitat de les eines per a la sortida d’eines/llista.

CampTipusPer defecteNotes
mode”filter” | “passthrough”filterMode de visibilitat per a l’output d’eines/llista.
allowlistarray[]
denylistarray[]

La visibilitat és independent de l’autenticació: les eines ocultes s’ometen de tools/list i es tracten com a desconegudes quan s’invoquen.

[server.limits]

Sol·licituds de concurrència i límits de taxa.

CampTipusPer defecteNotes
max_inflightenter256Màxim de sol·licituds MCP concurrent.
rate_limittaulanullConfiguració opcional de límit de taxa.

[server.limits.rate_limit]

Configuració opcional de límit de taxa al estil de bucket.

CampTipusPer defecteNotes
max_requestsenter1000Màxim de sol·licituds per finestra de límit de taxa.
window_msenter1000Finestra de límit de taxa en mil·lisegons.
max_entriesenter4096Màxim d’entrades distintes del límit de taxa.

[server.tls]

Configuració TLS per a transports HTTP/SSE.

CampTipusPer defecteNotes
cert_pathcadenan/aCertificat TLS del servidor (PEM).
key_pathcadenan/aClau privada TLS del servidor (PEM).
client_ca_pathcadenanullPaquet CA del client opcional per mTLS.
require_client_certbooltrueRequerir certificat del client per mTLS.

[dev]

Overrides explícits de permís de desenvolupament (només opt-in).

CampTipusPer defecteNotes
permissiveboolfalseHabilita el mode dev-permissive (opció explícita).
permissive_scope”asserted_evidence_only”asserted_evidence_onlySelecció de l’abast dev-permissive.
permissive_ttl_daysintegernullTTL opcional per a advertències dev-permissive (dies).
permissive_warnbooltrueEmetre advertències quan dev-permissive estigui habilitat/expirat.
permissive_exempt_providersarray[“assetcore_read”, “assetcore”]Proveïdors exempts de relaxacions dev-permissive.

Dev-permissive és rebutjat quan namespace.authority.mode = "assetcore_http".

[namespace]

Llista blanca de namespaces i selecció d’autoritat.

CampTipusPer defecteNotes
allow_defaultboolfalsePermetre l’ID de l’espai de noms per defecte (1).
default_tenantsarray[]Llista blanca de llogaters requerida quan allow_default és true.
authoritytable{ mode = “none” }Selecció del backend d’autoritat de l’espai de noms.

[namespace.authority]

Configuració del backend de l’autoritat del namespace.

CampTipusPer defecteNotes
mode”none” | “assetcore_http”noneSelecció del backend d’autoritat de namespace.
assetcoretaulanullConfiguracions d’autoritat de namespace d’Asset Core.

[namespace.authority.assetcore]

Configuració de l’autoritat del namespace d’Asset Core.

CampTipusPer defecteNotes
base_urlcadenan/aURL base del daemon d’escriptura d’Asset Core.
auth_tokencadenanullToken d’autenticació opcional per a la cerca d’espai de noms.
connect_timeout_msenter500Temps d’espera de connexió HTTP (ms).
request_timeout_msenter2000Temps d’espera de sol·licitud HTTP (ms).

Exemple d’autoritat d’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

[trust]

Confiança per defecte i aplicació de la signatura del proveïdor.

CampTipusPer defecteNotes
default_policy”audit”auditPolítica de confiança per defecte per als proveïdors.
min_lane”verified” | “asserted”verifiedMínima evidència de confiança acceptada.

require_signature formulari:

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

[evidència]

Política de divulgació d’evidències per defecte.

CampTipusPer defecteNotes
allow_raw_valuesboolfalsePermetre que es revelin valors d’evidència en brut.
require_provider_opt_inbooltrueRequerir que el proveïdor opti per la divulgació en brut.

[provider_discovery]

Controls de divulgació del contracte/schema del proveïdor.

CampTipusPer defecteNotes
allowlistarray[]Llista d’aprovació opcional per a la divulgació del proveïdor.
denylistarray[]Identificadors del proveïdor denegats per a la divulgació.
max_response_bytesinteger1048576Mida màxima de resposta per a les eines de descoberta del proveïdor.

[ancoratges]

Configuració de la política d’ancoratge d’evidència.

CampTipusPer defecteNotes
providersarray[]Requisits d’ancoratge específics del proveïdor.

[[anchors.providers]]

Requisits d’ancoratge específics del proveïdor.

CampTipusRequeritPer defecteNotes
provider_idcadenan/aIdentificador del proveïdor que requereix ancoratges.
anchor_typecadenan/aIdentificador del tipus d’ancoratge esperat en els resultats.
required_fieldsarrayn/aCamps requerits en anchor_value.

Exemple de política d’ancoratge (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ó del motor de política de dispatch.

CampTipusPer defecteNotes
engine”permit_all” | “deny_all” | “static”permit_allSelecció del motor de política de dispatch.
statictaulanullRegles de política de dispatch estàtic.

Exemple 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]

Regles de política de despach estàtic.

CampTipusPer defecteNotes
default”permetre” | “denegar”denegarDecisió per defecte quan no coincideixen regles.
rulesarray[]Llista ordenada de regles de política estàtiques.

[[policy.static.rules]]

Regles de política estàtica.

CampTipusPer defecteNotes
effect”permetre” | “denegar” | “error”n/aEfecte de la regla.
error_messagecadenanullMissatge d’error quan l’efecte és ‘error’.
target_kindsarray[]Tipus d’objectius que poden rebre el paquet.
targetsarray[]Seleccionadors d’objectius específics.
require_labelsarray[]Etiquetes de visibilitat requerides per coincidir.
forbid_labelsarray[]Etiquetes de visibilitat que bloquegen una coincidència.
require_policy_tagsarray[]Etiquetes de política requerides per coincidir.
forbid_policy_tagsarray[]Etiquetes de política que bloquegen una coincidència.
content_typesarray[]Tipus de contingut permesos.
schema_idsarray[]Identificadors d’esquema permesos.
packet_idsarray[]Identificadors de paquet permesos.
stage_idsarray[]Identificadors d’etapa permesos.
scenario_idsarray[]Identificadors d’escenari permesos.

Camp de selectors de destinació (policy.static.rules.targets):

CampTipusNotes
target_kind”agent” | “sessió” | “extern” | “canal”Tipus de destí.
target_idcadenaIdentificador d’agent/sessió/canal.
systemcadenaNom del sistema extern (només extern).
targetcadenaIdentificador de destí extern (només extern).

[validació]

Política de validació del comparador per a escenaris i precomprovacions.

CampTipusPer defecteNotes
strictbooltrueAplicar la validació estricta del comparador.
profile”strict_core_v1”strict_core_v1Identificador del perfil del comparador estricte.
allow_permissiveboolfalseOpt-in explícit per a la validació permissiva.
enable_lexicographicboolfalseHabilitar comparadors lexicogràfics (opt-in per esquema).
enable_deep_equalsboolfalseHabilitar comparadors d’igualtat profunda (opt-in per esquema).

Validació estricta (per defecte):

[validation]
strict = true
profile = "strict_core_v1"

Validació permissiva (opt-in explícit):

[validation]
strict = false
allow_permissive = true

Famílies de comparadors opcionals:

[validation]
enable_lexicographic = true
enable_deep_equals = true

[runpack_storage]

Configuració d’emmagatzematge de Runpack.

CampTipusRequeritPer defecteNotes
type”object_store”n/aSelecció del backend d’emmagatzematge Runpack.
provider”s3”n/aProveïdor d’emmagatzematge d’objectes.
bucketcadenan/aNom del bucket per a l’emmagatzematge Runpack.
regioncadenanonullOverride opcional de la regió S3.
endpointcadenanonullEndpoint opcional compatible amb S3.
prefixcadenanonullPrefix de clau opcional dins del bucket.
force_path_styleboolnofalseForçar l’adreçament en estil de ruta (compatible amb S3).
allow_httpboolnofalsePermetre endpoints no TLS (opció explícita).

[runstatestore]

Configuració de persistència de l’estat d’execució.

CampTipusPer defecteNotes
type”memory” | “sqlite”memorySelecció del backend de magatzem d’estat d’execució.
pathcadenanullRuta de la base de dades SQLite.
busy_timeout_msenter5000Temps d’espera ocupat de SQLite (ms).
journal_mode”wal” | “delete”walMode de diari de SQLite.
sync_mode”full” | “normal”fullMode de sincronització de SQLite.
max_versionsenternullVersions màximes opcionals retingudes per execució.

Exemple 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]

Persistència i límits del registre d’esquema.

CampTipusPer defecteNotes
type”memory” | “sqlite”memorySelecció del backend del registre d’esquema.
pathcadenanullRuta de la base de dades SQLite.
busy_timeout_msenter5000Temps d’espera ocupat de SQLite (ms).
journal_mode”wal” | “delete”walMode de diari de SQLite.
sync_mode”full” | “normal”fullMode de sincronització de SQLite.
max_schema_bytesenter1048576Mida màxima de càrrega d’esquema en bytes.
max_entriesenternullMàxim d’esquemes per inquilí + espai de noms (opcional).
acltaula{ mode = “builtin” }Configuració de l’ACL del registre d’esquema.

[schema_registry.acl]

Configuració d’ACL del registre d’esquemes.

CampTipusPer defecteNotes
mode”builtin” | “custom”builtinRegles de rol integrades o regles ACL personalitzades.
default”deny” | “allow”denyDecisió per defecte quan no coincideixen regles (només personalitzat).
allow_local_onlyboolfalsePermetre que els subjectes només locals accedeixin al registre quan s’utilitza l’ACL integrat.
require_signingboolfalseRequerir metadades de signatura de esquema en escriptures.
rulesarray[]Regles ACL personalitzades (mode = custom).

L’ACL integrat es basa en server.auth.principals per a la resolució de rols i policy_class. Sense principals, l’accés al registre es nega per defecte, a menys que allow_local_only estigui habilitat (només loopback/stdio). Habilita allow_local_only per a conveniència només en desenvolupament; evita el mapeig de principals per a trucades només locals.

Exemple d’ACL personalitzat:

[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]]

Regles de camp ACL personalitzades.

CampTipusPer defecteNotes
effect”allow” | “deny”n/aEfecte de la regla.
actionsarray[]Accions del registre cobertes per la regla.
tenantsarray[]Àmbit d’identificació del llogater.
namespacesarray[]Àmbit d’identificació de l’espai de noms.
subjectsarray[]Subjectes principals en àmbit.
rolesarray[]Noms de rols en àmbit.
policy_classesarray[]Etiquetes de classe de política en àmbit.

[docs]

Cerca de documentació i configuració de recursos.

CampTipusPer defecteNotes
enabledbooltrueHabilitar superfícies de docs globalment.
enable_searchbooltrueHabilitar eina de cerca de docs.
enable_resourcesbooltrueHabilitar llista/lectura de recursos MCP.
include_default_docsbooltrueIncloure el conjunt de docs per defecte integrat.
extra_pathsarray[]Camins de docs addicionals a ingerir (fitxers o directoris).
max_doc_bytesinteger262144Mida màxima per a una sola entrada de doc en bytes.
max_total_bytesinteger1048576Mida total màxima de bytes de docs per al catàleg.
max_docsinteger32Nombre màxim de docs al catàleg.
max_sectionsinteger10Seccions màximes retornades per la cerca de docs.

La cerca de documents i els recursos són deterministes i només locals per defecte. Utilitzeu extra_paths per ingerir fitxers o directoris markdown locals.

[[providers]]

Les entrades del proveïdor registren proveïdors integrats o MCP.

CampTipusRequeritPer defecteNotes
namecadenan/aIdentificador del proveïdor.
type”integrat” | “mcp”n/aTipus de proveïdor.
commandarrayno[]
urlcadenanonullURL HTTP del proveïdor.
allow_insecure_httpboolnofalsePermetre URLs http:// per a proveïdors MCP.
capabilities_pathcadenanonullRuta al contracte de capacitats del proveïdor en JSON.
authtaulanonull
trustdesconegutnonullPolítica de confiança per defecte per als proveïdors.
allow_rawboolnofalsePermetre la divulgació d’evidències en brut per a aquest proveïdor.
timeoutstaulano{ connect_timeout_ms = 2000, request_timeout_ms = 10000 }Overrides de temps d’espera HTTP per a proveïdors MCP.
configjsonnonullBlob de configuració específic del proveïdor.

auth form:

auth = { bearer_token = "token" }

trust formulari d’override:

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

capabilities_path exemple per a proveïdors MCP:

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

timeouts form (proveïdors HTTP MCP):

timeouts = { connect_timeout_ms = 2000, request_timeout_ms = 10000 }

Exemple de proveïdor HTTP amb temps d’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 }

Restriccions de temps:

  • connect_timeout_ms ha de ser entre 100 i 10000.
  • request_timeout_ms ha de ser entre 500 i 30000 i >= connect_timeout_ms.

[providers.timeouts]

Temps d’espera per als proveïdors MCP HTTP.

CampTipusPer defecteNotes
connect_timeout_msenter2000Temps d’espera de connexió TCP/TLS (ms).
request_timeout_msenter10000Temps d’espera total de la sol·licitud (ms).

Configuració del Proveïdor Integrat

Els proveïdors integrats accepten blocs config opcionals:

  • time:
    • allow_logical (bool, per defecte true)
  • env:
    • llista permesa (array)
    • denylist (array)
    • max_value_bytes (enter)
    • max_key_bytes (enter)
    • substitucions (taula)
  • json:
    • root (cadena)
    • root_id (cadena)
    • max_bytes (enter)
    • allow_yaml (bool)
  • http:
    • allow_http (bool)
    • timeout_ms (enter)
    • max_response_bytes (enter)
    • allowed_hosts (array)
    • user_agent (cadena)
    • hash_algorithm (cadena)