Decision Gate Docs

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

Asset Core docs

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:

  1. Validat contra una forma de dades registrada (JSON Schema).
  2. Convertit en valors EvidenceResult afirmats.

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.scheme ha de ser "ed25519".
  • signature.key_id ha 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_equals retorna false/true en cas de discrepància de tipus (no unknown).
  • Els comparadors d’ordenació (greater_than, etc.) retornen unknown a menys que ambdues parts siguin números o cadenes de data/hora RFC3339.
  • exists/not_exists prova presència de EvidenceResult.value; JSON null encara compta com a exists.

Flux de Execució en Directe (scenario_next)

  1. Existeix una execució (scenario_start).
  2. scenario_next s’invoca amb run_id, tenant_id, namespace_id, trigger_id, agent_id i time.
  3. Decision Gate crida els proveïdors per a cada condició.
  4. Els requisits de confiança s’apliquen.
  5. Els comparadors i RET produeixen resultats de porta.
  6. Es retorna un DecisionRecord i 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ó)

  1. El client crida schemas_register per registrar una forma de dades.
  2. Client calls precheck with:
    • tenant_id, namespace_id
    • scenario_id o inline spec
    • data_shape (id de l’esquema + versió)
    • payload
  3. El payload es valida contra l’esquema.
  4. La càrrega útil es converteix en evidència afirmada.
  5. 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 requereixen feedback: "evidence" (si està permès) o runpack_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.