This schema defines the JSON output of hats verify or any conformant verifier implementation. The verification result is the final structured record produced after verifying a HATS attestation payload, governance proof bundle, or H33-74 receipt.
The result contains the verification status, counts of nodes and signatures verified, chain integrity assessment, replay outcome, a list of any failures encountered, and performance metrics. This is the machine-readable equivalent of the terminal output.
| Field | Type | Required | Description |
|---|---|---|---|
status | string (enum) | Yes | VERIFIED, FAILED, PARTIAL, or ERROR. |
bundle_hash | string (hex64) | Yes | SHA3-256 of the input that was verified. |
timestamp | string (ISO 8601) | Yes | When verification completed. |
nodes_verified | integer | Yes | Number of governance nodes that passed verification. |
nodes_total | integer | Yes | Total number of governance nodes in the input. |
signatures_valid | integer | Yes | Number of signatures that passed verification. |
signatures_total | integer | Yes | Total number of signatures checked. |
chain_integrity | string (enum) | Yes | INTACT or BROKEN. |
replay_result | string (enum) | Yes | DETERMINISTIC, DIVERGENT, or NOT_ATTEMPTED. |
failures | array | Yes | Array of failure objects. Empty if status is VERIFIED. |
duration_us | integer | Yes | Verification duration in microseconds. |
verifier_version | string | Yes | Version string of the verifier implementation. |
proof_profile | string | Yes | The proof profile used during verification. |
| Field | Type | Required | Description |
|---|---|---|---|
node_id | string (UUID or null) | Yes | The node where the failure occurred. Null for bundle-level failures. |
error_code | string | Yes | Machine-readable error code (e.g., NODE_HASH_MISMATCH, SIGNATURE_INVALID). |
expected | string | No | The expected value (e.g., expected hash). |
actual | string | No | The actual value found. |
severity | string (enum) | Yes | FATAL, WARNING, or INFO. |
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://h33.ai/schemas/verification-result/v1.0.0",
"title": "Verification Result",
"type": "object",
"required": [
"status", "bundle_hash", "timestamp",
"nodes_verified", "nodes_total",
"signatures_valid", "signatures_total",
"chain_integrity", "replay_result",
"failures", "duration_us",
"verifier_version", "proof_profile"
],
"properties": {
"status": {
"type": "string",
"enum": ["VERIFIED", "FAILED", "PARTIAL", "ERROR"]
},
"bundle_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"timestamp": { "type": "string", "format": "date-time" },
"nodes_verified": { "type": "integer", "minimum": 0 },
"nodes_total": { "type": "integer", "minimum": 0 },
"signatures_valid": { "type": "integer", "minimum": 0 },
"signatures_total": { "type": "integer", "minimum": 0 },
"chain_integrity": {
"type": "string",
"enum": ["INTACT", "BROKEN"]
},
"replay_result": {
"type": "string",
"enum": ["DETERMINISTIC", "DIVERGENT", "NOT_ATTEMPTED"]
},
"failures": {
"type": "array",
"items": { "$ref": "#/$defs/FailureObject" }
},
"duration_us": { "type": "integer", "minimum": 0 },
"verifier_version": { "type": "string", "minLength": 1 },
"proof_profile": { "type": "string", "minLength": 1 }
},
"$defs": {
"FailureObject": {
"type": "object",
"required": ["node_id", "error_code", "severity"],
"properties": {
"node_id": {
"oneOf": [
{ "type": "string", "format": "uuid" },
{ "type": "null" }
]
},
"error_code": { "type": "string" },
"expected": { "type": "string" },
"actual": { "type": "string" },
"severity": {
"type": "string",
"enum": ["FATAL", "WARNING", "INFO"]
}
}
}
},
"additionalProperties": false
}{
"status": "VERIFIED",
"bundle_hash": "b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
"timestamp": "2026-05-22T14:35:12Z",
"nodes_verified": 5,
"nodes_total": 5,
"signatures_valid": 3,
"signatures_total": 3,
"chain_integrity": "INTACT",
"replay_result": "DETERMINISTIC",
"failures": [],
"duration_us": 2847,
"verifier_version": "hats-verify 1.4.0",
"proof_profile": "HATS-PROFILE-PQ-SHA3-256-v1"
}{
"status": "FAILED",
"bundle_hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",
"timestamp": "2026-05-22T14:36:45Z",
"nodes_verified": 3,
"nodes_total": 5,
"signatures_valid": 2,
"signatures_total": 3,
"chain_integrity": "BROKEN",
"replay_result": "DIVERGENT",
"failures": [
{
"node_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"error_code": "NODE_HASH_MISMATCH",
"expected": "7d793037a0760186574b0282f2f435e7a3c7b9f1d2e4c6a8b0d3f5e7a9c1b3d5",
"actual": "0000000000000000000000000000000000000000000000000000000000000000",
"severity": "FATAL"
},
{
"node_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"error_code": "NODE_HASH_MISMATCH",
"expected": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"actual": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"severity": "FATAL"
},
{
"node_id": null,
"error_code": "SIGNATURE_INVALID",
"expected": "valid SLH-DSA-SHA2-128f-simple signature",
"actual": "signature verification returned false",
"severity": "FATAL"
},
{
"node_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"error_code": "REPLAY_DIVERGENT",
"expected": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",
"actual": "deadbeef00000000000000000000000000000000000000000000000000000000",
"severity": "WARNING"
}
],
"duration_us": 4102,
"verifier_version": "hats-verify 1.4.0",
"proof_profile": "HATS-PROFILE-PQ-SHA3-256-v1"
}The hats verify CLI maps the JSON result to terminal output as follows:
$ hats verify --bundle governance-proof.json
VERIFIED bundle b4c5d6e7...a3b4c5
nodes: 5/5 verified
signatures: 3/3 valid (ML-DSA + FALCON + SLH-DSA)
chain: INTACT
replay: DETERMINISTIC
duration: 2.847ms
profile: HATS-PROFILE-PQ-SHA3-256-v1
verifier: hats-verify 1.4.0$ hats verify --bundle governance-proof.json
FAILED bundle a1b2c3d4...f0a1b2
nodes: 3/5 verified
signatures: 2/3 valid
chain: BROKEN
replay: DIVERGENT
FAILURES:
[FATAL] NODE_HASH_MISMATCH at b2c3d4e5-f6a7-8901-bcde-f12345678901
expected: 7d793037...a9c1b3d5
actual: 00000000...00000000
[FATAL] NODE_HASH_MISMATCH at c3d4e5f6-a7b8-9012-cdef-123456789012
expected: e3b0c442...7852b855
actual: ffffffff...ffffffff
[FATAL] SIGNATURE_INVALID (SLH-DSA-SHA2-128f-simple)
signature verification returned false
[WARN] REPLAY_DIVERGENT at b2c3d4e5-f6a7-8901-bcde-f12345678901
expected: a1b2c3d4...f0a1b2
actual: deadbeef...00000000
duration: 4.102msThe mapping rules:
status maps to the first line, colorized (green for VERIFIED, red for FAILED).bundle_hash is truncated to first 8 and last 6 hex chars with ellipsis.severity maps to the prefix tag: [FATAL], [WARN], or [INFO].duration_us is converted to milliseconds for display.| Error Code | Description | Severity |
|---|---|---|
NODE_HASH_MISMATCH | A node's recomputed hash does not match the stored hash. | FATAL |
ROOT_HASH_MISMATCH | The recomputed root hash does not match the bundle's root hash. | FATAL |
SIGNATURE_INVALID | A PQ signature fails verification. | FATAL |
SIGNATURE_MISSING | Fewer than three PQ signature families present. | FATAL |
GRAPH_CYCLE | Governance graph contains a cycle. | FATAL |
DANGLING_EDGE | Edge references a non-existent node. | FATAL |
CHAIN_BREAK | Governance chain has a gap (missing intermediate attestation). | FATAL |
REPLAY_DIVERGENT | Replay frame output does not match expected output. | WARNING |
TIMESTAMP_FUTURE | Attestation timestamp is in the future beyond allowed skew. | WARNING |
VERIFIER_ERROR | Internal verifier error (OOM, timeout, malformed input). | FATAL |
A conformant verifier implementation MUST:
status to VERIFIED only if all nodes pass, all signatures pass, chain integrity is INTACT, and no FATAL failures exist.status to FAILED if any FATAL failure exists.status to PARTIAL if graph and signatures pass but replay diverges.status to ERROR if the verifier itself encounters an internal error.failures array, not just the first one.duration_us accurately (wall-clock time, not CPU time).verifier_version with the implementation name and semantic version.Conformant verifiers MUST NOT set status to VERIFIED if signatures_valid < signatures_total or if nodes_verified < nodes_total.
The verification result schema is the interoperability contract between verifier implementations. Any system that consumes verification results can rely on this schema regardless of which verifier produced it.
bundle_hash is the SHA3-256 of the input being verified.