{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "CRSProf Canonical Schema",
  "description": "Canonical CRSProf model centered on ordered segments.",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "enum": [1, 2, 3],
      "description": "Schema version for the canonical CRSProf format."
    },
    "event": {
      "$ref": "#/definitions/event"
    },
    "semantics": {
      "$ref": "#/definitions/semantics"
    },
    "gpx": {
      "type": "object",
      "properties": {
        "reference": {
          "$ref": "#/definitions/gpx_source"
        },
        "execution": {
          "$ref": "#/definitions/gpx_source"
        }
      },
      "required": [
        "reference"
      ],
      "additionalProperties": false
    },
    "options": {
      "type": "object",
      "properties": {
        "analysis": {
          "$ref": "#/definitions/analysis_options"
        },
        "reference": {
          "$ref": "#/definitions/reference_options"
        },
        "execution": {
          "$ref": "#/definitions/execution_options"
        },
        "estimation": {
          "$ref": "#/definitions/estimation_options"
        },
        "comparison": {
          "$ref": "#/definitions/comparison_options"
        }
      },
      "additionalProperties": false
    },
    "annotations": {
      "$ref": "#/definitions/annotations"
    },
    "segments": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/segment"
      }
    },
    "indexes": {
      "$ref": "#/definitions/indexes"
    }
  },
  "required": [
    "version",
    "gpx",
    "segments"
  ],
  "allOf": [
    {
      "if": {
        "properties": {
          "gpx": {
            "required": ["execution"]
          }
        },
        "required": ["gpx"]
      },
      "then": {
        "required": ["options"],
        "properties": {
          "options": {
            "required": ["execution"],
            "properties": {
              "execution": {
                "required": [
                  "moving_threshold",
                  "auto_stop_threshold",
                  "auto_stop_merge_distance"
                ]
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "segments": {
            "contains": {
              "required": ["execution"]
            }
          }
        },
        "required": ["segments"]
      },
      "then": {
        "required": ["options"],
        "properties": {
          "options": {
            "required": ["execution"],
            "properties": {
              "execution": {
                "required": [
                  "moving_threshold",
                  "auto_stop_threshold",
                  "auto_stop_merge_distance"
                ]
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "version": { "const": 3 }
        },
        "required": ["version"]
      },
      "then": {
        "required": ["options"],
        "properties": {
          "options": {
            "type": "object",
            "required": ["analysis", "reference"],
            "properties": {
              "analysis": {
                "type": "object",
                "required": ["distance_policy", "elevation_policy", "gap_algorithm"],
                "not": { "required": ["smoothing_window"] }
              },
              "reference": {
                "type": "object",
                "required": ["segmentation"],
                "properties": {
                  "segmentation": {
                    "type": "object",
                    "required": ["algorithm"],
                    "properties": {
                      "boundary_policy": { "const": "source_owned_boundaries_v2" },
                      "pace_policy": { "const": "source_owned_effort_regimes_v3" },
                      "metric_ownership_policy": { "const": "source_leg_metrics_v2" },
                      "slope_policy": { "const": "source_leg_grade_v2" },
                      "flat_terrain_policy": { "const": "source_owned_variability_v2" },
                      "greedy_grade_policy": { "const": "centered_physical_grade_v2" },
                      "greedy_segmentation_policy": { "const": "source_owned_persistent_transitions_v2" }
                    }
                  }
                }
              },
              "execution": {
                "type": "object",
                "properties": {
                  "movement_policy": { "const": "terrain_multisignal_v2" },
                  "movement_policy_shadow": { "const": false },
                  "time_ownership_policy": { "const": "source_chronology_time_v2" }
                }
              },
              "comparison": {
                "type": "object",
                "properties": {
                  "matching_policy": { "const": "source_leg_topology_v2" }
                }
              }
            }
          },
          "annotations": {
            "type": "object",
            "properties": {
              "segmentation_boundary": {
                "type": "object",
                "properties": { "policy": { "const": "source_owned_boundaries_v2" } }
              },
              "pace_segmentation": {
                "type": "object",
                "properties": { "requested_policy": { "const": "source_owned_effort_regimes_v3" } }
              },
              "slope_segmentation": {
                "type": "object",
                "properties": { "requested_policy": { "const": "source_leg_grade_v2" } }
              },
              "flat_terrain_segmentation": {
                "type": "object",
                "properties": { "requested_policy": { "const": "source_owned_variability_v2" } }
              },
              "greedy_grade_support": {
                "type": "object",
                "properties": { "requested_policy": { "const": "centered_physical_grade_v2" } }
              },
              "greedy_segmentation": {
                "type": "object",
                "properties": {
                  "requested_policy": { "const": "source_owned_persistent_transitions_v2" },
                  "effective_policy": { "const": "source_owned_persistent_transitions_v2" }
                }
              },
              "execution_movement_detection": {
                "type": "object",
                "properties": {
                  "applied_policy": { "const": "terrain_multisignal_v2" },
                  "shadow_policy": { "type": "null" }
                }
              },
              "execution_time_ownership": {
                "type": "object",
                "properties": {
                  "requested_policy": { "const": "source_chronology_time_v2" },
                  "effective_policy": { "const": "source_chronology_time_v2" }
                }
              },
              "comparison_matching": {
                "type": "object",
                "properties": {
                  "requested_policy": { "const": "source_leg_topology_v2" },
                  "effective_policy": { "const": "source_leg_topology_v2" }
                }
              }
            }
          }
        }
      }
    }
  ],
  "additionalProperties": false,
  "definitions": {
    "semantics": {
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "enum": [
            "course_profiler_v1"
          ]
        },
        "schema_url": {
          "type": "string"
        },
        "interpretation_url": {
          "type": "string"
        }
      },
      "required": [
        "profile"
      ],
      "additionalProperties": false
    },
    "link": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "url": {
          "type": "string",
          "minLength": 1
        },
        "tooltip": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "url"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "type": "object",
      "properties": {
        "ranges": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/range_annotation"
          }
        },
        "execution_movement_detection": {
          "$ref": "#/definitions/execution_movement_detection"
        },
        "execution_time_ownership": {
          "$ref": "#/definitions/execution_time_ownership"
        },
        "comparison_matching": {
          "$ref": "#/definitions/comparison_matching_diagnostics"
        },
        "segmentation_boundary": {
          "$ref": "#/definitions/segmentation_boundary_diagnostics"
        },
        "pace_segmentation": {
          "$ref": "#/definitions/pace_segmentation_diagnostics"
        },
        "slope_segmentation": {
          "$ref": "#/definitions/slope_segmentation_diagnostics"
        },
        "flat_terrain_segmentation": {
          "$ref": "#/definitions/flat_terrain_segmentation_diagnostics"
        },
        "distance_processing": {
          "$ref": "#/definitions/distance_processing_diagnostics"
        },
        "elevation_processing": {
          "$ref": "#/definitions/elevation_processing_diagnostics"
        },
        "greedy_grade_support": {
          "$ref": "#/definitions/greedy_grade_support_diagnostics"
        },
        "greedy_segmentation": {
          "$ref": "#/definitions/greedy_segmentation_diagnostics"
        }
      },
      "additionalProperties": false
    },
    "distance_processing_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": { "type": "string", "enum": ["raw_polyline_v1", "noise_aware_trajectory_v2"] },
        "effective_policy": { "type": "string", "enum": ["raw_polyline_v1", "noise_aware_trajectory_v2"] },
        "parsed_raw_2d_meters": { "type": "number", "minimum": 0 },
        "cleaned_raw_2d_meters": { "type": "number", "minimum": 0 },
        "raw_3d_meters": { "type": "number", "minimum": 0 },
        "selected_2d_meters": { "type": "number", "minimum": 0 },
        "selected_distance_meters": { "type": "number", "minimum": 0 },
        "correction_meters": { "type": "number", "minimum": 0 },
        "correction_percent": { "type": "number", "minimum": 0 },
        "estimated_noise_meters": { "type": ["number", "null"], "minimum": 0 },
        "selected_tolerance_meters": { "type": ["number", "null"], "minimum": 0, "maximum": 10 },
        "sensitivity_min_meters": { "type": ["number", "null"], "minimum": 0 },
        "sensitivity_max_meters": { "type": ["number", "null"], "minimum": 0 },
        "valid_residual_count": { "type": "integer", "minimum": 0 },
        "source_run_count": { "type": "integer", "minimum": 0 },
        "source_gap_count": { "type": "integer", "minimum": 0 },
        "collapsed_drift_range_count": { "type": "integer", "minimum": 0 },
        "confidence": { "type": "string", "enum": ["LOW", "MEDIUM", "HIGH"] },
        "selection_reason": { "type": "string", "minLength": 1 },
        "fallback_reason": { "type": ["string", "null"] }
      },
      "required": ["requested_policy", "effective_policy", "parsed_raw_2d_meters", "cleaned_raw_2d_meters", "raw_3d_meters", "selected_2d_meters", "selected_distance_meters", "correction_meters", "correction_percent", "estimated_noise_meters", "selected_tolerance_meters", "sensitivity_min_meters", "sensitivity_max_meters", "valid_residual_count", "source_run_count", "source_gap_count", "collapsed_drift_range_count", "confidence", "selection_reason", "fallback_reason"],
      "additionalProperties": false
    },
    "pace_segmentation_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": {
          "type": "string",
          "enum": ["source_leg_effort_v2", "source_owned_effort_regimes_v3"]
        },
        "effective_algorithm": {
          "type": "string",
          "enum": ["PACE_BASED", "SLOPE_BASED", "STRUCTURAL_ONLY"]
        },
        "fallback_reason": {
          "type": ["string", "null"]
        },
        "bin_size_meters": { "type": "number", "exclusiveMinimum": 0 },
        "smoothing_support_meters": { "type": "number", "exclusiveMinimum": 0 },
        "short_regime_reference_meters": { "type": "number", "exclusiveMinimum": 0 },
        "valid_bin_count": { "type": "integer", "minimum": 0 },
        "accepted_transition_count": { "type": "integer", "minimum": 0 },
        "rejected_transition_count": { "type": "integer", "minimum": 0 }
      },
      "required": ["requested_policy", "effective_algorithm", "fallback_reason"],
      "additionalProperties": false
    },
    "slope_segmentation_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": {
          "type": "string",
          "enum": ["source_leg_grade_v2"]
        },
        "effective_algorithm": {
          "type": "string",
          "enum": ["SLOPE_BASED", "STRUCTURAL_ONLY"]
        },
        "fallback_reason": {
          "type": ["string", "null"]
        },
        "valid_evidence_count": {
          "type": "integer",
          "minimum": 0
        },
        "analytical_boundary_count": {
          "type": "integer",
          "minimum": 0
        },
        "structural_boundary_count": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": ["requested_policy", "effective_algorithm", "fallback_reason", "valid_evidence_count", "analytical_boundary_count", "structural_boundary_count"],
      "additionalProperties": false
    },
    "elevation_processing_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": { "type": "string", "enum": ["adaptive_elevation_hysteresis_v2"] },
        "effective_policy": { "type": "string", "enum": ["adaptive_elevation_hysteresis_v2"] },
        "resampling_interval_meters": { "type": "number", "const": 10 },
        "valid_run_count": { "type": "integer", "minimum": 0 },
        "valid_sample_count": { "type": "integer", "minimum": 0 },
        "valid_distance_meters": { "type": "number", "minimum": 0 },
        "elevation_coverage": { "type": "number", "minimum": 0, "maximum": 1 },
        "estimated_noise_meters": { "type": ["number", "null"], "minimum": 0 },
        "quantization_floor_meters": { "type": ["number", "null"], "minimum": 0 },
        "selected_threshold_meters": { "type": "number", "minimum": 0, "maximum": 10 },
        "evaluated_threshold_min_meters": { "type": ["number", "null"], "minimum": 0 },
        "evaluated_threshold_max_meters": { "type": ["number", "null"], "minimum": 0 },
        "evaluated_variation_min_meters": { "type": ["number", "null"], "minimum": 0 },
        "evaluated_variation_max_meters": { "type": ["number", "null"], "minimum": 0 },
        "stable_threshold_min_meters": { "type": ["number", "null"], "minimum": 0 },
        "stable_threshold_max_meters": { "type": ["number", "null"], "minimum": 0 },
        "stable_variation_min_meters": { "type": ["number", "null"], "minimum": 0 },
        "stable_variation_max_meters": { "type": ["number", "null"], "minimum": 0 },
        "confidence": { "type": "string", "enum": ["HIGH", "MEDIUM", "LOW"] },
        "selection_reason": { "type": "string" },
        "fallback_reason": { "type": ["string", "null"], "enum": ["insufficient_elevation_support", "no_stable_sensitivity_region", "no_valid_elevation_evidence", null] },
        "accepted_turn_count": { "type": "integer", "minimum": 0 },
        "missing_elevation_range_count": { "type": "integer", "minimum": 0 }
      },
      "required": ["requested_policy", "effective_policy", "resampling_interval_meters", "valid_run_count", "valid_sample_count", "valid_distance_meters", "elevation_coverage", "estimated_noise_meters", "quantization_floor_meters", "selected_threshold_meters", "evaluated_threshold_min_meters", "evaluated_threshold_max_meters", "evaluated_variation_min_meters", "evaluated_variation_max_meters", "stable_threshold_min_meters", "stable_threshold_max_meters", "stable_variation_min_meters", "stable_variation_max_meters", "confidence", "selection_reason", "fallback_reason", "accepted_turn_count", "missing_elevation_range_count"],
      "additionalProperties": false
    },
    "greedy_grade_support_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": { "type": "string", "enum": ["centered_physical_grade_v2"] },
        "mode": { "type": "string", "enum": ["automatic", "manual"] },
        "selected_support_meters": { "type": "number", "minimum": 25, "maximum": 500 },
        "evaluated_min_support_meters": { "type": "number", "const": 50 },
        "evaluated_max_support_meters": { "type": "number", "const": 200 },
        "p90_source_leg_meters": { "type": ["number", "null"], "minimum": 0 },
        "valid_source_leg_count": { "type": "integer", "minimum": 0 },
        "elevation_coverage": { "type": "number", "minimum": 0, "maximum": 1 },
        "confidence": { "type": "string", "enum": ["HIGH", "MEDIUM", "LOW", "MANUAL"] },
        "fallback_reason": { "type": ["string", "null"], "enum": ["insufficient_valid_elevation_support", null] },
        "valid_evidence_count": { "type": "integer", "minimum": 0 },
        "analytical_boundary_count": { "type": "integer", "minimum": 0 },
        "structural_boundary_count": { "type": "integer", "minimum": 0 }
      },
      "required": ["requested_policy", "mode", "selected_support_meters", "evaluated_min_support_meters", "evaluated_max_support_meters", "p90_source_leg_meters", "valid_source_leg_count", "elevation_coverage", "confidence", "fallback_reason", "valid_evidence_count", "analytical_boundary_count", "structural_boundary_count"],
      "additionalProperties": false
    },
    "greedy_segmentation_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": { "type": "string", "enum": ["source_owned_persistent_transitions_v2"] },
        "effective_policy": { "type": "string", "enum": ["source_owned_persistent_transitions_v2"] },
        "persistence_distance_meters": { "type": "number", "minimum": 25, "maximum": 250 },
        "valid_evidence_distance_meters": { "type": "number", "minimum": 0 },
        "unknown_evidence_distance_meters": { "type": "number", "minimum": 0 },
        "evidence_coverage": { "type": "number", "minimum": 0, "maximum": 1 },
        "confirmed_transition_count": { "type": "integer", "minimum": 0 },
        "suppressed_transition_count": { "type": "integer", "minimum": 0 },
        "analytical_boundary_count": { "type": "integer", "minimum": 0 },
        "structural_boundary_count": { "type": "integer", "minimum": 0 },
        "flat_variation_boundary_count": { "type": "integer", "minimum": 0 },
        "strict_whole_feature_merge_count": { "type": "integer", "minimum": 0 },
        "flexible_short_feature_count": { "type": "integer", "minimum": 0 },
        "unresolved_unknown_ranges": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "start": { "type": "number", "minimum": 0 },
              "end": { "type": "number", "minimum": 0 },
              "reason": { "type": "string", "enum": ["missing_or_invalid_grade_evidence"] }
            },
            "required": ["start", "end", "reason"],
            "additionalProperties": false
          }
        },
        "fallback_reason": { "type": ["string", "null"], "enum": ["no_valid_grade_evidence", null] }
      },
      "required": ["requested_policy", "effective_policy", "persistence_distance_meters", "valid_evidence_distance_meters", "unknown_evidence_distance_meters", "evidence_coverage", "confirmed_transition_count", "suppressed_transition_count", "analytical_boundary_count", "structural_boundary_count", "flat_variation_boundary_count", "strict_whole_feature_merge_count", "flexible_short_feature_count", "unresolved_unknown_ranges", "fallback_reason"],
      "additionalProperties": false
    },
    "flat_terrain_segmentation_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": {
          "type": "string",
          "enum": ["source_owned_variability_v2"]
        },
        "effective_algorithm": {
          "type": "string",
          "enum": ["GREEDY"]
        },
        "source_boundary_count": {
          "type": "integer",
          "minimum": 0
        },
        "unresolved_ranges": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "start": { "type": "number", "minimum": 0 },
              "end": { "type": "number", "minimum": 0 },
              "cumulative_variation": { "type": "number", "minimum": 0 },
              "limit": { "type": "number", "minimum": 0 },
              "reason": {
                "type": "string",
                "enum": ["single_source_leg_exceeds_limit", "insufficient_elevation_evidence", "flexible_minimum_conflict"]
              }
            },
            "required": ["start", "end", "cumulative_variation", "limit", "reason"],
            "additionalProperties": false
          }
        }
      },
      "required": ["requested_policy", "effective_algorithm", "source_boundary_count", "unresolved_ranges"],
      "additionalProperties": false
    },
    "segmentation_boundary_diagnostics": {
      "type": "object",
      "properties": {
        "policy": {
          "type": "string",
          "enum": ["source_owned_boundaries_v2"]
        },
        "minimum_distance_exceptions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/minimum_distance_exception"
          }
        }
      },
      "required": ["policy", "minimum_distance_exceptions"],
      "additionalProperties": false
    },
    "minimum_distance_exception": {
      "type": "object",
      "properties": {
        "split_index": {"type": "integer", "minimum": 0},
        "segment_index": {"type": "integer", "minimum": 0},
        "start": {"type": "number", "minimum": 0},
        "end": {"type": "number", "minimum": 0},
        "distance": {"type": "number", "minimum": 0},
        "reason": {
          "type": "string",
          "enum": [
            "whole_structural_interval",
            "structural_fragment",
            "supported_feature_flexible",
            "flat_variability_limit"
          ]
        }
      },
      "required": ["split_index", "segment_index", "start", "end", "distance", "reason"],
      "additionalProperties": false
    },
    "execution_time_ownership": {
      "type": "object",
      "properties": {
        "requested_policy": {"type": "string", "enum": ["legacy_adjacent_time_v1", "source_chronology_time_v2"]},
        "effective_policy": {"type": "string", "enum": ["legacy_adjacent_time_v1", "source_chronology_time_v2"]},
        "known_span_seconds": {"type": ["number", "null"], "minimum": 0},
        "owned_elapsed_seconds": {"type": "number", "minimum": 0},
        "moving_seconds": {"type": "number", "minimum": 0},
        "nonmoving_seconds": {"type": "number", "minimum": 0},
        "dwell_seconds": {"type": "number", "minimum": 0},
        "quantified_unknown_seconds": {"type": ["number", "null"], "minimum": 0},
        "unquantified_leg_count": {"type": "integer", "minimum": 0},
        "reversal_or_overlap_leg_count": {"type": "integer", "minimum": 0}
      },
      "required": [
        "requested_policy", "effective_policy", "known_span_seconds",
        "owned_elapsed_seconds", "moving_seconds", "nonmoving_seconds",
        "dwell_seconds", "quantified_unknown_seconds", "unquantified_leg_count",
        "reversal_or_overlap_leg_count"
      ],
      "additionalProperties": false
    },
    "comparison_matching_diagnostics": {
      "type": "object",
      "properties": {
        "requested_policy": {"type": "string", "enum": ["legacy_nearest_partition_v1", "source_leg_topology_v2"]},
        "effective_policy": {"type": "string", "enum": ["legacy_nearest_partition_v1", "source_leg_topology_v2"]},
        "alignment_successful": {"type": "boolean"},
        "alignment_cost": {"type": ["number", "null"]},
        "alignment_average_cost": {"type": ["number", "null"]},
        "source_leg_count": {"type": "integer", "minimum": 0},
        "matched_leg_count": {"type": "integer", "minimum": 0},
        "unmatched_head_leg_count": {"type": "integer", "minimum": 0},
        "unmatched_tail_leg_count": {"type": "integer", "minimum": 0},
        "ambiguous_waypoint_count": {"type": "integer", "minimum": 0},
        "source_distance_meters": {"type": "number", "minimum": 0},
        "owned_distance_meters": {"type": "number", "minimum": 0},
        "distance_residual_meters": {"type": "number"},
        "source_gain_meters": {"type": "number", "minimum": 0},
        "owned_gain_meters": {"type": "number", "minimum": 0},
        "gain_residual_meters": {"type": "number"},
        "source_loss_meters": {"type": "number", "minimum": 0},
        "owned_loss_meters": {"type": "number", "minimum": 0},
        "loss_residual_meters": {"type": "number"},
        "source_owned_elapsed_seconds": {"type": "number", "minimum": 0},
        "owned_elapsed_seconds": {"type": "number", "minimum": 0},
        "elapsed_residual_seconds": {"type": "number"},
        "source_moving_seconds": {"type": "number", "minimum": 0},
        "owned_moving_seconds": {"type": "number", "minimum": 0},
        "moving_residual_seconds": {"type": "number"},
        "source_gap_seconds": {"type": ["number", "null"], "minimum": 0},
        "owned_gap_seconds": {"type": ["number", "null"], "minimum": 0},
        "gap_residual_seconds": {"type": ["number", "null"]},
        "dwell_seconds": {"type": "number", "minimum": 0},
        "limitations": {"type": "array", "items": {"type": "string"}}
      },
      "required": [
        "requested_policy", "effective_policy", "alignment_successful", "alignment_cost",
        "alignment_average_cost", "source_leg_count", "matched_leg_count",
        "unmatched_head_leg_count", "unmatched_tail_leg_count", "ambiguous_waypoint_count",
        "source_distance_meters", "owned_distance_meters", "distance_residual_meters",
        "source_gain_meters", "owned_gain_meters", "gain_residual_meters",
        "source_loss_meters", "owned_loss_meters", "loss_residual_meters",
        "source_owned_elapsed_seconds", "owned_elapsed_seconds", "elapsed_residual_seconds",
        "source_moving_seconds", "owned_moving_seconds", "moving_residual_seconds",
        "source_gap_seconds", "owned_gap_seconds", "gap_residual_seconds", "dwell_seconds", "limitations"
      ],
      "additionalProperties": false
    },
    "execution_movement_detection": {
      "type": "object",
      "properties": {
        "applied_policy": { "type": "string", "enum": ["legacy_speed_v1", "terrain_multisignal_v2"] },
        "shadow_policy": {
          "anyOf": [
            { "type": "string", "enum": ["legacy_speed_v1", "terrain_multisignal_v2"] },
            { "type": "null" }
          ]
        },
        "changed_leg_count": { "type": "integer", "minimum": 0 },
        "recovered_seconds": { "type": "number", "minimum": 0 },
        "recovered_distance": { "type": "number", "minimum": 0 },
        "recovered_seconds_by_reason": {
          "type": "object",
          "additionalProperties": { "type": "number", "minimum": 0 }
        },
        "changed_ranges": {
          "type": "array",
          "items": { "$ref": "#/definitions/movement_changed_range" }
        }
      },
      "required": ["applied_policy", "changed_leg_count", "recovered_seconds", "recovered_distance", "changed_ranges"],
      "additionalProperties": false
    },
    "movement_changed_range": {
      "type": "object",
      "properties": {
        "start_source_leg_index": { "type": "integer", "minimum": 0 },
        "end_source_leg_index": { "type": "integer", "minimum": 0 },
        "reason": { "type": "string" },
        "recovered_seconds": { "type": "number", "minimum": 0 },
        "recovered_distance": { "type": "number", "minimum": 0 },
        "first_leg_evidence": { "$ref": "#/definitions/movement_evidence" },
        "last_leg_evidence": { "$ref": "#/definitions/movement_evidence" }
      },
      "required": ["start_source_leg_index", "end_source_leg_index", "reason", "recovered_seconds", "recovered_distance"],
      "additionalProperties": false
    },
    "movement_evidence": {
      "type": "object",
      "additionalProperties": {
        "type": ["number", "boolean", "null"]
      }
    },
    "range_annotation": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "start": {
          "type": "number",
          "minimum": 0
        },
        "end": {
          "type": "number",
          "minimum": 0
        },
        "gain": {
          "type": "number",
          "minimum": 0
        },
        "loss": {
          "type": "number",
          "minimum": 0
        },
        "elapsed": {
          "type": "number",
          "minimum": 0
        },
        "text": {
          "type": "string"
        },
        "color": {
          "type": "string"
        }
      },
      "required": [
        "start",
        "end",
        "gain",
        "loss"
      ],
      "additionalProperties": false
    },
    "event": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "course": {
          "type": "string"
        },
        "types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        },
        "date": {
          "type": "string"
        },
        "time": {
          "type": "string",
          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
        },
        "location": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "organizer": {
          "$ref": "#/definitions/event_organizer"
        },
        "competitions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/event_competition"
          }
        },
        "links": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/link"
          }
        }
      },
      "additionalProperties": false
    },
    "event_organizer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "event_competition": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "season": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "track": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "start_time": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "point": {
      "type": "object",
      "properties": {
        "distance": {
          "type": "number"
        },
        "elevation": {
          "type": "number"
        },
        "lat": {
          "type": "number"
        },
        "lon": {
          "type": "number"
        },
        "time": {
          "type": "number"
        },
        "hr": {
          "type": "number"
        },
        "cad": {
          "type": "number"
        }
      },
      "required": [
        "distance",
        "elevation",
        "lat",
        "lon"
      ],
      "additionalProperties": false
    },
    "gpx_source": {
      "type": "object",
      "properties": {
        "track": {
          "$ref": "#/definitions/track"
        },
        "points": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/point"
          }
        }
      },
      "required": [
        "points"
      ],
      "additionalProperties": false
    },
    "analysis_options": {
      "type": "object",
      "properties": {
        "include_routes": {
          "type": "boolean"
        },
        "include_waypoints": {
          "type": "boolean"
        },
        "distance_algorithm": {
          "type": "string"
        },
        "distance_policy": {
          "type": "string",
          "enum": ["raw_polyline_v1", "noise_aware_trajectory_v2"]
        },
        "gap_algorithm": {
          "type": "string"
        },
        "use_3d": {
          "type": "boolean"
        },
        "elevation_threshold": {
          "type": "number"
        },
        "elevation_policy": {
          "type": "string",
          "enum": ["legacy_per_leg_threshold_v1", "adaptive_elevation_hysteresis_v2"]
        },
        "smoothing_window": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "reference_segmentation_options": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "algorithm": {
          "type": "string"
        },
        "boundary_policy": {
          "type": "string",
          "enum": [
            "legacy_partition_v1",
            "source_owned_boundaries_v2"
          ]
        },
        "pace_policy": {
          "type": "string",
          "enum": [
            "legacy_hybrid_v1",
            "source_leg_effort_v2",
            "source_owned_effort_regimes_v3"
          ]
        },
        "metric_ownership_policy": {
          "type": "string",
          "enum": [
            "legacy_partition_metrics_v1",
            "source_leg_metrics_v2"
          ]
        },
        "slope_policy": {
          "type": "string",
          "enum": [
            "legacy_rolling_v1",
            "source_leg_grade_v2"
          ]
        },
        "flat_terrain_policy": {
          "type": "string",
          "enum": [
            "legacy_flat_delta_v1",
            "source_owned_variability_v2"
          ]
        },
        "greedy_grade_policy": {
          "type": "string",
          "enum": [
            "legacy_thresholded_point_window_v1",
            "centered_physical_grade_v2"
          ]
        },
        "greedy_grade_support_meters": {
          "type": ["number", "null"],
          "minimum": 25,
          "maximum": 500
        },
        "greedy_segmentation_policy": {
          "type": "string",
          "enum": [
            "legacy_incremental_postprocess_v1",
            "source_owned_persistent_transitions_v2"
          ]
        },
        "flat_grade": {
          "type": "number"
        },
        "slope_change_threshold": {
          "type": "number"
        },
        "flat_max_elevation_delta": {
          "type": [
            "number",
            "null"
          ]
        },
        "minimum_distance": {
          "type": "number"
        },
        "flexible_minimum_distance": {
          "type": "boolean"
        },
        "flexible_flat_max_elevation_delta": {
          "type": "boolean"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "greedy_segmentation_policy": { "const": "source_owned_persistent_transitions_v2" }
            },
            "required": ["greedy_segmentation_policy"]
          },
          "then": {
            "properties": {
              "greedy_grade_policy": { "const": "centered_physical_grade_v2" },
              "boundary_policy": { "const": "source_owned_boundaries_v2" }
            },
            "required": ["greedy_grade_policy", "boundary_policy"]
          }
        }
      ],
      "additionalProperties": false
    },
    "reference_options": {
      "type": "object",
      "properties": {
        "segmentation": {
          "$ref": "#/definitions/reference_segmentation_options"
        }
      },
      "additionalProperties": false
    },
    "comparison_options": {
      "type": "object",
      "properties": {
        "matching_policy": {
          "type": "string",
          "enum": ["legacy_nearest_partition_v1", "source_leg_topology_v2"]
        }
      },
      "additionalProperties": false
    },
    "execution_options": {
      "type": "object",
      "properties": {
        "moving_threshold": {
          "type": "number"
        },
        "movement_policy": {
          "type": "string",
          "enum": [
            "legacy_speed_v1",
            "terrain_multisignal_v2"
          ]
        },
        "movement_policy_shadow": {
          "type": "boolean"
        },
        "time_ownership_policy": {
          "type": "string",
          "enum": [
            "legacy_adjacent_time_v1",
            "source_chronology_time_v2"
          ]
        },
        "auto_stop_threshold": {
          "type": "number"
        },
        "auto_stop_merge_distance": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "checkpoint_window": {
      "type": "object",
      "properties": {
        "split_index": {
          "type": "integer",
          "minimum": 0
        },
        "min_elapsed": {
          "type": "number",
          "minimum": 0
        },
        "max_elapsed": {
          "type": "number",
          "minimum": 0
        },
        "enabled": {
          "type": "boolean"
        },
        "rule": {
          "type": "string",
          "enum": [
            "hard",
            "soft"
          ]
        }
      },
      "required": [
        "split_index"
      ],
      "additionalProperties": false
    },
    "estimation_options": {
      "type": "object",
      "properties": {
        "pace": {
          "type": "number"
        },
        "pace_distance_reference": {
          "type": "number"
        },
        "pace_distance_exponent": {
          "type": "number"
        },
        "use_tech": {
          "type": "boolean"
        },
        "tech_mode": {
          "type": "string",
          "enum": [
            "none",
            "user_defined",
            "inferred"
          ]
        },
        "fatigue_factor": {
          "type": "number"
        },
        "fatigue_model": {
          "type": "string",
          "enum": [
            "exponent",
            "progressive_kick",
            "history_adaptive_phases",
            "load_first_adaptive"
          ]
        },
        "fatigue_phase_profile": {
          "type": "array",
          "minItems": 5,
          "maxItems": 5,
          "items": {
            "type": "number"
          }
        },
        "hike_grade_threshold": {
          "type": "number"
        },
        "use_altitude": {
          "type": "boolean"
        },
        "use_weather": {
          "type": "boolean"
        },
        "checkpoint_windows": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/checkpoint_window"
          }
        },
        "evidence_budget_strategy": {
          "$ref": "#/definitions/evidence_budget_strategy"
        }
      },
      "additionalProperties": false
    },
    "evidence_budget_strategy": {
      "type": "object",
      "properties": {
        "estimation_model": {"enum": ["load_response_evidence_v2", "load_response_evidence_v3"]},
        "target_intensity": {"type": "string", "enum": ["conservative", "expected", "aggressive"]},
        "pacing_shape": {"type": "string", "enum": ["balanced", "negative_split", "positive_split"]},
        "requested_half_split_percent": {"type": "number", "minimum": -15, "maximum": 15},
        "achieved_half_split_percent": {"type": "number"},
        "feasible": {"type": "boolean"},
        "warnings": {"type": "array", "items": {"type": "string"}},
        "predicted_metabolic_budget": {"type": "number", "minimum": 0},
        "predicted_muscular_budget": {"type": "number", "minimum": 0},
        "consumed_metabolic_budget": {"type": "number", "minimum": 0},
        "consumed_muscular_budget": {"type": "number", "minimum": 0},
        "evidence_supported_intensity": {"type": "number", "exclusiveMinimum": 0},
        "effective_activity_support": {"type": "number", "minimum": 0},
        "budget_confidence": {"type": "number", "minimum": 0, "maximum": 1},
        "fallback_level": {"type": "string"},
        "binding_constraints": {"type": "array", "items": {"type": "string"}},
        "peak_metabolic_state": {"type": "number", "minimum": 0},
        "peak_muscular_state": {"type": "number", "minimum": 0},
        "terminal_metabolic_state": {"type": "number", "minimum": 0},
        "terminal_muscular_state": {"type": "number", "minimum": 0},
        "minimum_reserve_remaining_m": {"type": "number", "minimum": 0},
        "load_feasible": {"type": "boolean"},
        "timing_feasible": {"type": "boolean"},
        "locked_segment_indexes": {
          "type": "array",
          "items": {"type": "integer", "minimum": 0},
          "uniqueItems": true
        },
        "timing_constraints": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {"type": "string", "minLength": 1},
              "type": {"type": "string", "enum": ["checkpoint_window", "cutoff_arrival", "cutoff_departure"]},
              "segment_index": {"type": "integer", "minimum": 0},
              "evaluation_point": {"type": "string", "enum": ["before_segment", "after_segment"]},
              "elapsed_seconds": {"type": "number", "minimum": 0},
              "min_elapsed_seconds": {"type": "number", "minimum": 0},
              "max_elapsed_seconds": {"type": "number", "minimum": 0},
              "early_by_seconds": {"type": "number", "minimum": 0},
              "late_by_seconds": {"type": "number", "minimum": 0},
              "violation_seconds": {"type": "number", "minimum": 0},
              "satisfied": {"type": "boolean"},
              "slack_seconds": {"type": "number", "minimum": 0}
            },
            "required": ["id", "type", "segment_index", "evaluation_point", "elapsed_seconds", "early_by_seconds", "late_by_seconds", "violation_seconds", "satisfied"],
            "additionalProperties": false
          }
        },
        "converged": {"type": "boolean"},
        "iterations": {"type": "integer", "minimum": 0},
        "runtime_ms": {"type": "number", "minimum": 0}
      },
      "required": [
        "estimation_model", "target_intensity", "pacing_shape", "requested_half_split_percent",
        "achieved_half_split_percent", "feasible", "warnings", "predicted_metabolic_budget",
        "predicted_muscular_budget", "consumed_metabolic_budget", "consumed_muscular_budget",
        "effective_activity_support", "budget_confidence", "fallback_level", "binding_constraints",
        "peak_metabolic_state", "peak_muscular_state", "terminal_metabolic_state",
        "terminal_muscular_state", "converged", "iterations", "runtime_ms"
      ],
      "additionalProperties": false
    },
    "load_channel": {
      "type": "object",
      "properties": {
        "start": {
          "type": "number"
        },
        "delta": {
          "type": "number"
        }
      },
      "required": [
        "start",
        "delta"
      ],
      "additionalProperties": false
    },
    "technical_metrics": {
      "type": "object",
      "properties": {
        "vam": {
          "type": "number"
        },
        "descent_stress": {
          "type": "number"
        },
        "climb_efficiency": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "execution_metrics": {
      "type": "object",
      "description": "Execution evidence. Motion is required by semantic validators when options.execution.movement_policy is explicit; its absence in legacy artifacts remains unknown and must not be inferred.",
      "properties": {
        "motion": {
          "type": "object",
          "properties": {
            "locomotion": {
              "type": "string",
              "enum": [
                "run",
                "hike",
                "walk",
                "stop"
              ]
            }
          },
          "required": [
            "locomotion"
          ],
          "additionalProperties": false
        },
        "physiological": {
          "type": "object",
          "properties": {
            "avg_hr": {
              "type": "number"
            },
            "avg_cad": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "load": {
          "type": "object",
          "properties": {
            "metabolic": {
              "$ref": "#/definitions/load_channel"
            },
            "muscular": {
              "$ref": "#/definitions/load_channel"
            }
          },
          "additionalProperties": false
        },
        "technical": {
          "$ref": "#/definitions/technical_metrics"
        }
      },
      "additionalProperties": false
    },
    "plan_overlay": {
      "type": "object",
      "properties": {
        "elapsed": {
          "type": "number",
          "minimum": 0
        },
        "grade_adjusted": {
          "type": "number",
          "minimum": 0
        },
        "metrics": {
          "$ref": "#/definitions/plan_metrics"
        }
      },
      "required": [
        "elapsed"
      ],
      "additionalProperties": false
    },
    "plan_metrics": {
      "type": "object",
      "properties": {
        "motion": {
          "type": "object",
          "properties": {
            "locomotion": {
              "type": "string",
              "enum": [
                "run",
                "hike",
                "walk",
                "stop"
              ]
            },
            "locked_movement": {
              "type": "boolean"
            }
          },
          "required": [
            "locomotion"
          ],
          "additionalProperties": false
        },
        "load": {
          "type": "object",
          "properties": {
            "metabolic": {
              "$ref": "#/definitions/load_channel"
            },
            "muscular": {
              "$ref": "#/definitions/load_channel"
            }
          },
          "additionalProperties": false
        },
        "technical": {
          "$ref": "#/definitions/technical_metrics"
        }
      },
      "additionalProperties": false
    },
    "execution_overlay": {
      "type": "object",
      "properties": {
        "elapsed_start": {
          "type": "number",
          "minimum": 0
        },
        "elapsed": {
          "type": "number",
          "minimum": 0
        },
        "moving": {
          "type": "number",
          "minimum": 0
        },
        "grade_adjusted": {
          "type": "number",
          "minimum": 0
        },
        "distance": {
          "type": "number",
          "minimum": 0
        },
        "gain": {
          "type": "number",
          "minimum": 0
        },
        "loss": {
          "type": "number",
          "minimum": 0
        },
        "metrics": {
          "$ref": "#/definitions/execution_metrics"
        }
      },
      "required": [
        "elapsed_start",
        "elapsed",
        "metrics"
      ],
      "additionalProperties": false
    },
    "segment": {
      "type": "object",
      "properties": {
        "index": {
          "type": "integer"
        },
        "start": {
          "type": "number",
          "minimum": 0
        },
        "distance": {
          "type": "number",
          "minimum": 0
        },
        "gain": {
          "type": "number",
          "minimum": 0
        },
        "loss": {
          "type": "number",
          "minimum": 0
        },
        "terrain": {
          "type": "string",
          "enum": ["UP", "DOWN", "FLAT", "UNKNOWN"]
        },
        "name": {
          "type": "string"
        },
        "note": {
          "type": "string"
        },
        "resources": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "water",
              "water_source",
              "drinks",
              "fruit",
              "food",
              "toilet",
              "medic",
              "chrono",
              "crew",
              "pacer",
              "car",
              "bus",
              "ambulance",
              "shuttle",
              "telecabine",
              "drop_bag",
              "withdrawal",
              "binoculars",
              "hot_meal",
              "tent",
              "showers",
              "changing_room",
              "physiotherapy",
              "rest_area",
              "start_flag",
              "finish_flag"
            ]
          }
        },
        "cutoff": {
          "type": "string"
        },
        "split_separator": {
          "type": "boolean"
        },
        "links": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/link"
          }
        },
        "tech": {
          "type": "number"
        },
        "plan": {
          "$ref": "#/definitions/plan_overlay"
        },
        "execution": {
          "$ref": "#/definitions/execution_overlay"
        }
      },
      "required": [
        "index",
        "start",
        "distance",
        "gain",
        "loss"
      ],
      "additionalProperties": false
    },
    "indexes": {
      "type": "object",
      "properties": {
        "course": {
          "type": "object",
          "properties": {
            "score": {
              "type": "number"
            },
            "weighted_distance_km": {
              "type": "number"
            },
            "climb_penalty": {
              "type": "number"
            },
            "climb_multiplier": {
              "type": "number"
            },
            "surface_factor": {
              "type": "number"
            },
            "surface_label": {
              "type": "string"
            },
            "surface_source": {
              "type": "string",
              "enum": [
                "event",
                "inferred",
                "default"
              ]
            },
            "altitude_factor": {
              "type": "number"
            },
            "altitude_fraction": {
              "type": "number"
            },
            "altitude_tranches": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "min_meters": {
                    "type": "number"
                  },
                  "max_meters": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "distance_meters": {
                    "type": "number"
                  },
                  "distance_fraction": {
                    "type": "number"
                  }
                },
                "required": [
                  "min_meters",
                  "distance_meters",
                  "distance_fraction"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "score"
          ],
          "additionalProperties": false
        },
        "ability": {
          "type": "number"
        },
        "completion": {
          "type": "number"
        },
        "performance": {
          "type": "object",
          "properties": {
            "score": {
              "type": "number"
            }
          },
          "required": [
            "score"
          ],
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
  }
}
