{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "field_replay.network_profile.v2",
  "type": "object",
  "required": [
    "schema",
    "profile_id",
    "measurement",
    "endpoints",
    "summary",
    "directions",
    "quality"
  ],
  "properties": {
    "schema": {
      "const": "field_replay.network_profile.v2"
    },
    "profile_id": {
      "type": "string"
    },
    "scenario_name": {
      "type": "string"
    },
    "created_at_unix_ns": {
      "type": "integer"
    },
    "measurement": {
      "type": "object"
    },
    "endpoints": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "summary": {
      "type": "object"
    },
    "directions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "from_agent_id",
          "to_agent_id",
          "loss",
          "jitter",
          "reorder",
          "duplicate",
          "outage",
          "timeline",
          "events"
        ]
      }
    },
    "quality": {
      "type": "object"
    }
  },
  "description": "v2: canonical field naming (timeline rtt_ms_p50->rtt_p50_ms; jitter_ms_p95->jitter_p95_ms; inter_arrival_jitter_ms_pN->inter_arrival_jitter_pN_ms). combined_rtt_ms{p50,..} and loss unchanged."
}