Flux d’Evidències + Model d’Execució
A Simple Vista
Què: Com Decision Gate avalua proves i produeix decisions Per què: Entendre exactament què s’obté, valida i compara Qui: Desenvolupadors, equips de seguretat i arquitectes que integren Decision Gate Requisits previs: getting_started.md
Una frase que heu de recordar
Decision Gate avalua proves; no executa tasques.
Flux de Dades Bàsiques
Trigger (scenario_next / scenario_trigger / precheck)
|
+-> Collect or accept evidence
| - Live run: call providers
| - Precheck: accept asserted payload
|
+-> Trust enforcement
| - Trust lane minimum (min_lane)
| - Signature policy (if required)
| - Anchor validation (if configured)
|
+-> Comparator evaluation -> TriState
+-> RET evaluation -> Gate outcomes
|
+-> Decision
- Live run: state mutation + runpack storage
- Precheck: no state mutation
Fonts d’Evidència
1) Proveïdors (Curses en viu)
Els proveïdors recuperen o calculen evidències i retornen un EvidenceResult.
Proveïdors integrats: time, env, json, http
Proveïdors externs: servidors MCP cridats a través de tools/call amb evidence_query.
2) Evidència Afirmada (Precomprovació)
Precheck no crida proveïdors. El client subministra un payload que és:
- Validat contra una forma de dades registrada (JSON Schema).
- Convertit en valors
EvidenceResultafirmats.
El mapeig de càrrega és exacte:
- Si la càrrega útil és un objecte: les claus són IDs de condició.
- Si la càrrega útil no és un objecte: només s’accepta quan l’escenari té exactament una condició.
Execució de la confiança
Trust Lanes
Verificat: evidència retornada pels proveïdors.Afirmat: evidència subministrada a través de la càrrega de precomprovació.
Minimum Lane (min_lane)
Configurat a decision-gate.toml:
[trust]
min_lane = "verified" # or "asserted"
Quan min_lane = "verified", les proves afirmades són rebutjades (la condició esdevé unknown).
Dev-permissiu: min_lane es converteix en asserted automàticament, excepte per als proveïdors enumerats en dev.permissive_exempt_providers (aquests romanen estrictes).
Overrides per condició i per porta
Podeu augmentar el mínim de carrils a l’especificació de l’escenari:
{
"condition_id": "tests_ok",
"trust": { "min_lane": "verified" }
}
El trust a nivell de porta també pot augmentar els requisits. El requisit efectiu és el més estricte entre la base i les sobrescriptures.
Verificació de la signatura
Configurat a través de trust.default_policy:
[trust]
# Audit mode accepts unsigned evidence.
default_policy = "audit"
# Require signatures from key files:
# default_policy = { require_signature = { keys = ["/etc/decision-gate/keys/provider.pub"] } }
Quan require_signature està actiu:
EvidenceResult.signature.schemeha de ser"ed25519".signature.key_idha de coincidir amb una entrada de clau configurada.- La signatura es verifica sobre JSON canònic de
evidence_hash.
Si evidence_hash falta, Decision Gate el calcula a partir del valor de l’evidència. Si evidence_hash està present, ha de coincidir amb el hash canònic del valor de l’evidència o la resposta del proveïdor serà rebutjada.
Validació d’Ancoratge
Els ancoratges s’apliquen a través de la configuració (no l’especificació de l’escenari):
[anchors]
[[anchors.providers]]
provider_id = "json"
anchor_type = "file_path_rooted"
required_fields = ["root_id", "path"]
EvidenceResult.evidence_anchor.anchor_value ha de ser una cadena que contingui JSON canònic que es pugui analitzar com un objecte. Els camps requerits han d’existir i han de ser escalar (cadena/nombre). Les violacions produeixen error.code = "anchor_invalid" i la condició esdevé unknown. Per a file_path_rooted, path és relatiu a l’arrel del proveïdor configurat.
Avaluació del Comparator
Els comparadors produeixen resultats TriState:
- certament
- fals
- desconegut
Comportaments exactes importants (vegeu condition_authoring.md):
equals/not_equalsretorna false/true en cas de discrepància de tipus (nounknown).- Els comparadors d’ordenació (
greater_than, etc.) retornenunknowna menys que ambdues parts siguin números o cadenes de data/hora RFC3339. exists/not_existsprova presència deEvidenceResult.value; JSONnullencara compta com aexists.
Flux de Execució en Directe (scenario_next)
- Existeix una execució (
scenario_start). scenario_nexts’invoca ambrun_id,tenant_id,namespace_id,trigger_id,agent_iditime.- Decision Gate crida els proveïdors per a cada condició.
- Els requisits de confiança s’apliquen.
- Els comparadors i RET produeixen resultats de porta.
- Es retorna un
DecisionRecordi s’actualitza l’estat d’execució.
Output: NextResult { decisió, paquets, estat } (sense valors d’evidència).
Per inspeccionar proves i detalls de la porta, utilitzeu runpack_export.
Flux de precomprovació (precomprovació)
- El client crida
schemas_registerper registrar una forma de dades. - Client calls
precheckwith:- tenant_id, namespace_id
scenario_ido inlinespecdata_shape(id de l’esquema + versió)- payload
- El
payloades valida contra l’esquema. - La càrrega útil es converteix en evidència afirmada.
- Les portes s’avaluen sense mutar l’estat d’execució.
Output: PrecheckToolResponse { decisió, avaluacions_porta }.
gate_evaluations inclou només l’estat de la porta i la traça de condició (sense valors d’evidència).
Audit de Presentacions (scenario_submit)
scenario_submit afegeix un registre de presentació a l’estat d’execució sense afectar l’evaluació de la porta. Cada presentació emmagatzema un hash de contingut i metadades per a auditoria.
Interacció amb el Proveïdor (MCP Extern)
Decision Gate crida proveïdors externs de MCP amb tools/call i una única eina: evidence_query. No depèn de tools/list en temps d’execució; les capacitats del proveïdor es carreguen des de capabilities_path en la configuració.
Malentenduts comuns (Corregits)
- “DG executa les eines.” -> Fals. DG avalua proves; les eines s’executen en un altre lloc.
- “Precheck retorna errors d’evidència.” -> Fals. Només retorna
decision+gate_evaluations. - “scenario_next response includes evidence.” -> Fals per defecte. Les sol·licituds només locals per defecte utilitzen retroalimentació
trace, però els valors d’evidència encara requereixenfeedback: "evidence"(si està permès) orunpack_export/evidence_query. - “La política d’ancoratge és en l’escenari.” -> Fals. Està configurada sota
[anchors].
Glossari
EvidenceQuery: { provider_id, check_id, params }. EvidenceResult: { value, lane, error, evidence_hash, evidence_ref, evidence_anchor, signature, content_type }. Trust Lane: verificat o afirmat. Runpack: Paquet d’artefactes d’auditoria escrit per a execucions en viu.