RFC-WF-0006
Evidence Artifact Schema (EAS)
Status: Draft Standard
Version: 1.0.0
Date: 20 Nov 2025
Category: Standards Track
Author: FullAgenticStack Initiative
Dependencies: RFC-WF-0001 (WFCS), RFC-WF-0003 (CCP), RFC-WF-0004 (ACSM), RFC-WF-0005 (CRCD)
License: Open Specification (Public, Royalty-Free)
Abstract
This document specifies the Evidence Artifact Schema (EAS) for WhatsApp-first systems. EAS defines the official, canonical JSON Schema for evidence artifacts produced by conversational operations, including command envelopes, authorization decisions, confirmations, execution outcomes, compensations, and trace bindings to WhatsApp messages. The schema is designed for append-only audit, tamper-evident chaining, and cross-service correlation.
Index Terms— evidence artifacts, audit trail, JSON Schema, tamper-evident logs, command envelopes, traceability, WhatsApp-first compliance.
I. Introduction
WhatsApp-first systems require operational transparency and administrative sovereignty while remaining fully operable via conversation. To avoid “trust me bro” logs, systems need a standardized, machine-verifiable evidence format. EAS defines a canonical artifact that can be stored in an append-only store (or equivalent), queried conversationally, and verified across services.
EAS is intentionally implementation-agnostic: it does not mandate a database or cryptosystem, but it defines a structure that supports tamper-evidence and correlation.
II. Scope
EAS specifies:
- A normative Evidence Artifact model and required fields
- A canonical event lifecycle for command-driven systems
- Trace binding to WhatsApp conversation identifiers
- Authorization + step-up decision recording
- Execution outcomes and compensation logging
- Optional tamper-evident linkage (
prev_hash,hash) - Official JSON Schema (draft 2020-12)
III. Normative Language
MUST, MUST NOT, SHOULD, SHOULD NOT, MAY are normative.
IV. Definitions
Evidence Artifact: A machine-readable record proving that an operation was requested, authorized, confirmed, executed (or rejected/failed), and what it affected.
Evidence Chain: A sequence of artifacts linked via hashes (optional but recommended).
Trace Binding: Linking evidence to conversation identifiers (conversation_id, message_ids).
Outcome: The terminal (or intermediate) result of executing a command.
V. Evidence Model Overview
An EAS-compliant implementation MUST emit evidence artifacts for:
- command accepted / canonicalized (CCP)
- confirmation requested / confirmation satisfied (CCP)
- authorization decision (ACSM)
- execution started / executed / failed
- compensation started / compensated (if applicable)
- rejection (policy / scope / ambiguity / validation)
Evidence artifacts MUST be immutable once written. Corrections MUST be represented as new artifacts.
VI. Official JSON Schema (EAS v1.0.0)
A. Conformance
- Schema dialect: JSON Schema 2020-12
- An evidence document MUST validate against this schema.
- Producers MUST set
eas_versionto"1.0.0".
B. Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://spec.fullagenticstack.dev/whatsapp-first/eas/1.0.0/schema.json",
"title": "Evidence Artifact Schema (EAS) v1.0.0",
"type": "object",
"additionalProperties": false,
"required": [
"eas_version",
"artifact_id",
"artifact_type",
"emitted_at",
"system",
"tenant",
"trace",
"subject",
"lifecycle",
"security",
"payload",
"integrity"
],
"properties": {
"eas_version": {
"type": "string",
"const": "1.0.0"
},
"artifact_id": {
"type": "string",
"description": "Globally unique identifier for this evidence artifact (UUID recommended).",
"minLength": 8
},
"artifact_type": {
"type": "string",
"description": "Evidence artifact category.",
"enum": [
"command.accepted",
"command.confirmation.requested",
"command.confirmation.satisfied",
"authz.decided",
"execution.started",
"execution.executed",
"execution.failed",
"execution.rejected",
"compensation.started",
"compensation.compensated",
"observation.emitted"
]
},
"emitted_at": {
"type": "string",
"format": "date-time"
},
"system": {
"type": "object",
"additionalProperties": false,
"required": ["system_id", "service", "environment"],
"properties": {
"system_id": { "type": "string", "minLength": 2 },
"service": { "type": "string", "minLength": 1 },
"environment": {
"type": "string",
"enum": ["dev", "test", "staging", "prod"]
},
"region": { "type": "string" },
"build": { "type": "string" },
"commit": { "type": "string" }
}
},
"tenant": {
"type": "object",
"additionalProperties": false,
"required": ["tenant_id"],
"properties": {
"tenant_id": { "type": "string", "minLength": 1 },
"org_id": { "type": "string" },
"workspace_id": { "type": "string" }
}
},
"trace": {
"type": "object",
"additionalProperties": false,
"required": ["conversation_id", "message_ids"],
"properties": {
"conversation_id": { "type": "string", "minLength": 1 },
"message_ids": {
"type": "array",
"items": { "type": "string", "minLength": 1 },
"minItems": 1
},
"correlation_id": { "type": "string" },
"causation_id": { "type": "string" },
"span_id": { "type": "string" }
}
},
"subject": {
"type": "object",
"additionalProperties": false,
"required": ["actor", "channel"],
"properties": {
"channel": {
"type": "string",
"const": "whatsapp"
},
"actor": {
"type": "object",
"additionalProperties": false,
"required": ["actor_id", "actor_type"],
"properties": {
"actor_id": { "type": "string", "minLength": 1 },
"actor_type": {
"type": "string",
"enum": ["human", "agent", "service"]
},
"display_name": { "type": "string" }
}
},
"acting_as": {
"type": "object",
"additionalProperties": false,
"properties": {
"role": { "type": "string" },
"delegation_id": { "type": "string" }
}
}
}
},
"lifecycle": {
"type": "object",
"additionalProperties": false,
"required": ["command_id", "stage"],
"properties": {
"command_id": { "type": "string", "minLength": 1 },
"stage": {
"type": "string",
"enum": [
"accepted",
"confirmation_requested",
"confirmed",
"authz_decided",
"started",
"executed",
"failed",
"rejected",
"compensated",
"observed"
]
},
"attempt": {
"type": "integer",
"minimum": 1
},
"idempotency_key": { "type": "string" },
"registry_ref": {
"type": "object",
"additionalProperties": false,
"properties": {
"command_name": { "type": "string" },
"capability_id": { "type": "string" },
"registry_version": { "type": "string" }
}
}
}
},
"security": {
"type": "object",
"additionalProperties": false,
"required": ["authn", "authz"],
"properties": {
"authn": {
"type": "object",
"additionalProperties": false,
"required": ["trust_level", "auth_context_id"],
"properties": {
"trust_level": {
"type": "string",
"enum": ["L1", "L2", "L3"]
},
"auth_context_id": { "type": "string" },
"session_id": { "type": "string" },
"device_id": { "type": "string" },
"fresh_until": { "type": "string", "format": "date-time" }
}
},
"authz": {
"type": "object",
"additionalProperties": false,
"required": ["decision", "evaluated_scopes"],
"properties": {
"decision": {
"type": "string",
"enum": ["allow", "deny"]
},
"evaluated_scopes": {
"type": "array",
"items": { "type": "string" }
},
"required_scopes": {
"type": "array",
"items": { "type": "string" }
},
"policy_id": { "type": "string" },
"reason_code": { "type": "string" },
"reason_human": { "type": "string" }
}
},
"step_up": {
"type": "object",
"additionalProperties": false,
"properties": {
"required": { "type": "boolean" },
"policy_id": { "type": "string" },
"satisfied": { "type": "boolean" },
"method": {
"type": "string",
"enum": ["token", "explicit_phrase", "oob_factor", "none"]
},
"verified_at": { "type": "string", "format": "date-time" }
}
},
"confirmation": {
"type": "object",
"additionalProperties": false,
"properties": {
"required": { "type": "boolean" },
"method": {
"type": "string",
"enum": ["yes_no", "explicit_phrase", "token", "none"]
},
"token_id": { "type": "string" },
"confirmed_at": { "type": "string", "format": "date-time" }
}
}
}
},
"payload": {
"type": "object",
"additionalProperties": false,
"required": ["intent", "args", "result"],
"properties": {
"intent": {
"type": "object",
"additionalProperties": false,
"required": ["entity", "action"],
"properties": {
"entity": { "type": "string", "minLength": 1 },
"action": { "type": "string", "minLength": 1 },
"target": {
"type": "object",
"additionalProperties": true,
"description": "Target locator; minimally SHOULD include id when applicable.",
"properties": {
"id": { "type": "string" }
}
}
}
},
"args": {
"type": "object",
"additionalProperties": true,
"description": "Normalized command arguments. May be empty object."
},
"result": {
"type": "object",
"additionalProperties": false,
"required": ["status"],
"properties": {
"status": {
"type": "string",
"enum": ["accepted", "confirmed", "executed", "rejected", "failed", "compensated", "observed"]
},
"summary": { "type": "string" },
"resource_effects": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["resource_type", "resource_id", "effect"],
"properties": {
"resource_type": { "type": "string" },
"resource_id": { "type": "string" },
"effect": {
"type": "string",
"enum": ["created", "updated", "deleted", "canceled", "revoked", "configured", "none"]
}
}
}
},
"error": {
"type": "object",
"additionalProperties": false,
"properties": {
"code": { "type": "string" },
"message": { "type": "string" },
"retryable": { "type": "boolean" }
}
}
}
},
"raw_input": {
"type": "object",
"additionalProperties": false,
"properties": {
"text": { "type": "string" },
"audio_transcript": { "type": "string" },
"input_mode": {
"type": "string",
"enum": ["text", "audio", "menu", "document", "image"]
}
}
}
}
},
"integrity": {
"type": "object",
"additionalProperties": false,
"required": ["hash_alg", "hash"],
"properties": {
"hash_alg": {
"type": "string",
"enum": ["sha256", "sha512"]
},
"hash": {
"type": "string",
"description": "Hash of canonicalized artifact payload (implementation-defined canonicalization).",
"minLength": 16
},
"prev_hash": {
"type": "string",
"description": "Optional pointer to previous artifact hash for tamper-evident chaining."
},
"signature": {
"type": "object",
"additionalProperties": false,
"properties": {
"sig_alg": { "type": "string" },
"sig": { "type": "string" },
"key_id": { "type": "string" }
}
}
}
}
}
}
VII. Canonicalization and Hashing Rules (Normative)
- Producers MUST define a stable canonicalization for hashing (e.g., JSON canonical form with deterministic key ordering).
-
integrity.hashMUST be computed over the canonicalized artifact excludingintegrityitself (to avoid recursion). - If
prev_hashis used, the chain MUST be append-only; modifications MUST emit a new artifact with a new hash.
VIII. Minimal Evidence Emission Requirements (Normative)
For any state-mutating command, the system MUST emit at least:
-
command.accepted(or equivalent stage) authz.decided-
execution.executedORexecution.failedORexecution.rejected
For destructive and admin high-impact commands, the system MUST also emit:
command.confirmation.requested-
command.confirmation.satisfied(when confirmed) - step-up data under
security.step_up(required / satisfied / method)
IX. Relationship to Other RFCs
- WFCS (RFC-WF-0001): requires observability and recovery paths over WhatsApp.
- CCP (RFC-WF-0003): provides envelope + confirmation + idempotency that EAS records.
-
ACSM (RFC-WF-0004): provides scope/step-up decisions recorded under
security. -
CRCD (RFC-WF-0005): provides
registry_refto bind evidence to declared commands/capabilities.
X. Security Considerations
- Evidence artifacts MAY contain sensitive operational data. Producers SHOULD support redaction policies and privileged views.
- Integrity fields support tamper-evidence, but operational security still depends on secure storage and access control.
- Signature support is optional but recommended for cross-service verification.
XI. Conclusion
EAS standardizes evidence into a verifiable, machine-readable artifact that can be chained, audited, queried, and correlated across services—turning WhatsApp-first operations into provable operational reality rather than informal chat logs.
References
[1] RFC-WF-0001, WhatsApp-First Compliance Core (WFCS).
[2] RFC-WF-0003, Conversational Command Protocol (CCP).
[3] RFC-WF-0004, Administrative Command Security Model (ACSM).
[4] RFC-WF-0005, Command Registry & Capability Declaration (CRCD).
Concepts and Technologies
JSON Schema 2020-12, evidence artifacts, append-only audit, tamper-evident hashing chain, command lifecycle stages, trust context, scope evaluation recording, conversational trace binding.
Top comments (0)