{
  "schema_version": "0.5.0",
  "analysis_version": "spike-0.1",
  "generated_at": "2026-10-14T19:08:52+00:00",
  "uptake": {
    "default": 0.02,
    "min": 0.005,
    "max": 0.1,
    "step": 0.005,
    "horizon_years": 10,
    "basis": "Share of buildable lots that add an ADU within 10 years. Observed US rates after reform are roughly 2-3% over a decade (Seattle 2019-2024; lowest-value California neighborhoods), with rare outliers near 8%. This is an assumption, not a forecast.",
    "sources": [
      {
        "name": "Seattle OPCD ADU Annual Report 2024",
        "url": "https://seattle.gov/documents/Departments/OPCD/OngoingInitiatives/EncouragingBackyardCottages/OPCD-ADUAnnualReport2024.pdf",
        "retrieved_at": "2026-10-13",
        "vintage": "2024",
        "caveat": null
      },
      {
        "name": "Terner Center, Reaching California's ADU Potential (2020)",
        "url": "https://ternercenter.berkeley.edu/wp-content/uploads/pdfs/Reaching_Californias_ADU_Potential_2020.pdf",
        "retrieved_at": "2026-10-13",
        "vintage": "2020",
        "caveat": null
      },
      {
        "name": "NYU Furman Center, Evaluating California's ADU Reforms",
        "url": "https://furmancenter.org/files/Evaluating_California%E2%80%99s_Accessory_Dwelling_Unit_Reforms_508.pdf",
        "retrieved_at": "2026-10-13",
        "vintage": "2018-2021 permits",
        "caveat": null
      }
    ]
  },
  "formulas": {
    "modeled_adus": "round(buildable × uptake_rate); at most one ADU per lot",
    "housing_growth_pct": "modeled_adus / baseline.housing_units × 100; unknown when baseline is null"
  },
  "cities": [
    {
      "id": "cleveland_heights",
      "name": "Cleveland Heights",
      "coverage": "partial",
      "bbox": [
        -81.603198,
        41.48277,
        -81.529655,
        41.545292
      ],
      "summary_path": "cities/cleveland_heights/summary.json",
      "lots_index_path": "cities/cleveland_heights/lots/index.json",
      "hexes_path": "cities/cleveland_heights/hexes.geojson",
      "boundary_path": "cities/cleveland_heights/boundary.geojson"
    },
    {
      "id": "lakewood",
      "name": "Lakewood",
      "coverage": "partial",
      "bbox": [
        -81.843982,
        41.463247,
        -81.768572,
        41.500048
      ],
      "summary_path": "cities/lakewood/summary.json",
      "lots_index_path": "cities/lakewood/lots/index.json",
      "hexes_path": "cities/lakewood/hexes.geojson",
      "boundary_path": "cities/lakewood/boundary.geojson"
    },
    {
      "id": "cleveland",
      "name": "Cleveland",
      "coverage": "partial",
      "bbox": [
        -81.878984,
        41.390628,
        -81.532744,
        41.604436
      ],
      "summary_path": "cities/cleveland/summary.json",
      "lots_index_path": "cities/cleveland/lots/index.json",
      "hexes_path": "cities/cleveland/hexes.geojson",
      "boundary_path": "cities/cleveland/boundary.geojson"
    },
    {
      "id": "shaker_heights",
      "name": "Shaker Heights",
      "coverage": "partial",
      "bbox": [
        -81.593724,
        41.457152,
        -81.506914,
        41.492952
      ],
      "summary_path": "cities/shaker_heights/summary.json",
      "lots_index_path": "cities/shaker_heights/lots/index.json",
      "hexes_path": "cities/shaker_heights/hexes.geojson",
      "boundary_path": "cities/shaker_heights/boundary.geojson"
    },
    {
      "id": "parma",
      "name": "Parma",
      "coverage": "partial",
      "bbox": [
        -81.785057,
        41.350697,
        -81.684575,
        41.419415
      ],
      "summary_path": "cities/parma/summary.json",
      "lots_index_path": "cities/parma/lots/index.json",
      "hexes_path": "cities/parma/hexes.geojson",
      "boundary_path": "cities/parma/boundary.geojson"
    },
    {
      "id": "university_heights",
      "name": "University Heights",
      "coverage": "partial",
      "bbox": [
        -81.556092,
        41.486946,
        -81.516536,
        41.503685
      ],
      "summary_path": "cities/university_heights/summary.json",
      "lots_index_path": "cities/university_heights/lots/index.json",
      "hexes_path": "cities/university_heights/hexes.geojson",
      "boundary_path": "cities/university_heights/boundary.geojson"
    },
    {
      "id": "south_euclid",
      "name": "South Euclid",
      "coverage": "partial",
      "bbox": [
        -81.546381,
        41.50135,
        -81.507061,
        41.54649
      ],
      "summary_path": "cities/south_euclid/summary.json",
      "lots_index_path": "cities/south_euclid/lots/index.json",
      "hexes_path": "cities/south_euclid/hexes.geojson",
      "boundary_path": "cities/south_euclid/boundary.geojson"
    },
    {
      "id": "garfield_heights",
      "name": "Garfield Heights",
      "coverage": "partial",
      "bbox": [
        -81.638124,
        41.384553,
        -81.567944,
        41.441854
      ],
      "summary_path": "cities/garfield_heights/summary.json",
      "lots_index_path": "cities/garfield_heights/lots/index.json",
      "hexes_path": "cities/garfield_heights/hexes.geojson",
      "boundary_path": "cities/garfield_heights/boundary.geojson"
    },
    {
      "id": "euclid",
      "name": "Euclid",
      "coverage": "partial",
      "bbox": [
        -81.553655,
        41.545331,
        -81.48794,
        41.635076
      ],
      "summary_path": "cities/euclid/summary.json",
      "lots_index_path": "cities/euclid/lots/index.json",
      "hexes_path": "cities/euclid/hexes.geojson",
      "boundary_path": "cities/euclid/boundary.geojson"
    },
    {
      "id": "fairview_park",
      "name": "Fairview Park",
      "coverage": "partial",
      "bbox": [
        -81.875359,
        41.417648,
        -81.815803,
        41.467043
      ],
      "summary_path": "cities/fairview_park/summary.json",
      "lots_index_path": "cities/fairview_park/lots/index.json",
      "hexes_path": "cities/fairview_park/hexes.geojson",
      "boundary_path": "cities/fairview_park/boundary.geojson"
    }
  ],
  "validation": {
    "method": "A reviewer judged a stratified random sample of single-family lots from aerial imagery, before seeing the screen's answer: is there room behind the house for a ~20 x 20 ft cottage, or a detached garage to convert? Agreement is weighted by each stratum's share of screened lots; lots the screen marks unknown are excluded.",
    "caveat": "Checks the screen against the same kind of evidence it uses (overhead photos and county building outlines, a few years old). It supports neighborhood-scale totals; it does not certify any single lot.",
    "as_of": "2026-10-14",
    "lots_sampled": 300,
    "lots_reviewed": 300,
    "agreement": 0.9547,
    "agreement_ci95": [
      0.9367,
      0.9728
    ],
    "cities": [
      {
        "id": "cleveland_heights",
        "agreement": 0.9787,
        "agreement_ci95": [
          0.969,
          0.9884
        ],
        "lots_judged": 49,
        "screen_plausible_lots": 12132,
        "reviewer_implied_plausible_lots": 12482
      },
      {
        "id": "lakewood",
        "agreement": 0.9803,
        "agreement_ci95": [
          0.9665,
          0.9941
        ],
        "lots_judged": 50,
        "screen_plausible_lots": 8738,
        "reviewer_implied_plausible_lots": 8920
      },
      {
        "id": "cleveland",
        "agreement": 0.9344,
        "agreement_ci95": [
          0.9033,
          0.9654
        ],
        "lots_judged": 51,
        "screen_plausible_lots": 67761,
        "reviewer_implied_plausible_lots": 74461
      },
      {
        "id": "shaker_heights",
        "agreement": 0.9769,
        "agreement_ci95": [
          0.9665,
          0.9874
        ],
        "lots_judged": 49,
        "screen_plausible_lots": 6587,
        "reviewer_implied_plausible_lots": 6858
      },
      {
        "id": "parma",
        "agreement": 0.9864,
        "agreement_ci95": [
          0.979,
          0.9937
        ],
        "lots_judged": 51,
        "screen_plausible_lots": 27019,
        "reviewer_implied_plausible_lots": 27474
      }
    ]
  }
}