{
 "_meta": {
  "city": "Cambridge, MA",
  "scope": "Citywide — all 12,933 assessor parcels, 261 zoning districts (57 types)",
  "as_of": "2026-06-03",
  "spec": "C:/tmp/cambridge-week1-spec.md",
  "pipeline": "scripts/cambridge/fetch_cambridge.py (download+enrich) -> scripts/cambridge/build_tiles.py (bake cambridge.pmtiles, z13-16); scripts/cambridge/build_canopy.py (bake canopy2018.pmtiles + canopy-change.pmtiles, z12-16, + canopy-summary.json); scripts/cambridge/build_impervious_runoff.py (bake impervious.pmtiles, z12-16, + runoff-summary.json + impervious-parcels.json); scripts/cambridge/build_canopy3d.py (bake canopy3d.pmtiles, z15-16, + canopy3d-summary.json)"
 },
 "bbox_wgs84": [
  -71.1601,
  42.353,
  -71.0642,
  42.404
 ],
 "center_wgs84": [
  -71.1122,
  42.3785
 ],
 "tiles": {
  "parcels_pmtiles": "data/cambridge/cambridge.pmtiles",
  "minzoom": 13,
  "maxzoom": 16,
  "source_layer": "parcels",
  "baked_fields": [
   "pid",
   "Address",
   "Zoning",
   "AssessedValue",
   "LandArea",
   "area_sf",
   "cen_lon",
   "cen_lat"
  ]
 },
 "data": {
  "parcels": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Assessing/FY2026/FY2026_Parcels/ASSESSING_ParcelsFY2026.geojson",
  "zoning": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/CDD/Zoning_Districts/CDD_ZoningDistricts.geojson",
  "buildings": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Basemap/Buildings/BASEMAP_Buildings.geojson",
  "property_db": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Assessing/FY2026/FY2026_Parcels/ASSESSING_PropertyDatabase_FY2026.csv",
  "property_db_ui": "https://www.cambridgema.gov/propertydatabase",
  "property_db_socrata": "https://data.cambridgema.gov/Assessing/Cambridge-Property-Database-FY2026/waa7-ibdu",
  "canopy_2018": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Environmental/Tree_Canopy_2018/ENVIRONMENTAL_TreeCanopy2018.topojson",
  "canopy_change_2014_2018": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Environmental/Tree_Canopy_Change_2014_2018/ENVIRONMENTAL_TreeCanopyChange_2014_2018.topojson",
  "canopy_2009": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Environmental/Tree_Canopy_2009/ENVIRONMENTAL_TreeCanopy2009.topojson",
  "impervious": "https://raw.githubusercontent.com/cambridgegis/cambridgegis_data/main/Environmental/Impervious_Surface/ENVIRONMENTAL_ImperviousSurface.topojson"
 },
 "canopy": {
  "_note": "Baked by scripts/cambridge/build_canopy.py. Source files are TopoJSON, read via the GDAL TopoJSON driver; no separate topojson package is needed.",
  "VINTAGE_LIMITATION": "The newest canopy Cambridge publishes is 2018. Ord 2025-1 was ordained 10 February 2025 — SEVEN YEARS later. These layers cannot show canopy under the current rezoning and must never be captioned 'current tree canopy'. Every use must carry its year in the UI.",
  "gap": "Canopy change ends 2018; the tree-removal permit record (tree-removals.json) begins 2019. Together they bracket the gap; neither closes it. No one has measured Cambridge canopy since 2018.",
  "method": "Object-based image analysis (OBIA) over LiDAR surface models, multispectral imagery and thematic GIS inputs. Spatial Analysis Laboratory, University of Vermont, with Cambridge CDD and the USDA Forest Service Northern Research Station. Published 2021-06-23.",
  "accuracy": "The City states verbatim: 'No accuracy assessment was conducted, but the dataset will be subjected to manual review and correction.' A classified image product, not a tree census.",
  "area_backdrop_pmtiles": "data/cambridge/canopy2018.pmtiles",
  "loss_layer_pmtiles": "data/cambridge/canopy-change.pmtiles",
  "summary": "data/cambridge/canopy-summary.json",
  "minzoom": 12,
  "maxzoom": 16,
  "source_layers": {
   "canopy2018.pmtiles": "canopy",
   "canopy-change.pmtiles": "canopy_change"
  },
  "baked_fields": {
   "canopy": [],
   "canopy_change": [
    "c"
   ]
  },
  "class_codes": {
   "c": {
    "L": "canopy lost 2014-2018",
    "G": "canopy gained 2014-2018"
   }
  },
  "omitted_class": "'No Change' is deliberately absent from canopy-change.pmtiles — it is already the bulk of canopy2018.pmtiles. canopy2018 = No Change + Gain; Loss is what is NOT in the 2018 layer.",
  "headline": "Citywide 155.9 ac lost vs 70.0 ac gained, 2014-2018 = net -85.9 ac, -6.9% of the 1,251 ac standing in 2014."
 },
 "impervious_runoff": {
  "_note": "Baked by scripts/cambridge/build_impervious_runoff.py. Method, coefficients, assumptions and uncertainty are documented in docs/runoff-method.md — read that before quoting any number from here.",
  "_contract": "Impervious AREA is OBSERVED. Runoff VOLUME is MODELED. The DOLLAR figure is MODELED ON TOP OF A MODEL and must always carry a range. Never print a single '$X per year'.",
  "VINTAGE_LIMITATION": "The impervious layer is a snapshot from 14 APRIL 2010 — the City's own metadata says so verbatim. That is 15 years before Ord 2025-1 (10 Feb 2025), 8 years before the 2018 canopy layers, and 16 years before today. It is the BASELINE the rezoning starts from, never a result of it. Date-stamp every use.",
  "method": "Photogrammetric planimetric compilation at 1\" = 40' from an April 14 2010 flyover, to the National Standard for Spatial Data Accuracy, by Infotech America for Cambridge GIS. NOT the OBIA method used for the canopy layers — hand-digitised planimetrics, older but per-feature more reliable. Coverage is Cambridge plus a 200-ft fringe and the Charles shoreline toward Boston.",
  "attributes": "TYPE is documented only as 'Feature class which was used to create the impervious surfaces layer'; the four values are never enumerated by the City. IM-STRUCTURE = roofs, IM-PAVED-SURF = roads/sidewalks/parking/driveways, IM-OTHER = small misc features (INFERRED from size distribution, not published), IM-SURFACE = 51 undocumented polygons.",
  "layer_pmtiles": "data/cambridge/impervious.pmtiles",
  "summary": "data/cambridge/runoff-summary.json",
  "parcel_shares": "data/cambridge/impervious-parcels.json",
  "doc": "docs/runoff-method.md",
  "minzoom": 12,
  "maxzoom": 16,
  "source_layers": {
   "impervious.pmtiles": "impervious"
  },
  "baked_fields": {
   "impervious": [
    "t"
   ]
  },
  "class_codes": {
   "t": {
    "S": "structure (roof)",
    "P": "paved surface",
    "O": "other impervious (undefined by the City)",
    "U": "surface (undocumented)"
   }
  },
  "cross_checks": {
   "city_envision_non_building_impervious_pct_of_land": 38,
   "city_envision_canopy_pct_of_land": 26.7,
   "city_resilience_total_impervious_pct_of_land": 60,
   "_why": "Two independent City-published figures. The layer reproduces the 38% non-building figure closely, which is what confirms the decode."
  },
  "canopy_is_not_the_complement": "Canopy % and impervious % are NOT complements and must never be added, differenced, or stacked to 100%. A street tree over asphalt is in both layers, correctly — it shades but does not infiltrate. The two layers are also 8 years apart (2010 vs 2018).",
  "ROUTING_GAP": "Cambridge is part combined sewer, part separated storm drain. Only the combined share reaches a pipe the City and MWRA pay to treat; the separated share discharges untreated to the Charles and Alewife Brook. The City publishes NO quantitative split and no citywide sewershed boundary. Every sewer-load and dollar figure is therefore an UPPER BOUND. Closing this needs the DPW sewershed layer.",
  "headline": "Cambridge is 2,727 ac sealed (56.2% of the CDD polygons water-included, ~63% of land) as of the 2010 flyover; the median parcel is already 64.8% sealed against an Ord 2025-1 permeable floor of 15%. 373 ac of the 2018 canopy stands OVER sealed ground — 32% of all canopy — so canopy% and impervious% are not complements.",
  "projects_headline": "104 of the 125 tracked projects have a lot area. They are 60.1% sealed today (observed); building to the Ord 2025-1 limit adds 1.41-3.56 ac of sealed ground and 1.74-4.38 M gal/yr of runoff. Priced at the published FY27 sewer rate that is $40,500-$138,000 per year across the whole set — A RANGE, never a point estimate. 13 of the 104 are already sealed past the 85% floor and have NEGATIVE marginal runoff; they are kept in the totals.",
  "flood_headline": "Only 2 of 104 tracked projects touch the 1%-annual-chance floodplain (and both only 5-15% of the lot); 0 touch a contour low zone. The new construction is NOT in the floodplain. This is a sewer-capacity argument, not a build-in-the-floodplain argument.",
  "validation": "Reproduces the 119 Appleton St report (2026-07-27) exactly: 83,570 / 114,447 / 88,030 gal/yr, zero drift. The observed impervious layer puts that parcel's sealed area within 0.8% of the report's assumed figure, which RETIRES the report's one ASSUMPTION ('driveway/walkways = 12% of lot'; observed is 9.7%)."
 },
 "rainfall": {
  "_note": "Two figures are carried on purpose. I.R.'s is primary because it is already in a signed-off client document; the NOAA normal is the pin she asked for.",
  "ir_primary_mm": 1150,
  "ir_primary_in": 45.28,
  "ir_source": "Cambridge chart at weather-and-climate.com, per I.R.; used in the 119 Appleton St report of 2026-07-27",
  "noaa_normal_in": 43.59,
  "noaa_normal_mm": 1107.2,
  "noaa_station": "GHCND:USW00014739 BOSTON LOGAN INTERNATIONAL AIRPORT, MA US",
  "noaa_product": "NOAA/NCEI U.S. Climate Normals 1991-2020, ANN-PRCP-NORMAL",
  "noaa_url": "https://www.ncei.noaa.gov/access/services/data/v1?dataset=normals-annualseasonal-1991-2020&stations=USW00014739&dataTypes=ANN-PRCP-NORMAL&format=json",
  "noaa_verified": "2026-08-05 — the twelve monthly normals sum to 43.59 in exactly",
  "delta": "I.R.'s figure is 3.9% wetter than the NOAA normal. Every volume and dollar scales linearly with the choice, so both are computed everywhere."
 },
 "sewer": {
  "_note": "Cambridge bills sewer on METERED WATER CONSUMPTION. There is no stormwater utility and no runoff meter. Pricing runoff at this rate is a POLICY COUNTERFACTUAL priced at a real published tariff — exactly the question Rocker posed — and is never a bill anyone receives.",
  "authority": "CMA 2026-66, City Manager Yi-An Huang to the City Council, 23 March 2026, Table 2",
  "authority_url": "http://rwinters.com/council/032326M1.pdf",
  "adopted_report": "https://www.cambridgeday.com/2026/03/27/water-and-sewer-rates-rise/",
  "prior_year_letter": "http://rwinters.com/council/032425M1.pdf",
  "unit_letter_fy24": "https://www.cambridgema.gov/-/media/files/financedepartment/waterandsewerrates/fy24water_sewerincreaseletter.pdf",
  "effective": "2026-04-01 to 2027-03-31 (FY27)",
  "unit": "USD per CcF (100 cubic feet)",
  "ccf_gallons": 748.052,
  "ccf_gallons_verbatim": "City of Cambridge FY24 rate letter: 'One CcF is 748.052 gallons.' The FY27 letter rounds to 'approximately 750 gallons'.",
  "sewer_rate_fy27_by_block": {
   "1": 18.12,
   "2": 19.16,
   "3": 20.59,
   "4": 22.15,
   "5": 23.55
  },
  "sewer_rate_fy26_by_block": {
   "1": 17.12,
   "2": 18.1,
   "3": 19.45,
   "4": 20.93,
   "5": 22.25
  },
  "water_rate_fy27_by_block": {
   "1": 4.15,
   "2": 4.43,
   "3": 4.71,
   "4": 5.0,
   "5": 5.43
  },
  "blocks_ccf": {
   "1": "0-40",
   "2": "41-400",
   "3": "401-2000",
   "4": "2001-10000",
   "5": "over 10000"
  },
  "central_block": 2,
  "central_rate": 19.16,
  "central_rationale": "Table 3 of the same letter puts the FY27 average single-family combined bill at $1,345. Run back through the block schedule that is ~59 CcF/yr — already past the 40 CcF top of Block 1. Block 2 is therefore the MARGINAL rate for an ordinary household. The FY26 column gives 59.2 CcF by the same arithmetic.",
  "increase_fy27": "water +8.0%, sewer +5.9%, combined +6.3%",
  "cso_outfalls": {
   "Alewife Brook": [
    "CAM001",
    "CAM002",
    "CAM401A",
    "CAM401B"
   ],
   "Charles River": [
    "CAM005",
    "CAM007",
    "CAM017"
   ],
   "temporarily_closed": [
    "CAM009",
    "CAM011"
   ],
   "source": "https://www.cambridgema.gov/Services/combinedseweroverflows"
  }
 },
 "ordinance": {
  "2025-1_part_one": "https://www.cambridgema.gov/-/media/Files/CDD/ZoningDevel/Amendments/2025/multifamilyhousing/250210ord20251multifamilyhousingzoningpetitionpartoneordainedfebruary102025finalpubli.pdf",
  "2025-2_part_two": "https://www.cambridgema.gov/-/media/Files/CDD/ZoningDevel/Amendments/2024/multifamilyhousing/250210ord20252multifamilyhousingzoningpetitionparttwoordainedfebruary102025finalpubli.pdf",
  "cdd_news": "https://www.cambridgema.gov/CDD/News/2025/2/zoningformultifamilyhousingcitywide",
  "polemic": "https://www.cambridgeday.com/2025/11/03/the-unintended-consequences-of-multi-family-zoning/",
  "tax_rate": "https://www.cambridgema.gov/departments/finance/propertytaxinformation",
  "multifamily_comp": "https://traded.co/deals/massachusetts/multifamily/sale/929-massachusetts-avenue/"
 },
 "math": {
  "tax_rate_residential_per_1000": 6.67,
  "multifamily_comp_per_sf_assessed": 725,
  "buildable_factor": 0.85,
  "height_conv_topgl_to_m": 0.3048,
  "shadow_threshold_pct": 0.25
 },
 "csv_columns": {
  "_note": "Verified from CSV header 2026-06-03. Use these exact names (camelCase, no underscores).",
  "join_key": "GISID",
  "address": "Address",
  "assessed_value_total": "AssessedValue",
  "land_value": "LandValue",
  "building_value": "BuildingValue",
  "map_lot": "MapLot",
  "year_built": "Condition_YearBuilt",
  "stories": "Exterior_NumStories",
  "zoning": "Zoning",
  "owner": "Owner_Name"
 },
 "canopy3d": {
  "_note": "Baked by scripts/cambridge/build_canopy3d.py from the SAME healed 2018 polygons as canopy2018.pmtiles (it imports build_canopy.load), joined to the street-tree inventory in trees3d.json. 3D crowns for the map.",
  "why": "Rocker 2026-08-03, four times in one meeting: 'I would double the size of the city trees' / 'make them more horizontal ... proportionally wider' / 'my big trees here cover half of the street' / 'they don't look even close to how our neighborhood looks like'.",
  "TWO_PROVENANCE_STATES": "Crown SHAPE is OBSERVED (2018 canopy survey). Crown HEIGHT is MODELLED (h_ft = clamp(12 + 2.2*dbh^0.75, 12, 70), build_trees3d.py) from the CURRENT inventory. Seven years apart, with Ord 2025-1 inside the gap. The UI must label them separately and must never collapse them into one quality chip.",
  "finding": "On the 5,921 canopy polygons holding exactly one inventory trunk the measured crown is 6.0 m across; cambridge.js's max(8 ft, DBH*0.9) rule draws 2.4 m. 2.48x too narrow, and the 8 ft floor binds on 89% of the inventory.",
  "join": "23,103 of 31,162 living inventory trees (74.1%) matched a 2018 canopy polygon — 21,115 strictly inside, 1,988 snapped from within 1 m. 8,059 (25.9%) have no measured 2018 crown and are NOT drawn. 9,191 of 29,854 canopy polygons (30.8%) hold a trunk; the 2,760 holding more than one are split by nearest trunk.",
  "unattributed": "747 of 1,164 acres of measured canopy is not accounted for by any single inventoried street tree — private yard and park trees, plus what the allocation cap handed back. Drawn as one flat sheet at a CONSTANT 23 ft because no per-polygon height can be justified (height vs log(area) gives R2 = 0.25).",
  "tiles_pmtiles": "data/cambridge/canopy3d.pmtiles",
  "summary": "data/cambridge/canopy3d-summary.json",
  "minzoom": 15,
  "maxzoom": 16,
  "source_layer": "crowns",
  "class_codes": {
   "k": {
    "c": "crown tier (t=0 skirt, 1 shoulder, 2 cap)",
    "s": "stem",
    "u": "canopy with no inventory trunk"
   }
  },
  "baked_fields": [
   "k",
   "t",
   "b",
   "h",
   "ft",
   "d",
   "a",
   "n",
   "g"
  ],
  "allocation_cap": "A trunk is allocated canopy only within 1.25x its own modelled height (15 m ceiling) — a 15 m crown on the median 20 ft street tree, loose on purpose. The bound caught 1,921 of 22,289 pieces (9%) and cut the widest crown drawn from 51 m to 30 m. It caps the ALLOCATION, not the observation: the measured polygon outline still bounds every piece, and what is limited is a Voronoi boundary. Released canopy is not deleted — it is drawn as the no-height sheet.",
  "crowns_drawn": "22,289 crown pieces over 399 acres; drawn width median 7.9 m, p90 14.0 m, max 29.9 m."
 }
}