{
  "version": "0.2.0",
  "updatedAt": "2026-07-19",
  "relations": [
    { "id": "map.view.uses_viewport", "from": ["map.view"], "to": ["map.viewport"], "status": "product-required", "summary": "A Map View owns provider-neutral viewport state." },
    { "id": "map.view.contains_layer", "from": ["map.view"], "to": ["map.base_layer", "map.building_layer", "map.grid_layer"], "status": "product-required", "summary": "A Map View composes enabled spatial layers." },
    { "id": "map.view.displays_subject", "from": ["map.view"], "to": ["map.place_target", "map.moving_object", "map.zone", "map.route", "map.track_segment", "map.station", "map.stop", "map.terminal"], "status": "product-required", "summary": "A Map View displays domain subjects through approved page slots." },
    { "id": "map.moving_object.uses_pin", "from": ["map.moving_object"], "to": ["map.pin"], "status": "product-required", "summary": "A moving object can use the shared pin presentation." },
    { "id": "map.moving_object.has_state_facet", "from": ["map.moving_object"], "to": ["map.state_facet"], "status": "product-required", "summary": "A moving object exposes only the state dimensions explicitly declared by its bound Data Product and ontology value contracts." },
    { "id": "map.style_profile.classifies_state_facet", "from": ["map.style_profile"], "to": ["map.state_facet"], "status": "product-required", "summary": "A versioned Foundry style profile maps normalized state facets to renderer-neutral presentation classes, filter groups and sort order." },
    { "id": "map.subject.has_label", "from": ["map.place_target", "map.moving_object", "map.station", "map.stop", "map.terminal"], "to": ["map.label"], "status": "product-required", "summary": "Spatial subjects can use the common label contract and semantic size variants." },
    { "id": "map.zone.uses_style_profile", "from": ["map.zone"], "to": ["map.style_profile"], "status": "product-required", "summary": "Zones use semantic fill, outline, height and level-dependent styling." },
    { "id": "map.route.contains_track_segment", "from": ["map.route"], "to": ["map.track_segment"], "status": "product-required", "summary": "A logical route is rendered from one or more track segments." },
    { "id": "map.route.serves_station", "from": ["map.route"], "to": ["map.station", "map.stop", "map.terminal"], "status": "product-required", "summary": "A route can reference the transport points it serves." },
    { "id": "map.subject.uses_visibility_rule", "from": ["map.grid_layer", "map.place_target", "map.moving_object", "map.pin", "map.label", "map.zone", "map.route", "map.track_segment", "map.station", "map.stop", "map.terminal"], "to": ["map.visibility_rule"], "status": "product-required", "summary": "Map subjects use a provider-neutral visibility and LOD policy." },
    { "id": "map.selection.targets_subject", "from": ["map.selection"], "to": ["map.place_target", "map.moving_object", "map.zone", "map.route", "map.track_segment", "map.station", "map.stop", "map.terminal"], "status": "product-required", "summary": "Selection points to a domain subject rather than a renderer object." },
    { "id": "map.view.rendered_by_adapter", "from": ["map.view"], "to": ["map.renderer_adapter"], "status": "product-required", "summary": "A Map View is rendered through a replaceable adapter." },
    { "id": "map.renderer_adapter.declares_capability", "from": ["map.renderer_adapter"], "to": ["map.provider_capability"], "status": "product-required", "summary": "A renderer adapter declares the provider features it can satisfy." },
    { "id": "map.view.is_interface_view", "from": ["map.view"], "to": ["future.interface_view"], "status": "product-required", "summary": "Map View specializes the Future Interface Layer view concept." },
    { "id": "map.subject.is_interface_widget", "from": ["map.grid_layer", "map.place_target", "map.pin", "map.label", "map.zone", "map.route"], "to": ["future.interface_widget"], "status": "product-required", "summary": "Map visual subjects are exposed through approved interface widgets and slots." },
    { "id": "map.view.receives_interface_binding", "from": ["map.view"], "to": ["future.interface_binding"], "status": "product-required", "summary": "NDC data reaches Map View through the generic Future Interface binding boundary." }
  ]
}
