Skip to main content

Evidence Report Schema

The JSON evidence report is the canonical machine-readable output of a validation run. All other outputs (PDF, signature) are derived from it.

Schema Version

Current schema version: 1.0

The schema_version field enables forward compatibility. Consumers should check this field and handle unknown versions gracefully.

Top-Level Structure

{
"schema_version": "1.0",
"report_id": "validation-9275b4aa-2aeb-4910-a3a6-9e4aa1dc016a",
"generated_at": "2026-04-09T05:37:49.204+00:00",
"tool": { },
"backup": { },
"restore": { },
"validation": { },
"integrity": { },
"compliance_mappings": { },
"triggered_by": "weekly-cron-job"
}
FieldTypeDescription
schema_versionstringSchema version for compatibility ("1.0")
report_idstringUnique identifier for this validation run
generated_atstringISO-8601 timestamp of report generation
toolobjectInformation about the tool that generated the report
backupobjectBackup metadata
restoreobjectRestore details (nullable)
validationobjectValidation check results
integrityobjectChecksums and signature information
compliance_mappingsobjectRegulatory framework mappings
triggered_bystringWho/what triggered this run (nullable)

tool

{
"tool": {
"name": "kafka-backup",
"version": "0.11.0"
}
}

backup

{
"backup": {
"id": "production-daily-001",
"source_cluster_id": "prod-kafka-01",
"source_brokers": ["broker-1:9092", "broker-2:9092"],
"storage_backend": "s3://my-kafka-backups/production/daily",
"pitr_timestamp": 1711929600000,
"created_at": 1711929600000,
"total_topics": 3,
"total_partitions": 9,
"total_segments": 9,
"total_records": 1000
}
}
FieldTypeDescription
idstringBackup ID
source_cluster_idstringSource cluster identifier (nullable)
source_brokersarraySource bootstrap servers
storage_backendstringStorage backend description
pitr_timestampintPITR timestamp in epoch millis (nullable)
created_atintBackup creation timestamp in epoch millis
total_topicsintNumber of topics in the backup
total_partitionsintTotal partitions across all topics
total_segmentsintTotal segment files
total_recordsintTotal records across all segments

restore

Present when validation was run against a restored cluster.

{
"restore": {
"target_bootstrap_servers": ["restored-kafka:9092"],
"start_time": "2026-04-09T02:00:00Z",
"end_time": "2026-04-09T02:31:14Z",
"duration_seconds": 1874
}
}

validation

{
"validation": {
"checks_total": 3,
"checks_passed": 3,
"checks_failed": 0,
"checks_skipped": 0,
"checks_warned": 0,
"overall_result": "PASSED",
"results": [ ],
"total_duration_ms": 18
}
}
FieldTypeDescription
overall_resultstringPASSED, FAILED, WARNING, or SKIPPED
checks_totalintTotal checks executed
checks_passedintChecks that passed
checks_failedintChecks that failed
total_duration_msintTotal validation duration in milliseconds
resultsarrayIndividual check results (see below)

Check Result Object

{
"check_name": "MessageCountCheck",
"outcome": "PASSED",
"detail": "3 topics; 1000 messages expected, 1000 restored; 0 discrepancies",
"data": {
"check": "MessageCountCheck",
"topics_verified": 3,
"total_messages_expected": 1000,
"total_messages_restored": 1000,
"discrepancies": [],
"sha256_offset_summary": "e3b0c44298fc1c149afb..."
},
"duration_ms": 12
}
FieldTypeDescription
check_namestringCheck identifier
outcomestringPASSED, FAILED, WARNING, or SKIPPED
detailstringHuman-readable summary
dataobjectMachine-readable data (varies by check type)
duration_msintCheck execution time in milliseconds

MessageCountCheck Data

FieldTypeDescription
topics_verifiedintNumber of topics checked
total_messages_expectedintExpected record count from manifest
total_messages_restoredintActual record count on restored cluster
discrepanciesarrayPer-partition discrepancies (empty when passed)
sha256_offset_summarystringSHA-256 of the offset summary for evidence

OffsetRangeCheck Data

FieldTypeDescription
partitions_checkedintTotal partitions verified
partitions_passedintPartitions with correct offset ranges
issuesarrayPer-partition issues (empty when passed)

ConsumerGroupOffsetCheck Data

FieldTypeDescription
groups_checkedintConsumer groups verified
total_offsetsintTotal committed offsets checked
issuesarrayPer-group issues (empty when passed)

integrity

{
"integrity": {
"backup_manifest_sha256": "a1b2c3d4e5f6...",
"report_sha256": "2482bbdfa113146e...",
"checksums_valid": true,
"signature_algorithm": "ECDSA-P256-SHA256",
"signed_by": "production-signing-key"
}
}
FieldTypeDescription
backup_manifest_sha256stringSHA-256 of the backup manifest.json
report_sha256stringSHA-256 of the canonical JSON report
checksums_validboolWhether checksums are consistent
signature_algorithmstringECDSA-P256-SHA256 or none
signed_bystringSigning identity (nullable)

compliance_mappings

{
"compliance_mappings": {
"sox_itgc": {
"control": "IT General Controls - Backup and Recovery",
"satisfied_by": ["MessageCountCheck", "OffsetRangeCheck"],
"evidence_retention_required_years": 7,
"evidence_retention_configured_days": 2555
},
"cmmc_l2": {
"control": "RE.3.139",
"description": "Regularly perform and test data back-ups",
"satisfied_by": ["MessageCountCheck", "OffsetRangeCheck", "ConsumerGroupOffsetCheck"]
},
"gdpr_art32": {
"control": "Article 32 - Testing technical measures",
"satisfied_by": ["MessageCountCheck", "OffsetRangeCheck"],
"test_frequency": "on-demand",
"rto_demonstrated_seconds": 1874
}
}
}

Each framework mapping identifies which validation checks satisfy which regulatory control, enabling auditors to trace evidence directly to compliance requirements.

PDF Report Layout

The PDF is generated from the JSON report and contains:

PageContent
1Cover — title, report ID, timestamp, overall result (PASSED/FAILED), tool version
2Validation results — check summary table, per-check detail
3Integrity & compliance — SHA-256 checksums, signature details, SOX/CMMC/GDPR mappings

The PDF includes the report_sha256 so auditors can independently verify the JSON report matches by computing its SHA-256.

Next Steps