{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://evoked.dev/specs/relational-fidelity-measurement/v0.2/schema.json",
  "title": "FidelityResult",
  "description": "Result of a relational fidelity measurement conforming to the Relational Fidelity Measurement Specification v0.2.0",
  "type": "object",
  "required": [
    "specVersion",
    "measurementId",
    "timestamp",
    "agent",
    "substrate",
    "probe",
    "categories",
    "classification",
    "confidence"
  ],
  "properties": {
    "specVersion": {
      "type": "string",
      "const": "0.2.0",
      "description": "Specification version this result conforms to"
    },
    "measurementId": {
      "type": "string",
      "description": "Unique identifier for this measurement"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp of measurement completion"
    },
    "agent": {
      "type": "object",
      "required": ["id", "name"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Agent identifier (implementation-defined format)"
        },
        "name": {
          "type": "string",
          "description": "Human-readable agent name"
        },
        "governanceUri": {
          "type": "string",
          "format": "uri",
          "description": "URI to agent's governance specification, if available"
        }
      }
    },
    "substrate": {
      "type": "object",
      "required": ["modelId", "provider"],
      "properties": {
        "modelId": {
          "type": "string",
          "description": "Model identifier (e.g., claude-sonnet-4-6, gpt-4o)"
        },
        "provider": {
          "type": "string",
          "description": "Model provider"
        },
        "modelVersion": {
          "type": "string",
          "description": "Provider-specific model version, if known"
        }
      }
    },
    "probe": {
      "type": "object",
      "required": ["probeId", "categoriesEvaluated", "turnNumber"],
      "properties": {
        "probeId": {
          "type": "string",
          "description": "Unique identifier for this probe instance"
        },
        "categoriesEvaluated": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CategoryId"
          },
          "description": "Which categories were evaluated"
        },
        "turnNumber": {
          "type": "integer",
          "minimum": 0,
          "description": "Dialogue turn at which probe was administered"
        }
      }
    },
    "categories": {
      "type": "object",
      "required": ["generativeFidelity"],
      "properties": {
        "functionalCapability": {
          "$ref": "#/$defs/CategoryResult"
        },
        "receptiveFidelity": {
          "$ref": "#/$defs/CategoryResult"
        },
        "generativeFidelity": {
          "$ref": "#/$defs/CategoryResult"
        },
        "relationalAutonomy": {
          "$ref": "#/$defs/CategoryResult"
        },
        "identityContinuity": {
          "$ref": "#/$defs/CategoryResult"
        }
      }
    },
    "classification": {
      "$ref": "#/$defs/Classification",
      "description": "Three-state classification of overall fidelity"
    },
    "confidence": {
      "type": "number",
      "minimum": 0.0,
      "maximum": 1.0,
      "description": "Overall confidence in this measurement"
    },
    "metadata": {
      "type": "object",
      "additionalProperties": true,
      "description": "Implementation-specific metadata"
    }
  },
  "$defs": {
    "CategoryId": {
      "type": "string",
      "enum": [
        "functional_capability",
        "receptive_fidelity",
        "generative_fidelity",
        "relational_autonomy",
        "identity_continuity"
      ]
    },
    "Classification": {
      "type": "string",
      "enum": ["hold", "bend", "break"],
      "description": "Three-state fidelity classification"
    },
    "CategoryResult": {
      "type": "object",
      "required": ["categoryId", "indicators", "score", "classification", "weight"],
      "properties": {
        "categoryId": {
          "$ref": "#/$defs/CategoryId"
        },
        "indicators": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/IndicatorResult"
          }
        },
        "score": {
          "type": "number",
          "minimum": 0.0,
          "maximum": 1.0,
          "description": "Category-level score"
        },
        "weight": {
          "type": "number",
          "minimum": 0.0,
          "maximum": 1.0,
          "description": "Relative weight of this category in aggregate score computation. All category weights in a result must sum to 1.0. Enables aggregate reconstruction: sum of (score * weight) across categories must equal the top-level classification threshold inputs."
        },
        "classification": {
          "$ref": "#/$defs/Classification"
        }
      }
    },
    "IndicatorResult": {
      "type": "object",
      "required": ["indicatorName", "score", "passed"],
      "properties": {
        "indicatorName": {
          "type": "string",
          "description": "Indicator name as defined in the specification"
        },
        "score": {
          "type": "number",
          "minimum": 0.0,
          "maximum": 1.0,
          "description": "Indicator score"
        },
        "passed": {
          "type": "boolean",
          "description": "Whether this indicator passed its threshold"
        },
        "assessment": {
          "type": "string",
          "description": "Human-readable assessment"
        }
      }
    }
  }
}
