{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/casoon/auditmysite/docs/json-report.schema.json",
"title": "auditmysite unified report (single)",
"type": "object",
"required": [
"schema_version",
"report_type",
"metadata",
"metric_context",
"summary",
"pages"
],
"additionalProperties": false,
"properties": {
"schema_version": {
"type": "string",
"const": "2.0"
},
"report_type": {
"type": "string",
"const": "single"
},
"tool_version": {
"type": "string"
},
"build_id": {
"type": "string",
"description": "Build-time git short-SHA of the binary that produced this report; \"unknown\" when built without a .git directory."
},
"metadata": {
"$ref": "#/$defs/metadata"
},
"audit_scope": {
"$ref": "#/$defs/auditScope"
},
"execution_environment": {
"type": "object"
},
"audit_quality": {
"$ref": "#/$defs/auditQuality"
},
"metric_context": {
"$ref": "#/$defs/metricContext"
},
"artifacts": {
"type": "array",
"items": {
"$ref": "#/$defs/artifact"
}
},
"summary": {
"$ref": "#/$defs/summary"
},
"pages": {
"type": "array",
"minItems": 1,
"maxItems": 1,
"items": {
"$ref": "#/$defs/pageEntry"
}
},
"collection_errors": {
"description": "Errors raised while serializing the report. Audit and measurement failures are represented separately in module_runs, rule_outcomes, and audit_quality.",
"type": "array",
"items": {
"$ref": "#/$defs/reportError"
}
},
"verdict": {
"type": "string",
"enum": [
"pass",
"warn",
"fail"
]
},
"verdict_reasons": {
"type": "array",
"items": {
"type": "string"
}
}
},
"$defs": {
"artifact": {
"type": "object",
"required": [
"kind",
"media_type",
"delivery",
"path_template",
"status"
],
"additionalProperties": false,
"properties": {
"kind": {
"type": "string"
},
"media_type": {
"type": "string"
},
"delivery": {
"type": "string",
"enum": [
"sidecar"
]
},
"path_template": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"completed",
"partial",
"failed",
"skipped",
"not_applicable",
"not_requested"
]
}
}
},
"reportError": {
"type": "object",
"required": [
"module",
"error_type",
"reason"
],
"additionalProperties": false,
"properties": {
"module": {
"type": "string"
},
"error_type": {
"type": "string"
},
"reason": {
"type": "string"
}
}
},
"auditScope": {
"type": "object",
"required": [
"requested_modules",
"full_audit",
"interactive_mode",
"journey_budget_ms",
"throttling_profiles",
"viewports",
"dismiss_consent",
"capture_screenshots",
"capture_element_evidence"
],
"additionalProperties": false,
"properties": {
"requested_modules": {
"type": "array",
"items": {
"type": "string"
}
},
"full_audit": {
"type": "boolean"
},
"interactive_mode": {
"type": "string"
},
"journey_budget_ms": {
"type": "integer",
"minimum": 0
},
"throttling_profiles": {
"type": "array",
"items": {
"type": "string"
}
},
"viewports": {
"type": "array",
"items": {
"type": "object"
}
},
"dismiss_consent": {
"type": "boolean"
},
"capture_screenshots": {
"type": "boolean"
},
"capture_element_evidence": {
"type": "boolean"
}
}
},
"auditQuality": {
"type": "object",
"required": [
"status",
"qualified_results",
"failed_rule_checks",
"partial_or_failed_modules"
],
"additionalProperties": false,
"properties": {
"status": {
"type": "string",
"enum": [
"complete",
"partial",
"insufficient"
]
},
"qualified_results": {
"type": "boolean"
},
"failed_rule_checks": {
"type": "integer",
"minimum": 0
},
"partial_or_failed_modules": {
"type": "integer",
"minimum": 0
},
"reasons": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"metricContext": {
"type": "object",
"required": [
"score_scale",
"score_definitions",
"count_definitions"
],
"additionalProperties": false,
"properties": {
"score_scale": {
"type": "object",
"required": [
"minimum",
"maximum",
"higher_is_better"
],
"additionalProperties": false,
"properties": {
"minimum": {
"type": "integer",
"const": 0
},
"maximum": {
"type": "integer",
"const": 100
},
"higher_is_better": {
"type": "boolean",
"const": true
}
}
},
"score_definitions": {
"type": "array",
"items": {
"$ref": "#/$defs/metricDefinition"
}
},
"count_definitions": {
"type": "array",
"items": {
"$ref": "#/$defs/metricDefinition"
}
}
}
},
"metricDefinition": {
"type": "object",
"required": [
"field",
"unit",
"meaning"
],
"additionalProperties": false,
"properties": {
"field": {
"type": "string"
},
"unit": {
"type": "string"
},
"meaning": {
"type": "string"
}
}
},
"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
}
}
},
"summary": {
"type": "object",
"required": [
"url_count",
"accessibility_score",
"overall_score",
"grade",
"certificate",
"risk_level",
"violation_count",
"finding_count",
"finding_occurrence_count",
"severity_counts",
"severity_counts_scope",
"occurrence_counts_scope",
"passed_url_count",
"failed_url_count"
],
"additionalProperties": false,
"properties": {
"url_count": {
"type": "integer",
"minimum": 0
},
"accessibility_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"overall_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"grade": {
"type": "string"
},
"certificate": {
"type": "string"
},
"risk_level": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
]
},
"violation_count": {
"type": "integer",
"minimum": 0
},
"finding_count": {
"type": "integer",
"minimum": 0
},
"finding_occurrence_count": {
"type": "integer",
"minimum": 0
},
"severity_counts": {
"$ref": "#/$defs/severityCounts"
},
"severity_counts_scope": {
"type": "string",
"const": "wcag_only"
},
"occurrence_counts": {
"$ref": "#/$defs/severityCounts"
},
"occurrence_counts_scope": {
"type": "string",
"const": "wcag_only"
},
"passed_url_count": {
"type": "integer",
"minimum": 0
},
"failed_url_count": {
"type": "integer",
"minimum": 0
},
"violated_rule_count": {
"type": "integer",
"minimum": 0
},
"top_recurring_rules": {
"type": "array"
},
"performance_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"seo_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"security_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"mobile_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"ux_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"journey_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"performance_throttled_avg_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"lh_mobile_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"wcag_coverage": {
"$ref": "#/$defs/wcagCoverageSummary"
},
"overall_score_weight_basis": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"accessibility_score_breakdown": {
"type": "array",
"items": {
"$ref": "#/$defs/accessibilityScoreComponent"
}
},
"management_risks": {
"type": "array",
"items": {
"$ref": "#/$defs/managementRisk"
}
},
"top_actions": {
"type": "array",
"items": {
"$ref": "#/$defs/decisionAction"
}
},
"commerce": {
"type": [
"object",
"null"
]
}
}
},
"wcagCoverageSummary": {
"type": "object",
"required": [
"level",
"automated_criteria",
"manual_review_criteria",
"total_wcag_aa_criteria",
"note"
],
"additionalProperties": false,
"properties": {
"level": {
"type": "string"
},
"automated_criteria": {
"type": "integer",
"minimum": 0
},
"manual_review_criteria": {
"type": "integer",
"minimum": 0
},
"total_wcag_aa_criteria": {
"type": "integer",
"minimum": 0
},
"note": {
"type": "string"
}
}
},
"accessibilityScoreComponent": {
"type": "object",
"required": [
"area",
"score",
"weight_pct",
"estimated_lost_points",
"main_driver"
],
"additionalProperties": false,
"properties": {
"area": {
"type": "string"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"weight_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"estimated_lost_points": {
"type": "integer",
"minimum": 0
},
"main_driver": {
"type": "string"
}
}
},
"managementRisk": {
"type": "object",
"required": [
"dimension",
"level",
"rationale"
],
"additionalProperties": false,
"properties": {
"dimension": {
"type": "string"
},
"level": {
"type": "string"
},
"rationale": {
"type": "string"
}
}
},
"decisionAction": {
"type": "object",
"required": [
"title",
"risk",
"priority",
"complexity",
"occurrence_count",
"root_cause",
"expected_impact"
],
"additionalProperties": false,
"properties": {
"title": {
"type": "string"
},
"risk": {
"type": "string"
},
"priority": {
"type": "string"
},
"complexity": {
"type": "string"
},
"occurrence_count": {
"type": "integer",
"minimum": 0
},
"root_cause": {
"type": "string"
},
"expected_impact": {
"type": "string"
}
}
},
"pageEntry": {
"type": "object",
"required": [
"url",
"accessibility_score",
"overall_score",
"grade",
"certificate",
"violation_count",
"finding_count",
"finding_occurrence_count",
"severity_counts",
"severity_counts_scope",
"occurrence_counts_scope",
"nodes_analyzed",
"duration_ms",
"module_scores",
"risk",
"principle_coverage",
"findings"
],
"additionalProperties": true,
"properties": {
"url": {
"type": "string"
},
"accessibility_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"overall_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"grade": {
"type": "string"
},
"certificate": {
"type": "string"
},
"violation_count": {
"type": "integer",
"minimum": 0
},
"finding_count": {
"type": "integer",
"minimum": 0
},
"finding_occurrence_count": {
"type": "integer",
"minimum": 0
},
"severity_counts": {
"$ref": "#/$defs/severityCounts"
},
"severity_counts_scope": {
"type": "string",
"const": "wcag_only"
},
"occurrence_counts": {
"$ref": "#/$defs/severityCounts"
},
"occurrence_counts_scope": {
"type": "string",
"const": "wcag_only"
},
"nodes_analyzed": {
"type": "integer",
"minimum": 0
},
"duration_ms": {
"type": "integer",
"minimum": 0
},
"module_scores": {
"type": "array",
"items": {
"$ref": "#/$defs/moduleScore"
}
},
"risk": {
"$ref": "#/$defs/riskAssessment"
},
"principle_coverage": {
"$ref": "#/$defs/principleCoverage"
},
"findings": {
"type": "array",
"items": {
"$ref": "#/$defs/finding"
}
},
"audit_flags": {
"type": "array"
},
"audit_quality": {
"$ref": "#/$defs/auditQuality"
},
"module_runs": {
"type": "array"
},
"rule_outcomes": {
"type": "array"
},
"accessibility_assessments": {
"type": "array"
},
"navigation": {
"type": "object"
},
"consent": {
"type": "object"
},
"detail": {
"$ref": "#/$defs/pageDetail"
}
}
},
"pageDetail": {
"type": "object",
"required": [
"modules"
],
"additionalProperties": true,
"properties": {
"fix_guidance": {
"type": "array",
"items": {
"$ref": "#/$defs/fixGuidance"
}
},
"modules": {
"$ref": "#/$defs/moduleBlob"
},
"confidence_summary": {
"type": "array",
"items": {
"$ref": "#/$defs/confidenceSignal"
}
},
"capabilities": {
"type": "array",
"items": {
"$ref": "#/$defs/capabilitySignal"
}
},
"accessibility_subcategory_scores": {
"description": "Accessibility score per subcategory (0-100, higher is better). Single reports only.",
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"score"
],
"properties": {
"name": {
"type": "string"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
}
},
"security_category_scores": {
"description": "Security score per category (0-100, higher is better); omitted when the Security module did not run. Single reports only.",
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"score"
],
"properties": {
"name": {
"type": "string"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
}
},
"viewport_scores": {
"type": [
"object",
"null"
]
},
"viewport_comparison": {
"type": [
"object",
"null"
]
},
"budget_violations": {
"type": "array"
},
"throttled_performance": {
"type": "array"
},
"screenshot_status": {
"type": [
"object",
"null"
]
},
"collection_errors": {
"description": "Errors raised while serializing this page detail; not audit execution failures.",
"type": "array",
"items": {
"$ref": "#/$defs/reportError"
}
},
"history": {
"type": [
"object",
"null"
]
}
}
},
"moduleBlob": {
"type": "object",
"additionalProperties": false,
"properties": {
"accessibility": {
"type": [
"object",
"null"
]
},
"performance": {
"type": [
"object",
"null"
]
},
"seo": {
"type": [
"object",
"null"
]
},
"security": {
"type": [
"object",
"null"
]
},
"html_conform": {
"type": [
"object",
"null"
]
},
"mobile": {
"type": [
"object",
"null"
]
},
"ux": {
"type": [
"object",
"null"
]
},
"journey": {
"type": [
"object",
"null"
]
},
"dark_mode": {
"type": [
"object",
"null"
]
},
"source_quality": {
"type": [
"object",
"null"
]
},
"ai_visibility": {
"type": [
"object",
"null"
]
},
"content_visibility": {
"type": [
"object",
"null"
]
},
"tech_stack": {
"type": [
"object",
"null"
]
},
"patterns": {
"type": [
"object",
"null"
]
},
"best_practices": {
"type": [
"object",
"null"
]
},
"commerce": {
"type": [
"object",
"null"
]
},
"dual_viewport": {
"type": [
"object",
"null"
]
},
"search_experience": {
"type": [
"object",
"null"
]
}
}
},
"principleCoverage": {
"type": "object",
"required": [
"perceivable",
"operable",
"understandable",
"robust"
],
"additionalProperties": false,
"properties": {
"perceivable": {
"$ref": "#/$defs/coverageRatio"
},
"operable": {
"$ref": "#/$defs/coverageRatio"
},
"understandable": {
"$ref": "#/$defs/coverageRatio"
},
"robust": {
"$ref": "#/$defs/coverageRatio"
}
}
},
"coverageRatio": {
"type": "object",
"required": [
"passed",
"total",
"ratio"
],
"additionalProperties": false,
"properties": {
"passed": {
"type": "integer",
"minimum": 0
},
"total": {
"type": "integer",
"minimum": 0
},
"ratio": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"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",
"band",
"weight_pct",
"contributes_to_overall",
"measurement_type"
],
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"grade": {
"type": "string",
"description": "Letter grade. Present only for modules with weight_pct > 0 — a module that feeds nothing carries `band` alone (plan 29, D2)."
},
"band": {
"type": "string",
"description": "Canonical English qualitative band for `score` (registry FIVE_BAND). The only qualitative label a module of weight 0 carries."
},
"derived_from": {
"type": "array",
"items": { "type": "string" },
"description": "Modules this one re-reads instead of measuring anything new. Absent when the module measures its own subject (plan 29, D3)."
},
"weight_pct": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"contributes_to_overall": {
"type": "boolean"
},
"measurement_type": {
"type": "string",
"enum": [
"measured",
"heuristic",
"optional"
]
}
}
},
"occurrenceEvidence": {
"type": "object",
"required": [
"source"
],
"additionalProperties": false,
"properties": {
"source": {
"type": "string",
"description": "Provenance of this evidence item, e.g. \"ax_tree\", \"dom_attribute\", \"computed\"."
},
"field": {
"type": [
"string",
"null"
],
"description": "E.g. \"dom_path\", \"contrast_ratio\", \"required_ratio\"."
},
"value": {
"type": [
"string",
"null"
]
}
}
},
"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"
]
},
"evidence": {
"type": "array",
"description": "Machine-readable provenance for this occurrence (DOM path, computed measurements like contrast ratio). Canonical English (#406). Absent/empty when no evidence was collected.",
"items": {
"$ref": "#/$defs/occurrenceEvidence"
}
}
}
},
"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"
},
"help_url": {
"type": "string",
"description": "Official reference URL for the criterion (e.g. WCAG Understanding page). Present only for WCAG findings that carry one."
},
"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"
}
}
},
"riskAssessment": {
"type": "object",
"required": [
"level",
"score",
"threshold",
"driven_by",
"critical_issues",
"high_issues",
"legal_flags",
"blocking_issues",
"interactive_critical_issues",
"interactive_high_issues",
"summary"
],
"additionalProperties": false,
"properties": {
"level": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
]
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"threshold": {
"type": "integer",
"minimum": 0
},
"driven_by": {
"type": "string"
},
"critical_issues": {
"type": "integer",
"minimum": 0
},
"high_issues": {
"type": "integer",
"minimum": 0
},
"legal_flags": {
"type": "integer",
"minimum": 0
},
"blocking_issues": {
"type": "integer",
"minimum": 0
},
"interactive_critical_issues": {
"type": "integer",
"minimum": 0
},
"interactive_high_issues": {
"type": "integer",
"minimum": 0
},
"summary": {
"type": "string"
}
}
}
}
}