{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://webbuildr.local/schemas/commerce-judge-v2-result.json",
  "type": "object",
  "additionalProperties": false,
  "required": ["protocol_version", "judge_id", "lens", "evidence_viewed", "interaction_receipts_viewed", "page"],
  "properties": {
    "protocol_version": { "const": "2.0" },
    "judge_id": { "type": "string", "minLength": 1 },
    "lens": { "enum": ["craft", "journey", "trust"] },
    "evidence_viewed": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
    "interaction_receipts_viewed": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
    "page": { "$ref": "#/$defs/page" }
  },
  "$defs": {
    "evidence_path": { "type": "string", "pattern": "^evidence/[A-Za-z0-9][A-Za-z0-9._/-]*$" },
    "dimension": { "enum": ["visual_craft", "brand_distinctiveness", "journey_flow", "trust_proof", "offer_clarity", "mobile_usability"] },
    "score": { "type": "number", "minimum": 0, "maximum": 10, "multipleOf": 0.1 },
    "scores": {
      "type": "object", "additionalProperties": false,
      "required": ["visual_craft", "brand_distinctiveness", "journey_flow", "trust_proof", "offer_clarity", "mobile_usability"],
      "properties": {
        "visual_craft": { "$ref": "#/$defs/score" },
        "brand_distinctiveness": { "$ref": "#/$defs/score" },
        "journey_flow": { "$ref": "#/$defs/score" },
        "trust_proof": { "$ref": "#/$defs/score" },
        "offer_clarity": { "$ref": "#/$defs/score" },
        "mobile_usability": { "$ref": "#/$defs/score" }
      }
    },
    "evidence_note": {
      "type": "object", "additionalProperties": false,
      "required": ["observed", "evidence", "confidence"],
      "properties": {
        "observed": { "type": "string", "minLength": 1 },
        "evidence": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
        "confidence": { "enum": ["medium", "high"] }
      }
    },
    "dimension_evidence_entry": {
      "type": "object", "additionalProperties": false,
      "required": ["strengths", "weaknesses"],
      "properties": {
        "strengths": { "type": "array", "items": { "$ref": "#/$defs/evidence_note" } },
        "weaknesses": { "type": "array", "items": { "$ref": "#/$defs/evidence_note" } }
      }
    },
    "dimension_evidence": {
      "type": "object", "additionalProperties": false,
      "required": ["visual_craft", "brand_distinctiveness", "journey_flow", "trust_proof", "offer_clarity", "mobile_usability"],
      "properties": {
        "visual_craft": { "$ref": "#/$defs/dimension_evidence_entry" },
        "brand_distinctiveness": { "$ref": "#/$defs/dimension_evidence_entry" },
        "journey_flow": { "$ref": "#/$defs/dimension_evidence_entry" },
        "trust_proof": { "$ref": "#/$defs/dimension_evidence_entry" },
        "offer_clarity": { "$ref": "#/$defs/dimension_evidence_entry" },
        "mobile_usability": { "$ref": "#/$defs/dimension_evidence_entry" }
      }
    },
    "finding": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "primary_dimension", "observed", "evidence", "customer_consequence", "severity", "confidence", "action"],
      "properties": {
        "id": { "type": "string", "pattern": "^F-[A-Z0-9][A-Z0-9-]{1,31}$" },
        "primary_dimension": { "$ref": "#/$defs/dimension" },
        "secondary_impacts": {
          "type": "array",
          "items": {
            "type": "object", "additionalProperties": false,
            "required": ["dimension", "distinct_customer_consequence"],
            "properties": {
              "dimension": { "$ref": "#/$defs/dimension" },
              "distinct_customer_consequence": { "type": "string", "minLength": 1 }
            }
          }
        },
        "observed": { "type": "string", "minLength": 1 },
        "evidence": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
        "customer_consequence": { "type": "string", "minLength": 1 },
        "severity": { "enum": ["minor", "material", "severe"] },
        "confidence": { "enum": ["medium", "high"] },
        "action": { "type": "string", "minLength": 1 }
      }
    },
    "opportunity": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "primary_dimension", "opportunity", "evidence", "expected_benefit", "confidence", "action"],
      "properties": {
        "id": { "type": "string", "pattern": "^O-[A-Z0-9][A-Z0-9-]{1,31}$" },
        "primary_dimension": { "$ref": "#/$defs/dimension" },
        "opportunity": { "type": "string", "minLength": 1 },
        "evidence": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
        "expected_benefit": { "type": "string", "minLength": 1 },
        "confidence": { "enum": ["medium", "high"] },
        "action": { "type": "string", "minLength": 1 }
      }
    },
    "cta_observation": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "trigger_observed", "destination", "observed_result", "terms_at_decision", "evidence", "confidence"],
      "properties": {
        "id": { "type": "string", "minLength": 1 },
        "trigger_observed": { "type": "string", "minLength": 1 },
        "destination": { "enum": ["selector_navigation", "cart", "checkout", "non_purchase_dialog", "unknown"] },
        "observed_result": { "type": "string", "minLength": 1 },
        "terms_at_decision": { "enum": ["clear", "contradictory", "hidden", "not_applicable", "unknown"] },
        "evidence": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
        "confidence": { "enum": ["medium", "high"] }
      }
    },
    "page": {
      "type": "object", "additionalProperties": false,
      "required": ["scores", "weighted_overall", "dimension_evidence", "cta_observations", "findings", "blockers", "optional_opportunities", "evidence_limitations", "commercial_runtime_limitations"],
      "properties": {
        "scores": { "$ref": "#/$defs/scores" },
        "weighted_overall": { "type": "number", "minimum": 0, "maximum": 10, "multipleOf": 0.01 },
        "dimension_evidence": { "$ref": "#/$defs/dimension_evidence" },
        "cta_observations": { "type": "array", "items": { "$ref": "#/$defs/cta_observation" } },
        "findings": { "type": "array", "items": { "$ref": "#/$defs/finding" } },
        "blockers": { "type": "array", "minItems": 0, "maxItems": 3, "uniqueItems": true, "items": { "type": "string", "pattern": "^F-[A-Z0-9][A-Z0-9-]{1,31}$" } },
        "optional_opportunities": { "type": "array", "items": { "$ref": "#/$defs/opportunity" } },
        "evidence_limitations": { "type": "array", "items": { "type": "string", "minLength": 1 } },
        "commercial_runtime_limitations": {
          "type": "array",
          "items": {
            "type": "object", "additionalProperties": false,
            "required": ["observed_scope", "evidence", "consequence"],
            "properties": {
              "observed_scope": { "type": "string", "minLength": 1 },
              "evidence": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidence_path" } },
              "consequence": { "type": "string", "minLength": 1 }
            }
          }
        }
      }
    }
  }
}
