DCP-03 — Cadena de auditoría y transparencia¶
Traducción informativa de la especificación en inglés, actualizada el 25/10/2026. La versión normativa es la inglesa: esta traducción no tiene valor normativo y, si difieren, prevalece el inglés. Los identificadores y bloques de código se conservan sin traducir.
Cada decisión y cada resultado se registran. La cadena de auditoría enlaza las entradas con un hash anterior (GENESIS para la primera); opcionalmente puede calcularse una raíz de Merkle sobre las entradas. Así, la trazabilidad es verificable.
Artefactos normativos¶
| Artefacto | Descripción | Esquema |
|---|---|---|
| AuditEntry | Una entrada de auditoría: prev_hash, timestamp, agent_id, human_id, intent_id, intent_hash, policy_decision (approved/escalated/blocked), outcome, evidence. | schemas/v1/audit_entry.schema.json |
$id: https://dcp-ai.org/schemas/v1/audit_entry.schema.json
intent_hash: Para cada AuditEntry, intent_hash debe (MUST) ser igual al hash SHA-256 de la forma JSON canónica de la Intent a la que se refiere la entrada. Formalmente: intent_hash = SHA-256(canonical(intent)) (cadena hexadecimal). La intención se identifica por intent_id; la forma canónica es la misma que se usa para el hash del bundle (p. ej., json-stable-stringify). Usa dcp intent-hash <intent.json> o la ayuda intentHash() de la implementación de referencia para calcularlo.
Encadenamiento (prev_hash): La primera entrada de auditoría debe (MUST) tener prev_hash = "GENESIS" (la cadena literal). Para la entrada en el índice n (n ≥ 1), prev_hash debe (MUST) ser igual al hash SHA-256 de la forma JSON canónica de la entrada anterior: prev_hash = SHA-256(canonical(entry_{n-1})) (cadena hexadecimal). Esto enlaza las entradas en una cadena inmutable.
Merkle (opcional): Dado un array de audit_entries, puede calcularse una raíz de Merkle. El Signed Bundle puede incluir signature.merkle_root como sha256:<hex> o null.
Validación¶
Valida una entrada de auditoría:
Valida un bundle completo (incluye todas las audit_entries):
Obtén la raíz de Merkle de las audit_entries de un bundle:
Ejemplos¶
- tests/conformance/examples/audit_entry.json
- El bundle tests/conformance/examples/citizenship_bundle.json incluye
audit_entries.
La fuente de verdad para los campos y los enums es el JSON Schema; este documento es la especificación normativa que los referencia.
Notas de implementación (informativas)¶
Añadidas el 25/10/2026. No normativas. Estas notas no añaden ningún requisito ni cambian nada de lo anterior: describen cómo se relaciona el código de referencia de
maincon este texto. Donde difieren, prevalece el texto normativo anterior.
- Este documento y sus comandos describen la entrada de auditoría V1 (
schemas/v1/audit_entry.schema.json), cuyointent_hashy elprev_hashde cada entrada posterior a la primera son cadenas hexadecimales sin prefijo. En V2 (schemas/v2/audit_entry.schema.json, especificada en DCP-AI v2.0) se escribensha256:<hex>; en ambas versiones, elprev_hashde la primera entrada sigue siendo el literal"GENESIS". Las entradas V2 llevan ademássession_nonce,hash_algypq_checkpoint_ref, y las entradas se comprometen mediante la raíz de Merkle del manifiesto en lugar de firmarse una a una. - La forma canónica usada para estos hashes es el perfil
dcp-jcs-v1(CANONICALIZATION_PROFILE.md);json-stable-stringifyarriba es un ejemplo de serializador con claves ordenadas, no un perfil distinto. - La cadena permite detectar una entrada alterada, eliminada o reordenada; no hace que las entradas sean imposibles de cambiar, y no dice nada sobre si su contenido es verdadero.
<audit_entry.json>y los demás nombres entre ángulos son marcadores de posición para tus propios archivos.