{
  "dataShapes": {
    "forecastQuestion": {
      "purpose": "The top-level forecasting question being investigated.",
      "fields": [
        "id",
        "title",
        "description",
        "status",
        "due_at",
        "resolved_at",
        "resolution_summary"
      ]
    },
    "referenceClass": {
      "purpose": "Outside-view comparison class and base-rate anchor for a forecast.",
      "fields": [
        "id",
        "forecast_id",
        "name",
        "description",
        "base_rate",
        "sample_size",
        "source_url",
        "notes"
      ]
    },
    "hypothesis": {
      "purpose": "A rival explanation, scenario, driver, or assumption with its own probability.",
      "fields": [
        "id",
        "forecast_id",
        "title",
        "description",
        "kind",
        "status",
        "prior_probability",
        "current_probability"
      ]
    },
    "observation": {
      "purpose": "Evidence, counterevidence, source material, notes, assumptions, or open questions.",
      "fields": [
        "id",
        "forecast_id",
        "title",
        "body",
        "observation_type",
        "source_url",
        "occurred_at",
        "observed_at",
        "reliability",
        "strength",
        "independence_key",
        "tags_json"
      ]
    },
    "observationHypothesisLink": {
      "purpose": "Typed directional relationship between an observation and a hypothesis.",
      "fields": [
        "id",
        "observation_id",
        "hypothesis_id",
        "relation",
        "weight",
        "rationale"
      ]
    },
    "graphEdge": {
      "purpose": "Generic graph connection for visualizing relationships across supported node types.",
      "fields": [
        "id",
        "forecast_id",
        "from_node_type",
        "from_node_id",
        "to_node_type",
        "to_node_id",
        "relation",
        "weight",
        "rationale"
      ]
    },
    "probabilityUpdate": {
      "purpose": "A dated probability revision with the previous value, new value, delta, and rationale.",
      "fields": [
        "id",
        "forecast_id",
        "hypothesis_id",
        "previous_probability",
        "probability",
        "delta",
        "rationale",
        "evidence_summary"
      ]
    },
    "premortemItem": {
      "purpose": "A failure mode found by assuming a forecast or top hypothesis is wrong.",
      "fields": [
        "id",
        "forecast_id",
        "hypothesis_id",
        "failure_mode",
        "severity",
        "likelihood",
        "mitigation"
      ]
    },
    "brierScore": {
      "purpose": "Resolved probabilistic accuracy score for a hypothesis or forecast claim.",
      "fields": [
        "id",
        "forecast_id",
        "hypothesis_id",
        "forecast_probability",
        "outcome",
        "score",
        "notes",
        "scored_at"
      ]
    },
    "forecastEvent": {
      "purpose": "Append-only event log for future audit and timeline views.",
      "fields": [
        "id",
        "forecast_id",
        "event_type",
        "payload_json",
        "created_at"
      ]
    }
  }
}