{
  "id": "lsoa-exposure-input-v1",
  "allFiles": "UTF-8 JSON; every file has path, SHA-256, publisher, edition and URL in the input manifest. Shapes must be EPSG:27700 metres. No online fetch is performed by the exposure runner.",
  "manifest": {
    "crs": "EPSG:27700",
    "boundaryVersion": "LSOA21",
    "scope": [
      "all-road",
      "major-road-only"
    ],
    "years": "Explicit annual study years",
    "intendedStrata": "All combinations of motorway/A/B/C/unclassified and urban/rural for all-road scope",
    "synthetic": "false only for real data; synthetic fixtures never pass the publication gate",
    "expectedCollisionCount": "Independent source total for the exact intended scope",
    "inventoryCompletenessEvidence": "Documented accounting of the entire intended network",
    "positionalUncertaintyEvidence": "Independent position quality / border-case audit",
    "reconcile": "Optional boolean; no scaling without per-stratum explanation",
    "trafficModel": {
      "predictors": "Transport-only allowlist from protocol",
      "trainingSites": "All traffic training site IDs",
      "trainingRegions": "All traffic training region IDs"
    },
    "files": "Each file below must have provenance and an exact byte hash"
  },
  "files": {
    "boundaries": "GeoJSON FeatureCollection; Polygon/MultiPolygon, properties.lsoa21 (unique England LSOA21 code)",
    "segments": "GeoJSON FeatureCollection; LineString/MultiLineString; properties: physical_link_id, year, authority, stratum, flow_basis=both_directions, traffic_status=counted/estimated/missing, aadt, aadt_lower95, aadt_upper95. Distinct physical links cannot overlap along a positive length.",
    "networkInventory": "Array of physical_link_id, year for every intended road link; independent of whether it has an observed count.",
    "collisions": "Array of event_id, year, easting, northing; major-road-only also requires independently validated physical_link_id. One event, not one vehicle/casualty, per record.",
    "trafficValidation": "Array of site, region, year, stratum, observed, predicted, lower95, upper95; held-out sites and entire regions absent from traffic-model training.",
    "officialTotals": "Array of authority, year, stratum, motorMiles, explanation; matched official road-category totals, not population-derived allocations."
  },
  "run": "python scripts/social-lsoa-exposure-v1.py run --manifest /path/manifest.json --out /path/new-candidate",
  "outputs": [
    "exposure-audit.json",
    "segment-parts.json",
    "allocation-audit.json",
    "collision-assignments.json",
    "candidate-panel.json"
  ],
  "release": "A passed exposure gate permits a separately frozen LSOA study. It never promotes an authority coefficient or enables predictions without LSOA validation."
}
