{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/casoon/auditmysite/docs/json-report.schema.json",
"title": "auditmysite single report",
"type": "object",
"required": ["metadata", "report"],
"additionalProperties": false,
"properties": {
"metadata": { "$ref": "#/$defs/metadata" },
"report": { "$ref": "#/$defs/normalizedReport" },
"fix_guidance": {
"type": "array",
"items": { "$ref": "#/$defs/fixGuidance" }
},
"performance": { "type": ["object", "null"] },
"seo": { "type": ["object", "null"] },
"security": { "type": ["object", "null"] },
"mobile": { "type": ["object", "null"] },
"ux": { "type": ["object", "null"] },
"journey": { "type": ["object", "null"] },
"dark_mode": { "type": ["object", "null"] },
"ai_visibility": { "type": ["object", "null"] },
"source_quality": { "type": ["object", "null"] },
"content_visibility": { "type": ["object", "null"] },
"confidence_summary": {
"type": "array",
"items": { "$ref": "#/$defs/confidenceSignal" }
},
"capabilities": {
"type": "array",
"items": { "$ref": "#/$defs/capabilitySignal" }
},
"history": { "type": ["object", "null"] }
},
"$defs": {
"metadata": {
"type": "object",
"required": ["tool", "timestamp", "wcag_level", "execution_time_ms"],
"additionalProperties": false,
"properties": {
"tool": { "type": "string" },
"timestamp": { "type": "string", "format": "date-time" },
"wcag_level": { "type": "string" },
"execution_time_ms": { "type": "integer", "minimum": 0 }
}
},
"severityCounts": {
"type": "object",
"required": ["critical", "high", "medium", "low", "total"],
"additionalProperties": false,
"properties": {
"critical": { "type": "integer", "minimum": 0 },
"high": { "type": "integer", "minimum": 0 },
"medium": { "type": "integer", "minimum": 0 },
"low": { "type": "integer", "minimum": 0 },
"total": { "type": "integer", "minimum": 0 }
}
},
"moduleScore": {
"type": "object",
"required": ["name", "score", "grade", "weight_pct", "contributes_to_overall"],
"additionalProperties": false,
"properties": {
"name": { "type": "string" },
"score": { "type": "integer", "minimum": 0, "maximum": 100 },
"grade": { "type": "string" },
"weight_pct": { "type": "integer", "minimum": 0, "maximum": 100 },
"contributes_to_overall": {
"type": "boolean",
"description": "True when this module feeds into overall_score. False for supplemental dimensions (UX, Journey)."
}
}
},
"occurrence": {
"type": "object",
"required": ["node_id", "message"],
"additionalProperties": true,
"properties": {
"node_id": { "type": "string" },
"message": { "type": "string" },
"selector": { "type": ["string", "null"] },
"fix_suggestion": { "type": ["string", "null"] },
"html_snippet": { "type": ["string", "null"] },
"suggested_code": { "type": ["string", "null"] }
}
},
"finding": {
"type": "object",
"required": [
"rule_id",
"wcag_criterion",
"wcag_level",
"dimension",
"subcategory",
"issue_class",
"severity",
"user_impact",
"technical_impact",
"score_impact",
"aggregation_key",
"title",
"description",
"occurrence_count",
"priority_score",
"occurrences"
],
"additionalProperties": true,
"properties": {
"rule_id": { "type": "string" },
"wcag_criterion": { "type": "string" },
"wcag_level": { "type": "string" },
"dimension": { "type": "string" },
"subcategory": { "type": "string" },
"issue_class": { "type": "string" },
"severity": { "type": "string" },
"user_impact": { "type": "string" },
"technical_impact": { "type": "string" },
"score_impact": {
"type": "object",
"required": ["base_penalty", "max_penalty", "scaling"],
"additionalProperties": false,
"properties": {
"base_penalty": { "type": "number" },
"max_penalty": { "type": "number" },
"scaling": { "type": "string" }
}
},
"aggregation_key": { "type": "string" },
"title": { "type": "string" },
"description": { "type": "string" },
"occurrence_count": { "type": "integer", "minimum": 0 },
"priority_score": { "type": "number" },
"occurrences": {
"type": "array",
"items": { "$ref": "#/$defs/occurrence" }
}
}
},
"fixGuidance": {
"type": "object",
"required": ["rule_id", "title", "wcag_criterion", "severity", "occurrence_count", "problem", "user_impact", "typical_cause", "recommendation", "technical_note", "affected_selectors"],
"additionalProperties": true,
"properties": {
"rule_id": { "type": "string" },
"title": { "type": "string" },
"wcag_criterion": { "type": "string" },
"severity": { "type": "string" },
"occurrence_count": { "type": "integer", "minimum": 0 },
"problem": { "type": "string" },
"user_impact": { "type": "string" },
"typical_cause": { "type": "string" },
"recommendation": { "type": "string" },
"technical_note": { "type": "string" },
"code_example": {
"type": ["object", "null"],
"properties": {
"bad": { "type": "string" },
"good": { "type": "string" }
}
},
"affected_selectors": {
"type": "array",
"items": { "type": "string" }
}
}
},
"confidenceSignal": {
"type": "object",
"required": ["signal", "assessment"],
"additionalProperties": false,
"properties": {
"signal": { "type": "string" },
"assessment": { "type": "string" }
}
},
"capabilitySignal": {
"type": "object",
"required": ["signal", "source", "confidence", "surfaces", "note"],
"additionalProperties": false,
"properties": {
"signal": { "type": "string" },
"source": { "type": "string" },
"confidence": { "type": "string" },
"surfaces": {
"type": "array",
"items": { "type": "string" }
},
"note": { "type": "string" }
}
},
"normalizedReport": {
"type": "object",
"required": [
"url",
"wcag_level",
"timestamp",
"duration_ms",
"nodes_analyzed",
"score",
"grade",
"certificate",
"findings",
"severity_counts",
"module_scores",
"overall_score"
],
"additionalProperties": true,
"properties": {
"url": { "type": "string" },
"wcag_level": { "type": "string" },
"timestamp": { "type": "string", "format": "date-time" },
"duration_ms": { "type": "integer", "minimum": 0 },
"nodes_analyzed": { "type": "integer", "minimum": 0 },
"score": { "type": "integer", "minimum": 0, "maximum": 100 },
"grade": { "type": "string" },
"certificate": { "type": "string" },
"findings": {
"type": "array",
"items": { "$ref": "#/$defs/finding" }
},
"severity_counts": { "$ref": "#/$defs/severityCounts" },
"module_scores": {
"type": "array",
"items": { "$ref": "#/$defs/moduleScore" }
},
"overall_score": { "type": "integer", "minimum": 0, "maximum": 100 },
"risk": { "$ref": "#/$defs/riskAssessment" }
}
},
"riskAssessment": {
"type": "object",
"required": ["level", "critical_issues", "high_issues", "legal_flags", "blocking_issues", "summary"],
"additionalProperties": false,
"properties": {
"level": { "type": "string", "enum": ["low", "medium", "high", "critical"] },
"critical_issues": { "type": "integer", "minimum": 0 },
"high_issues": { "type": "integer", "minimum": 0 },
"legal_flags": { "type": "integer", "minimum": 0 },
"blocking_issues": { "type": "integer", "minimum": 0 },
"summary": { "type": "string" }
}
}
}
}