{ "title": "Reference versus real-browser render review", "type": "object", "additionalProperties": false, "properties": { "verdict": {"type": "string", "enum": ["pass", "concerns", "fail", "blocked"]}, "image_artifacts": { "type": "array", "maxItems": 20, "items": { "type": "object", "additionalProperties": false, "properties": { "kind": {"type": "string", "enum": ["reference", "render"]}, "relative_path": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}, "viewport_width": {"type": ["integer", "null"], "minimum": 1} }, "required": ["kind", "relative_path", "sha256", "viewport_width"] } }, "mismatches": { "type": "array", "maxItems": 50, "items": { "type": "object", "additionalProperties": false, "properties": { "gate": {"type": "string", "enum": ["perceptual", "pixel_edge", "responsive", "browser_behavior", "accessibility"]}, "severity": {"type": "string", "enum": ["high", "medium", "low", "note"]}, "region": {"type": "string", "minLength": 1}, "evidence": {"type": "string", "minLength": 1} }, "required": ["gate", "severity", "region", "evidence"] } }, "blockers": {"type": "array", "items": {"type": "string"}, "maxItems": 20} }, "required": ["verdict", "image_artifacts", "mismatches", "blockers"], "allOf": [ { "if": {"properties": {"verdict": {"const": "pass"}}, "required": ["verdict"]}, "then": {"properties": {"image_artifacts": {"minItems": 2}, "mismatches": {"maxItems": 0}, "blockers": {"maxItems": 0}}} }, { "if": {"properties": {"verdict": {"const": "blocked"}}, "required": ["verdict"]}, "then": {"properties": {"blockers": {"minItems": 1}}} } ] }