Skip to content

Changelog

What’s changed.

One timeline of everything that’s shifted—data releases and site changes together, each tagged by what it touched. Use it to cite “as of” or to track when a number you previously quoted may have moved.

Current data snapshot:

How the headline figure moved, release to release

Each capital's highly-restricted share—the land within 20 km of the CBD tripped by at least one control, the figure the Atlas leads with —plotted across all 42 data releases (Changes are broken down by component here.)

Real-world reform
Methodology refinement
Coverage change
Public release (v1.3.0)

Sydney

80.9%

83% → 81%

Melbourne

43.0%

45% → 43%

Brisbane

86.6%

90% → 87%

Perth

86.5%

88% → 86%

Adelaide

91.8%

92% → 92%

Hobart

97.0%

97% → 97%

Canberra

74.4%

91% → 74%

Darwin

88.4%

88% → 88%

Every share is the 20 km ex-rural cumulative—the same basis the rest of the site headlines, so Sydney's ~81% here is the ~81% on its city page. Shared 41–99% scale across cities. Dots mark releases with an explained move. Darwin joins at v0.7.0, when its ring data first reached 20 km; detached-only isn't measured before v0.11.0.

Every explained move

Release City Δ pp (20km) Explanation Date
1.9.0Melbourne−1.4Real-world reformActivity Centres Program Stage 2 / Amendment GC285, gazetted 2026-07-22 — Prahran/South Yarra + 8 other centres' catchments rezoned to HCTZ1/HCTZ2. Residential area ~unchanged; restricted share drops 49.73%→49.26% GCCSA as HCTZ1/HCTZ2's height allowance is materially looser than what preceded it. Real-world policy2026-07-22
1.8.0Canberra−0.1Coverage changeACT Territory Plan zones/roads/blocks refetched — small live-vs-local deltas, but no specific amendment was identified/dated; our local copy catching up to an already-current live service, not a new change in the law; heritage_scoped.geojson left untouched, no reproducible derivation2026-07-20
1.8.0Hobart−0.3Coverage changeTAS zone/overlay/heritage layers refetched; legacy Interim scheme winding down as councils' Local Provisions Schedules take effect. Code Overlay fetch briefly picked up new non-heritage sub-types (Significant trees, archaeological potential, precincts) alongside Local heritage place, tripling the heritage-control share — Ethan called it back to Local-heritage-place-only (a methodology/scoping fix). Also: Hobart Commercial Zone under the HOB-S6.0 Specific Area Plan now counts as residential (Mixed Use, 4 storeys) — a real, pre-existing planning provision we'd been missing, not something that just changed.2026-07-20
1.8.0Adelaide−0.1Real-world reformSA Planning & Design Code amendment refresh + rebuilt the derived LU-x-Zones layer, which had no prior committed script.2026-07-20
1.8.0Perth−0.6Coverage changeR-Codes/CPS2/heritage layers refetched from live services — small live-vs-local deltas, but no specific amendment was identified/dated; our local copy catching up to an already-current live service, not a new change in the law2026-07-20
1.8.0Brisbane+0.0Methodology refinementBCC/Moreton Bay zoning+heritage refetched. Fixed a ZONE_PREC_ field-collision bug that turned out to be a no-op (old export already resolved it the same way); the real bug was NULL-vs-zero handling on no-precinct zones, which briefly (mis)moved le-2-storey to 60.6% before Ethan traced it and the fetch script was fixed to zero-fill — final le-2-storey is back at 82.64%, unchanged from pre-#590.2026-07-20
1.8.0Melbourne−0.3Real-world reformVIC zones/heritage overlay/register refetched; new PRZ zone classified Mixed Use / unknown-height rather than excluded.2026-07-20
1.8.0Sydney−0.1Coverage changeNSW Zones/HOB/FSR/Heritage refetched from live services — small live-vs-local deltas, but no specific amendment was identified/dated; this reads as our local copy catching up to an already-current live service, not a new change in the law2026-07-20
1.6.0Brisbane+0.1Methodology refinementPDA re-add clip extended to community-facilities/special-purpose base2026-07-13
1.5.0Brisbane+0.4Methodology refinementPDA re-add clipped to exclude open-space/recreation base — golf course/parks no longer counted as unrestricted residential2026-07-13
1.4.0Sydney−0.4Methodology refinementR2-in-TOD carved out of low_density — TOD R2 gets the SEPP apartment/22m uplift, no longer low-density; union −0.15pp, ≤2-storey unchanged2026-07-12
1.3.1Sydney−0.0Methodology refinementHOB overlap precedence fix — overlapping HOB polygons are same-control precinct stacking, most-permissive wins; GCCSA HR ticks 86.9% → 86.8% on the rounding boundary, all moves sub-0.01pp citywide2026-07-12
1.3.0Sydney±0.0Methodology refinementSEPP dual-occ scoping fix — s.166 dual-occ is chapter-wide, not walking-catchment-gated; detached-only 7.2% → 4.5%, union unchanged2026-07-09
1.2.0Perth−0.0Methodology refinementCadastre source switched Landgate Historical → PlanWA property-interest2026-07-07
1.1.0Adelaide+0.0Methodology refinementSA DCDB cadastre refreshed, +2,021 parcels2026-07-07
1.1.0Perth+0.2Coverage changeWA Heritage List (DPLH-090) added — 5,672 None→Local2026-07-07
1.0.0-rc.3Brisbane−1.6Coverage changePriority Development Areas (PDA) re-included2026-06-27
1.0.0-rc.3Melbourne−0.0Coverage changeCity-of-Melbourne SUZ6/7/8 added as Mixed use2026-06-27
1.0.0-rc.3Sydney+0.7Methodology refinementC4 (Environmental Living) reclassified non-rural → enters the ex-rural denominator2026-06-27
0.20.0Perth−0.7Methodology refinementRural-residential flagged rural, excluded from the ex-rural denominator2026-06-23
0.13.0Canberra−16.8Real-world reformACT Missing Middle reforms — RZ2–RZ5 take multi-unit heights. Real-world policy (now gazetted/in effect; applied at v0.13.0 from the then-draft MPA, pre-gazettal). The first real-world change in the series (see also all of v1.8.0 and later Melbourne GC285 entries).2026-06-22
0.13.0Brisbane−0.9Methodology refinementLMR2 uplift propagated across strata schemes2026-06-22
0.13.0Melbourne±0.0Methodology refinementClip to Greater Melbourne GCCSA, not a 60 km disc2026-06-22
0.12.0Brisbane−1.2Methodology refinementLMR2 conditional 3-storey uplift near transit2026-06-20
0.7.0DarwinCoverage changeCity of Palmerston council added, +11.8k lots2026-06-17
0.5.0Sydney−0.5Methodology refinementRing origin → Central Station + 3-tier typology2026-06-17
0.4.0Adelaide−0.2Methodology refinementAdelaide FC/UC zones admitted2026-06-16
0.4.0Perth−0.0Methodology refinementPer-city admissions: commercial + R-Code2026-06-16
0.4.0Sydney−2.0Methodology refinementSydney SEPP (Housing) height uplift, max(LEP,SEPP)2026-06-16
0.3.0Sydney−0.2Methodology refinementSP5 Metropolitan Centre counted as residential2026-06-13

Appendix

Full dataset version history (Current: v1.9.3)

The complete, versioned history of the YIMBY 101 zoning dataset—the numbers behind every map, ranking, and headline—straight from the pipeline’s own changelog (semantic versioning; the footer’s data version links here). The Data entries in the timeline above summarise the reader-facing releases; this is the full technical record of every version, written for a pipeline audience.

Show the full technical changelog

+

All notable changes to the YIMBY 101 zoning dataset are documented here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning. Versions tag the data (the contents of), not the code:

  • MAJOR — a breaking change to the output schema, ring indexing, or denominator conventions.
  • MINOR — methodology or coverage changes that move published numbers.
  • PATCH — corrections that don’t materially move the headline metrics.

The current published version is in VERSION and is emitted to (via the combiner) for the site to display.

Per-version metric tables. Each release’s per-city impact — total ex-rural residential land + the five restriction-control shares + the Δ vs the prior version and why — is tabulated in [] (full backfill to v0.2.0; regenerate with). New releases also embed their table inline below.

Unreleased

[1.9.3] - 2026-07-23

Frontend-filed correction, classification-only — no residential area, restriction-share, or dwelling-capacity numbers changed in any city. PATCH.

Fixed

  • ‘s zone_name mixed clean display names with review/audit commentary, in three inconsistent formats — em-dash asides (Large Lot Residential — like-for-like with rural-residential), (grouped...)/jurisdiction-qualifier parentheticals bleeding into the “name” (High Density Residential (grouped medium-to-high)), and pipe-delimited reviewer notes with a literal issue ref (... | Ethan: RZ5 → 'High density'...) — unsafe to render to readers as-is and blocking the frontend from retiring its hand-typed ZONE_LABEL_BY_CITY table (49 rows across 5 cities had a literal #NNN embedded). Added a classification_notes column; zone_name is now a clean, code-agnostic display name only (or blank where no clean name exists yet — the frontend already treats a blank name as a visible gap rather than guessing). Parentheticals that are part of a zone’s real name are kept (Sydney Mixed Use (legacy), Adelaide Urban Corridor (Boulevard), Melbourne B1Z/B2Z/B5Z (legacy)); classification commentary moved to classification_notes.
  • 14 Melbourne group-LABEL rows were unreachable — the map has shipped real VicMap ZONE_CODE values since, so label rows like Neighbourhood residential/Urban renewal never match anything the map emits. Deleted outright rather than reclassified; their outcomes are already reflected in MELBOURNE_CODE_FAMILY’s density levels for the real code families, so no classification information was lost. Two Perth rows (R-AC0, Special Control Area) were given real display names instead of being left commentary-only.: 328 → 314 rows (14 deletions, 0 additions; zero density_level/row_kind drift on any surviving row). No city moved on any metric this release (classification/legend only).

[1.9.2] - 2026-07-22

Frontend-filed correction, classification-only — no residential area, restriction-share, or dwelling-capacity numbers changed in any city. PATCH.

Fixed

  • ** had no code-level rows for Melbourne** (, direct follow-on from v1.9.1/). MIGRATED_ROWS["melbourne"] only ever held the 14 group-LABEL rows migrated from the frontend’s legacy (e.g. “Neighbourhood residential”) — a faithful migration at the time, but v1.9.1 switched Melbourne’s map to ship the actual VicMap ZONE_CODE (e.g. “GRZ1”, “HCTZ2”) as its zone value, so those label rows stopped matching anything the map emits. 103 of the map’s 105 zone codes resolved to unknown (light-grey) on the frontend’s levelFor lookup — the fix corrected which zones render, but the map still wasn’t visually useful. Added a base-prefix classification table (MELBOURNE_CODE_FAMILY, schedule number stripped — GRZ1..GRZ15 all resolve via “GRZ” — so a future amendment adding e.g. GRZ16 doesn’t go unclassified, the same staleness class already hit twice this cycle) + the 105 confirmed codes, all derived from melbourne_zone_category_map in (Ethan/Jono-reviewed) plus this table’s own already-approved group-label density_levels — no new classification judgment calls.: 224 → 329 rows (all additive; verified against the frontend’s own — zero unresolved codes). No city moved on any metric this release (classification/legend only).

[1.9.1] - 2026-07-22

Frontend-filed correction, map-only — no residential area, restriction-share, or dwelling-capacity numbers changed in any city. PATCH. (The other frontend-filed issue this cycle,, is a text-only correction to v1.9.0’s own classification annotation — see “Corrected” under v1.9.0 below; it doesn’t touch v1.9.1’s own content.)

Fixed

  • Melbourne’s detailed zoning map was stale since 2026-06-23. still pointed Melbourne at, a legacy shapefile from before the from-raw rewrite of — hasn’t referenced it in a month, so HCTZ, PRZ, and now GC285’s Prahran/South Yarra rezoning never reached the map at all (they were correctly counted in the CSV stats the whole time; only the map layer was orphaned). Repointed to (the current adapter output), the same pattern already used for Brisbane. went from 12 features (12 zones) to 176 features (105 zones) — every real zone code now renders. zone_group still uses ‘s narrower 6-bucket zone_category (not ‘s full 14-label Melbourne vocabulary) — HCTZ renders as its own zone code but stays legend-grouped under “Residential growth” rather than a distinct “Housing choice and transport” bucket. Full 14-label alignment is a separate follow-up (also reshapes the zoning-by-category statistics output, not just the map) — flagged, not done here.

No city moved on any metric this release (map/annotation-only). Full table in [].

[1.9.0] - 2026-07-22

Melbourne (VIC) — real-world policy change. The Victorian Government gazetted Amendment GC285 today (2026-07-22): Stage 2 of the “Train and Tram Zone Activity Centres Program”, rezoning 9 activity centre clusters across 6 LGAs (Boroondara, Glen Eira, Greater Dandenong, Kingston, Stonnington, Whitehorse) — including Chapel Street/Prahran (the program’s “South Yarra” cluster). Each centre’s catchment is rezoned to HCTZ1/HCTZ2 (Housing Choice and Transport Zone — already a whitelisted residential zone group in with its own storey logic,, so no code change was needed for this part); each centre’s core gets a new Built Form Overlay (BFO) schedule for height, which is NOT yet wired into the model (see below). MINOR — real-world policy, not methodology (same as Adelaide’s v1.8.0 SA Code Amendments and the ACT Missing Middle reforms,).

Changed

  • Melbourne residential area essentially unchanged (1502.71 → 1502.70 km² ex-rural GCCSA) but restricted share drops 49.73% → 49.26% (-0.47pp) — HCTZ1/HCTZ2’s height allowance is materially looser than whatever zone preceded it in these catchments, so land that was previously restricted (typically ≤2-storey or low-density) is now correctly counted as unrestricted.
  • Updated the pinned Sydney↔Melbourne counterfactual-swap test values — Sydney unlocks ~127 km² / ~634k dwellings by adopting Melbourne’s (now looser) zoning, up from ~122 km² / ~609k.

Fixed

  • ** now fetches Melbourne zones from VicPlan’s production backend** (plan-gis.mapshare.vic.gov.au), not DTP’s spatial.planning.vic.gov.au — same schema, but VicPlan synced today’s Ministerial “GC” amendment same-day, while the DTP host was still mid-sync when checked (39 → 52 of 148 expected rows over ~15 minutes of polling). DTP is kept as a documented fallback.
  • Caught and fixed a real bug before it shipped: the VicPlan backend caps at maxRecordCount: 1000 (vs. the DTP host’s 2000), and the fetch script’s pagination assumed every host honoured its requested page size — the same bug class already caught once this cycle in ACT’s fetch scripts. Fixed to read each layer’s actual maxRecordCount and stop on total-count reached, not a short page.
  • Added a Built Form Overlay (BFO) fetch (planning_scheme_overlays/MapServer/35, raw geometry only —). BFO carries a schedule number only (e.g. “BFO5”); the actual height cap per schedule lives in the planning scheme’s ordinance text, not the GIS attributes — the same shape of problem as the hand-curated. does not yet read it; BFO-covered “core” parcels keep whatever storey value their underlying zone gives them in the meantime. Filed for someone to read the schedule text and build a lookup.

Corrected (retroactive, no numbers changed)

  • v1.8.0’s per-city classification, corrected twice. All 7 cities v1.8.0 touched were originally tagged methodology. First correction (Jono, 2026-07-22): Adelaide and Melbourne are real-world policy — both have a specific, dated, confirmed amendment behind them (Adelaide’s SA Code Amendments; Melbourne’s PRZ gazettal,) — so methodology undersold them; this correction over-applied that logic and tagged all 7 policy. Second correction, same day, per **** (caught by the frontend’s own review of the site’s “every explained move” table): policy should be reserved for a specific, dated, confirmed amendment, not just a stale local copy catching up to an already-current live service. Sydney, Perth, Hobart, and Canberra showed small live-vs-local deltas but no amendment was ever identified/dated for any of them — that’s coverage (real data we’d been missing, not a fresh change in the law). Brisbane’s net move rounds to ~0.0003pp — entirely its own NULL-vs-zero bug converging back, not independent policy movement — so it’s methodology, not policy. Final: Adelaide and Melbourne policy; Sydney, Perth, Hobart, Canberra coverage; Brisbane methodology. Reclassified in; no CSV/JSON numbers changed, annotation only.

Per-city metric movement (vs 1.8.0)

Only Melbourne moved this release. Full history in [].

City Resid km² Highly restr. (SUA) Highly restr. (20km) ≤2-storey Low-dens Herit Detached Δ HR 20km (pp) What happened
Melbourne 1,503 48.9% 43.0% 47.0% 30.7% 4.1% 10.7% -1.42 Activity Centres Program Stage 2 / Amendment GC285 (Prahran/South Yarra + 8 other centres) rezones catchments to HCTZ1/HCTZ2

[1.8.0] - 2026-07-20

Planning-scheme data-currency refresh across all 8 cities — triggered by a South Australian Planning & Design Code amendment going live, then extended to check every city’s zoning/height/heritage/overlay sources against their live government portals (parcel/cadastre base layers were explicitly left alone — this is a currency refresh, not a re-survey of land parcels). MINOR — every city’s headline restricted union moved by ≤0.6pp; no city’s overall methodology changed.

Changed — per city

  • Adelaide (SA) — refetched PDCodeZones/PDCodeSubZones/PDCodeVariations (Technical & Numeric Variations), SAHeritagePlaces (poly + points), and the Historic Area overlay. 40 zone polygons had moved since our last fetch (Oct 2025–May 2026, spread across 9 separate amendment dates — ordinary ongoing Code Amendments, not one event). Rebuilt the derived LU x Zones (zones ∩ land use) layer via a new — this layer was previously hand-derived outside the repo with no committed script, so it couldn’t be refreshed until now. Residential lots 666,220 → 667,321 (+0.17%), area 447.2 → 447.8 km² (+0.13%), restricted share 88.19% → 87.82% GCCSA (-0.37pp). Bug fixed: picked “whichever .shp came first” out of the source zip, which is non-deterministic across zip builds — it silently grabbed the GDA94 file instead of GDA2020 on this run (numerically near-identical, ~1-2 m datum shift, but inconsistent with the directory naming and the rest of the SA pipeline). Now explicitly prefers the GDA2020 filename.
  • Sydney (NSW) — refetched NSW Zones, HOB, FSR, and both heritage layers (local + State Heritage Register); all showed small live-vs-local deltas (<0.3%). Residential parcels 1,244,051 → 1,244,208 (+0.013%), restricted share 86.70% → 86.59% GCCSA (-0.11pp). No fetch script previously existed for the Zoning or Heritage/SHR layers (one-off manual QGIS exports with no reproducible fetch step) — wrote and. Bug found and worked around: the NSW Land Zoning MapServer 500s on full-geometry statewide queries under load (a handful of huge, complex rural-zone polygons are too heavy to serialize — same class of issue already documented for the SEPP hazard masks); fixed with server-side geometry generalization.
  • Melbourne (VIC) — refetched VIC zones, local Heritage Overlay, and the Victorian Heritage Register (small live-vs-local deltas, all <0.3%). The refresh introduced a brand-new zone type, PRZ (“Precinct Zone”, schedules PRZ1–7, ~15 km² across Whitehorse/Monash/Kingston/Bayside), not in either of ‘s zone lookups. Correction (2026-07-22, Jono): this is real-world policy, not methodology — PRZ’s appearance is a genuine new gazettal (a real precinct rezoning that took effect), not a pre-existing gap our data had been missing. Fixed per Ethan: PRZ now counts as residential (melbourne_residential_zone_groups), classified Mixed Use with unknown height (no melbourne_storey_rules entry, so it flows through the existing unknown-height handling rather than the ≤2-storey bucket — same treatment as the SUZ6/7/8 carve-in). Brings Notting Hill, VIC (Monash) back into the per-SAL tables. Residential area 1499.9 → 1502.7 km² ex-rural GCCSA (+0.19%), restricted share 49.84% → 49.73% (-0.11pp).
  • Brisbane (Greater Brisbane, 5 councils) — BCC Zoning refreshed (small live-vs-local delta); Moreton Bay heritage layers refreshed; Logan and Redland’s checked datasets were already current; Ipswich has no live source (unchanged, confirmed still contact-only). Bug found, and a second bug found underneath it (Ethan, PR review): BCC’s live Zoning service carries both ZONE_PREC_NO (numeric — what actually joins the storey-lookup CSV on) and ZONE_PREC_DESC (long text), which DBF’s 10-char field-name truncation collides to the same name — now explicitly renames both before writing so the join target is unambiguous. This pin was correct but turned out to be a no-op: the committed .shp.xml metadata sidecar shows the old hand-exported shapefile already had ZONE_PREC_NO before ZONE_PREC_DESC, so the collision resolved the same way both times. The actual regression, which briefly shifted the per-control le-2-storey share from 82.64% to 60.63%: the live service returns a true NULL on every no-precinct zone (14,346 of 26,356 rows, including all of Low density residential), while the old ArcGIS export wrote those NULLs as the integer 0 — and ‘s “no precinct” rows are keyed on literal 0 (e.g. LDR,0,2). A null zone_prec doesn’t match "0", so every no-precinct zone’s storey join silently missed, and NA storeys can never land in le-2-storey. Fixed by zero-filling ZONE_PREC_ before writing. Final le-2-storey is back at 82.64%, unchanged from. Residential area / restricted union essentially unchanged throughout (785.5 → 785.5 km², 84.68% → 84.68% GCCSA).
  • Perth (WA) — refetched R-Codes, CPS2 heights, and all 3 heritage layers (Heritage Areas 282→467 features, State Register +4, Heritage List +12). 4 of 5 datasets had no prior fetch script (one-off manual pulls) — wrote,,,. Residential area 653.4 km² (unchanged), restricted share 88.94% → 88.53% GCCSA (-0.41pp). Flag, resolved as non-material: two collapsed R-Codes (R70, R0.5) have no row in the hand-curated height lookup, but both are in Exmouth/Dandaragan, 150–1250 km outside Greater Perth’s study radius — confirmed zero impact on any current Perth output.
  • Hobart (TAS) — refetched all 4 TPS zone/overlay layers + State Heritage. TAS’s Interim Planning Scheme layer dropped 1,130→743 rows (-34%) and its interim Code Overlay dropped 84→9 (-89%) — areas transitioning from the legacy Interim scheme to the final Tasmanian Planning Scheme, not a bug. The (non-interim) Code Overlay heritage layer initially came back 3,819→4,676 rows: the new rows were new overlay sub-types the live service also serves (Significant trees, archaeological potential, heritage precincts, historic landscape precincts) alongside the pre-existing “Local heritage place” rows, which briefly tripled Hobart’s local-heritage control share (3.22%→10.24% GCCSA cumulative). Fixed per Ethan: narrowed ‘s fetch filter to OV_NAME='Local heritage place' only (back to the original 3,819 rows) — those other sub-types shouldn’t count as a heritage control. New (, Ethan): the City of Hobart LPS carries HOB-S6.0 “Hobart Commercial Zone Specific Area Plan”, which overrides the standard Commercial Zone provisions to permit residential use up to 15 m within its extent — Commercial Zone otherwise has no row in the zone lookup, so was excluded from the denominator entirely (the same class of gap as’s Particular Purpose Zones). Fetched the SAP boundary from TAS’s live overlay service and added a Mixed Use, 4-storey overlay (floor((15-1)/3.1) = 4, the same metres-to-storeys formula used everywhere else in the pipeline — a deliberate call, not an interpolation) for Commercial Zone land within the SAP, +0.23 km². Net effect of both changes: restricted union 97.44% → 97.15% GCCSA (-0.29pp), residential area 96.37 → 96.83 km² (+0.46 km²). Also bug fixed: GDAL’s GPKG driver appends rather than replaces by default — the first refetch of would have silently left the OLD layer as the one st_read picks up by default (a complete no-op despite the fetch script reporting success). New now unlinks the destination before writing. Also worked around TAS’s ArcGIS service intermittently 500ing on high-OBJECTID (most-recently-edited) records via ID-range windowing with bisection.
  • Canberra (ACT) — refetched Territory Plan zones, ACT road reserves, and ACT Blocks (parcel/block geometries). Residential area 111.0 → 111.1 km² (+0.09%), restricted union 75.13% → 75.08% (-0.05pp). Bug fixed: two new fetch scripts initially assumed ArcGIS’s usual 2,000-row page cap, but both ACT services actually cap at 1,000 — caught before shipping (first attempt wrote only 1,000 of 152,671 blocks); fixed to stop on a live total-count match rather than a partial page. Flag — filed as, not resolved: (the ACT heritage layer reads directly) has no committed derivation script and isn’t a simple filter of the live ACTGOV Heritage Register — left untouched rather than fabricate a substantially different heritage layer. Canberra’s heritage numbers are unchanged this release because of this.
  • Darwin (NT) — no change. Filed as: the NT Cadastre ArcGIS service that TOWNP_ZONE (Darwin’s zoning) lives on now requires an auth token and is delisted from public search — blocks any future Darwin refresh until access is restored or an alternate source is found. Adapter rerun clean against the existing committed cadastre to confirm no drift.

Per-city metric movement (vs 1.7.0)

Full history in [].

City Resid km² Highly restr. (SUA) Highly restr. (20km) ≤2-storey Low-dens Herit Detached Δ HR 20km (pp) What happened
Sydney 1,007 85.0% 80.9% 76.8% 76.9% 5.8% 4.5% -0.11 NSW Zones/HOB/FSR/Heritage refetched from live services
Melbourne 1,503 49.4% 44.4% 47.7% 31.3% 4.1% 10.7% -0.35 VIC zones/heritage refetched; new PRZtests/::test_swap_canonical_sydney_melbournemake combine). MINOR — the headline restricted union is unchanged; FSR is
published as its own metric alongside it, and the typology apartment-permitted
label shifts.

Added

  • FSR (Floor Space Ratio) + an FSR-inclusive union, as NSW-only secondary metrics. A restrictive FSR is an independent binding density control (a site can have a generous height limit yet an FSR that caps yield). We now join the LEP FSR map per parcel (→, most-permissive on overlap; mapped over ~42% of Sydney residential land, NA = no FSR control), flag fsr_restricted = FSR ≤ 1.5, and publish:
  • — Sydney 38.8% GCCSA / 74.3% @20 km.
  • — the 4-way union OR FSR: Sydney 91.8% GCCSA / 91.6% @20 km (catches R3/R4/E1/MU1 land zoned for density but FSR-capped).

These are deliberately NOT folded into the headline restricted (which stays the 4-way le_2 ∪ low_density ∪ heritage ∪ detached, unchanged) — they’re separate metrics (may surface on the Sydney page; not a national headline). Other cities default cleanly (fsr_restricted FALSE, restricted_incl_fsr = restricted). gpkg gains fsr, fsr_restricted, restricted_incl_fsr. Documented in.

Fixed

  • R2-in-LMRH land is now flagged apartment-permitted (follow-up). The LMR reform permits small residential flat buildings on R2 in the band (at the 9.5 m low-rise ceiling), so sepp_apartment_permitted now includes R2-in-LMRH. Label only — no height or restriction change (the low_density carve was decoupled to key on in_tod, so extending the apartment flag does not move low-density/restricted). Shifts the typology apartment-permitted breakdown.
  • E1 (Local Centre) shop-top housing in a TOD → 24 m (not the 22 m RFB ceiling), per the TOD SEPP. 891 E1-in-TOD parcels; no ≤2-storey/restriction change.

Per-city metric movement (vs 1.6.0)

Headline restriction metrics are unchanged this release (FSR is additive/secondary and the fixes are label/height-only). See for the carried-forward table.

[1.6.0] - 2026-07-13

Brisbane PDA open-space correction, extended (follow-up to). MINOR — Brisbane’s highly-restricted headline moves +0.04 pp; no other city moves.

Fixed

  • Extended the PDA re-add clip to Community facilities and Special purpose base zones (follow-up). v1.5.0 excluded open-space/recreation/ environmental base from the PDA re-add; this extends the same principle to the remaining non-residential bases — schools/civic (Community facilities) and institutional/infrastructure (Special purpose) land inside PDAs — so they too fall back to their non-residential base and are excluded.. PDA re-add area 5.35 → 4.67 km².
  • Greater Brisbane residential land 786.1 → 785.5 km² (−0.6 km²); highly-restricted (ex-rural) 84.6% → 84.7%; SUA 84.4% → 84.5%. Only Brisbane moves. Methodology documented in.

Per-city metric movement (vs 1.5.0)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.7% 85.1% 76.9% 77.0% 5.8% 4.5%
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 785 84.7% 84.5% 82.6% 56.6% 1.0% 34.9% +0.04 PDA re-add clip extended to community-facilities / special-purpose base (follow-up) — methodology
Perth 653 88.9% 88.8% 88.5% 50.3% 1.7% 0.0%
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.5.0] - 2026-07-13

Brisbane PDA open-space correction on a fully regenerated Brisbane baseline (Brisbane adapter rerun + full). MINOR — Brisbane’s highly-restricted headline moves +0.16 pp; no other city moves.

Fixed

  • The PDA re-add counted non-residential open space as unrestricted residential land. State-declared Priority Development Areas were re-included wholesale, regardless of the underlying base zone — so the Royal Queensland Golf Club (74.5 ha, base zone “Open space (Metropolitan)”) and other parks/sportsgrounds inside PDAs showed as green “not highly restricted residential” on the map. now clips the PDA re-add against base zones {Recreation and open space, Sport and recreation, Environmental management and conservation}, so that land falls back to its non-residential base and is excluded; genuine renewal land (Emerging community, Industry, Centre base — incl. the Northshore Hamilton apartment precincts) is kept. PDA re-add area ~7.3 → 5.35 km² (−27%).
  • Greater Brisbane residential land 787.7 → 786.1 km² (−1.6 km²); highly-restricted (ex-rural) 84.5% → 84.6% (removing not-restricted open space raises the restricted fraction); SUA 84.3% → 84.4%. Only Brisbane moves.

Known gaps

  • North Lakes (Moreton Bay) is ~95% absent — deliberately, pending manual coding. Its densities live only in Local Plan Part 10.1, which isn’t in the repo, so the underlying zoning genuinely isn’t known and can’t be classified without manual coding. Previously a silent incidental drop; now documented as a deliberate gap in (a placeholder-density auto-admit was considered and rejected — we don’t fabricate zoning we don’t have).

Per-city metric movement (vs 1.4.0)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.7% 85.1% 76.9% 77.0% 5.8% 4.5%
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 786 84.6% 84.4% 82.6% 56.6% 1.0% 34.8% +0.16 PDA re-add clipped to exclude open-space/recreation base — golf course/parks no longer counted as unrestricted residential — methodology
Perth 653 88.9% 88.8% 88.5% 50.3% 1.7% 0.0%
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.4.0] - 2026-07-12

Two NSW corrections on a fully regenerated Sydney baseline (Sydney adapter rerun

  • full). MINOR — Sydney’s restriction-union headline moves −0.15 pp; no other city moves.

Changed

  • R2 parcels inside a TOD Sites Map precinct no longer count as low_density. A TOD R2 parcel carries the SEPP Ch 5 apartment + 22 m height uplift (sepp_apartment_permitted), so its effective permitted built form is no longer low-density; leaving it flagged double-counted it in the restriction union even though its height is already correctly uplifted out of the ≤2-storey lens. now computes low_density & !sepp_apartment_permitted, mirroring the permits_only_detached AND-NOT against the same uplift. Verified against the built parcel set: exactly 3,850 parcels are carved, all R2-in-TOD (among the low-density zones, apartment permission is TOD-only — LMRH grants apartments to R3/R4, which aren’t low-density; an R2 in an LMRH band stays at 9.5 m); zero non-R2/rural parcels are touched, so rural ⊂ low_density ⊂ restricted still holds. YIMBY_SYDNEY_LEP_ONLY=1 baseline unchanged.
  • Greater Sydney low-density (ex-rural) −0.17 pp full GCCSA / −0.50 pp @ 20 km; restriction-union −0.15 pp full / ~−0.43 pp @ 20 km (union-known-height similar); SUA highly-restricted 85.24% → 85.07%. ≤2-storey is unchanged (those parcels were already height-uplifted out of it). Concentrated at ~20 km (Bankstown / Kellyville / Macquarie Park TOD precincts); no change < 5 km. Only Sydney moves.

Fixed

  • Stale E2 zone label in. E2 is Commercial Centre under the NSW Standard Instrument since the 2022 Employment Zones reform (the E-series was repurposed; conservation zones are now C1–C4), but the script still carried the pre-reform “Environmental Conservation — no dwellings” / non-residential label (a verbatim migration from the frontend’s). Corrected to "Commercial Centre" / centre, matching sydney_zone_category_map’s E2="Centre" in and the planning-schemes-package extraction. Only was stale — already carried E2 = Commercial Centre for every NSW council. The "Environmental Conservation" group-fallback row is retained (WA Serpentine-Jarrahdale’s EC zone legitimately maps to it). No restriction metric moves — the R adapter already classified E2 as a centre zone.
  • Doc-lag from the merged: still described HOB overlap as “lowest height wins / matches Adelaide’s” — corrected to the shipped max-wins behaviour.

Per-city metric movement (vs 1.3.1)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.7% 85.1% 76.9% 77.0% 5.8% 4.5% -0.15 R2-in-TOD carved out of low_density — TOD R2 gets the SEPP apartment/22 m uplift, no longer low-density; union −0.15 pp, ≤2-storey unchanged — methodology
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 788 84.5% 84.3% 82.4% 56.4% 1.0% 34.8%
Perth 653 88.9% 88.8% 88.5% 50.3% 1.7% 0.0%
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.3.1] - 2026-07-12

NSW Height-of-Building (HOB) overlap-precedence fix, on a fully regenerated Sydney baseline (Sydney adapter rerun + full). PATCH — a correctness fix confined to the ~1.85 km² of NSW where LEP HOB polygons genuinely overlap; the city-wide headline is unchanged (all moves sub-0.01 pp aggregate), with local shifts up to ~0.2 pp in the inner/CBD rings where HOB precinct stacking occurs. No other city moves.

Fixed

  • Overlapping LEP Height-of-Building polygons were resolved most-restrictive (lowest height wins), over-restricting the NSW parcels under genuinely overlapping HOB polygons. Overlapping HOB polygons are amendment/precinct stacking of the same control (e.g. a CBD precinct height map layered over the base LEP height), not two simultaneously-binding controls, so the applicable limit for a parcel is the most permissive of the overlapping polygons. ‘s per-parcel HOB lookup now takes which.max(max_height_m) instead of which.min. Statewide the HOB layer has 3.18 km² of self-overlap, 1.85 km² of it across polygons with differing heights — the only parcels this can move.
  • This is deliberately not Adelaide’s PDCode convention. Adelaide’s min-wins resolves a genuine Levels-vs-Metres dual control where both limits bind simultaneously — verified against the raw PDCode data as the only overlap present (each of the Levels and Metres surfaces is internally non-overlapping; their intersection is 385 km²) — so it correctly stays min-wins. The other six adapters were swept and carry no equivalent min-wins height-overlap logic. Audited under.
  • Greater Sydney ≤2-storey (ex-rural) 76.94% → 76.93%, highly-restricted (GCCSA, ex-rural) 86.85% → 86.84% (rounds 86.9% → 86.8% at the boundary), SUA highly-restricted 85.248% → 85.241% — all sub-0.01 pp city-wide. Inner rings move more: gt-2-storey +0.21 pp at 18 km; the Parramatta LGA (CBD HOB stacking) ≤2-storey −0.15 pp. Height-independent controls (low-density, heritage, detached-only) and every other city are unchanged.

Per-city metric movement (vs 1.3.0)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.8% 85.2% 76.9% 77.2% 5.8% 4.5% -0.01 HOB overlap precedence fix — overlapping HOB polygons are same-control precinct stacking, most-permissive wins; GCCSA HR ticks 86.9% → 86.8% on the rounding boundary, all moves sub-0.01 pp city-wide — methodology
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 788 84.5% 84.3% 82.4% 56.4% 1.0% 34.8%
Perth 653 88.9% 88.8% 88.5% 50.3% 1.7% 0.0%
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.3.0] - 2026-07-09

Sydney SEPP (Housing) Chapter 6 dual-occupancy scoping fix, on a fully regenerated Sydney baseline (Sydney adapter rerun + full). MINOR — Sydney’s published detached-only share moves materially; the restriction-union headline is unchanged, and no other city moves.

Fixed

  • Dual-occupancy SEPP liberalisation was gated on the 400 m/800 m walking catchment for all of Chapter 6, over-restricting Sydney’s detached-only metric. SEPP Housing 2021 Ch 6 Part 2 (dual occupancy / semi-detached, s.166) is permitted with consent on “land to which this chapter applies” (s.164 — statewide minus bushfire/coastal/heritage/exclusion-map and the 4 excluded LGAs), with no walking-catchment requirement; only Parts 3/4 (multi-dwelling / terrace / residential flat building, ss.170/174) bake the “low and mid rise housing area” band into their permission grants. now computes a chapter-wide, R2-only sepp_dual_occ_permitted and AND-NOTs it into permits_only_detached, while keeping sepp_lmrh_permitted band-gated for Parts 3/4. folds the same flag into the typology breakdown so both published outputs agree. Reading independently verified against the NSW Planning Portal and the SEPP’s two-stage commencement (dual-occ went statewide at Stage 1, 1 Jul 2024; mid-rise typologies catchment-gated at Stage 2, 28 Feb 2025).
  • Greater Sydney detached-only (permits-only-detached, ex-rural) moves −4.17 pp at 20 km / −2.70 pp full GCCSA / −3.13 pp SUA; typology dual_occ_permitted share 68.6% → 76.5%. The restriction-union headline is unchanged (every R2 parcel is already low_density, so the union does not move); all other cities unchanged.
  • Known upper bound: sepp_dual_occ_permitted subtracts only the bushfire/coastal/heritage/exclusion-map cuts of s.164, not the flood (Georges River / Hawkesbury-Nepean PMF), ANEF, pipeline, Schedule-12, or ATOD carve-outs — so detached-only is a slight lower bound (correct direction, sub-1 pp). Tracked in.

Added

  • R2 dual-occupancy pre-Feb-2025 ban audit for the 8 banning councils, verified against point-in-time (31 Jan 2025) LEP text, with the SEPP-upzoning quantification and a note that 2 of the 8 (Hawkesbury, Wollondilly) are Ch 6-excluded LGAs and so were never upzoned by the SEPP. Adds a pre-upzoning (LEP-only) headline snapshot for Sydney.
  • Corrected ‘s Hornsby instrument ID (epi-2013-0534epi-2013-0569; the old ID resolved to a Ballina amendment). Affects only future point-in-time LEP re-fetches.

Per-city metric movement (vs 1.2.0)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.9% 85.2% 76.9% 77.2% 5.8% 4.5% 0.00 SEPP dual-occ scoping fix — s.166 dual-occ is chapter-wide, not walking-catchment-gated; detached-only 7.2% → 4.5%, union unchanged — methodology
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 788 84.5% 84.3% 82.4% 56.4% 1.0% 34.8%
Perth 653 88.9% 88.8% 88.5% 50.3% 1.7% 0.0%
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.2.0] - 2026-07-07

Perth parcel-base source switch, on a fully regenerated baseline (full

  • PMTiles rebake). MINOR — Perth’s published numbers move slightly.

Changed

  • Switched the Perth cadastre from the Landgate Historical Cadastre (LGATE-489) to the PlanWA property-interest cadastre. now reads (replacing). Three adapter changes for the new source: (1) UPPERCASE column names (USAGE_CODE, POLYGON_NUMBER); (2) usage_code is now a compound text field (e.g. "1; 19" = Transfer-of-Land-Act + Building-Strata) — residential tenure is matched by splitting on ; and intersecting with {1, 2, 16}, not a bare %in% (a naïve match would silently drop 153,628 parcels carrying a secondary code); (3) the source is already one clean row per POLYGON_NUMBER and plain-linear geometry, so the dedup + curve conversion become no-ops. Verified: the split-and-intersect filter yields 1,323,980 statewide residential parcels, matching the source’s own count exactly. Greater Perth: 789,053 residential lots (+3.0% vs the Landgate base) over essentially the same land (ex-rural residential 657.4 → 653.4 km², −0.6%). Published Perth ex-rural shares move <0.3 pp: low-density +0.29 pp, ≤2-storey −0.06, heritage +0.04, highly-restricted −0.02. All other cities unchanged. Raw file swapped on R2 + in the manifest; the old Landgate extract is retained on R2 for rollback. (Not yet adopted: the new file also carries LGA_NAMES per parcel, a candidate to replace the separate LGA_2025 spatial join — deferred pending a spot-check.)

Per-city metric movement (vs 1.1.0)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.9% 85.2% 76.9% 77.2% 5.8% 7.2%
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 788 84.5% 84.3% 82.4% 56.4% 1.0% 34.8%
Perth 653 88.9% 88.8% 88.5% 50.3% 1.7% 0.0% -0.02 Cadastre source switched Landgate Historical → PlanWA property-interest — methodology
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.1.0] - 2026-07-07

Two coverage/data refreshes (Perth heritage, SA cadastre), plus a diagnosis-only issue. MINOR — Perth’s published heritage numbers move; on a fully regenerated baseline (full + PMTiles rebake).

Added

  • WA Heritage List (DPLH-090) added to Perth’s heritage classification. Perth previously tested parcels against only the State Register (DPLH-006 → State) and Heritage Areas precincts (DPLH-089 → Local), missing the Heritage List — individual places listed on an LGA’s local planning scheme. A listed place needn’t sit inside a Heritage Area, so List-only places were classified None. Now a third st_intersects test tags a hit Local (State still wins). Fetched to via the new reproducible (wired into; manifest + R2 tracked). 8,588 places statewide; 10,811 Perth parcels hit the List, 5,672 of them flipping None → Local (Perth heritage Local ~7,015 → 12,687). Greater Perth ex-rural shares: heritage 0.9 → 1.7% (+0.81 pp), highly-restricted 88.8 → 89.0% (+0.21 pp); ≤2-storey / low-density unaffected.

Changed

  • Refreshed the SA DCDB parcel cadastre from a staged extract. Replaced with a fresher DCDB export (schema-identical: same 19 columns, EPSG:4326, parcels layer; the 16 railway dcdbid exclusions still present). 1,138,092 → 1,140,113 parcels (+2,021, +0.18%). Manifest sha refreshed
  • pushed to the tracked sa-raw R2 key. Adelaide moves are negligible (every ex-rural share <0.05 pp; ex-rural residential land 371.7 → 372.1 km²) — a routine refresh.

Investigated (no change)

  • **Mitchell LGA blank council map ** — diagnosed as not a backend bug. The melbourne outputs (geojson and baked PMTiles) correctly tag Mitchell’s within-SUA parcels lga_code == "24850" at every zoom (2,602 parcels in melbourne-union; 1,775 in one z14 tile; the per-LGA overview feature for 24850 is present at z7–9). Redirected to frontend with a fit-bounds lead (the overview feature is GCCSA-scoped 507 km² with data in a small SW sliver). No data change.

Per-city metric movement (vs 1.0.0)

Full history in [].

City Resid km² Highly restr. HR (SUA) ≤2-storey Low-dens Herit Detached Δ HR (pp) What happened
Sydney 1,006 86.9% 85.2% 76.9% 77.2% 5.8% 7.2%
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8%
Brisbane 788 84.5% 84.3% 82.4% 56.4% 1.0% 34.8%
Perth 657 89.0% 88.8% 88.6% 50.0% 1.7% 0.0% +0.21 WA Heritage List (DPLH-090) added — 5,672 None→Local — coverage
Adelaide 372 88.2% 88.1% 87.1% 27.6% 7.7% 0.0% -0.02 SA DCDB cadastre refreshed, +2,021 parcels — methodology (refresh)
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.0.0] - 2026-07-05

First stable release. Promotes 1.0.0-rc.3 to the dated 1.0.0 after the validation freeze — the data is byte-for-byte identical to 1.0.0-rc.3; only VERSION, this heading, and the emitted change (no combine, no map re-bake). The live R2 PMTiles bundle already carries the rc.3 data.

Under this project’s SemVer policy 1.0.0 is a confidence / maturity milestone, not a breaking change — the policy is unchanged (a real MAJOR bump still means a breaking change to the output schema, ring indexing, or denominator conventions), so the next genuine break is still 2.0.0. The 1.0.0 line’s methodology and coverage are the union of everything through rc.3 (see the rc.1–rc.3 notes below): the four coverage/correctness fixes of rc.3 (Sydney C4, Brisbane PDA, Melbourne SUZ, no-height-data map default) on a fully regenerated baseline.

[1.0.0-rc.3] - 2026-06-27

Third release candidate for the 1.0.0 line — four coverage / correctness fixes to residential-land classification, on a fully regenerated baseline (full clean combine + polygon rebake). Three move published city numbers (Sydney, Brisbane, Melbourne); one is a map-layer default change.

Changed

  • NSW C4 (Environmental Living) reclassified as non-rural residential. Dropped C4 from sydney_rural_zones in so Environmental Living parcels count toward the ex-rural (metro) denominator the restriction shares run on, instead of being filtered out as rural-residential large-lot. C4 is a genuine NSW Standard-Instrument residential living zone (permits dwelling houses across established bushland suburbs inside the metro footprint), not a large-lot category like RU5 (Village) / R5 (Large Lot Residential). C4 stays on the residential allow-list and stays low-density — it just stops being treated as rural. Verified: 99.7% of C4 area (339 of 340 km²) falls inside the Greater Sydney GCCSA, confirming it is metro land, not the Blue Mountains fringe. Moves Sydney’s ex-rural-denominator restriction shares (~172 km² net of C4 parcels — all low-density, all restricted, mostly unknown-height — enters the denominator; the C4 zone spans ~340 km² but lots exclude roads/reserves). Greater Sydney ex-rural cumulative shares: low-density 72.5 → 77.2 (+4.7 pp), restricted 84.1 → 86.9 (+2.7 pp), ≤2-storey 82.0 → 76.9 (−5.1 pp) (C4 bushland parcels largely lack a height cap, so they enlarge the denominator while adding little to the ≤2-storey numerator), heritage 6.5 → 5.8 (−0.7 pp). Sydney’s zoning-by-category breakdown is unchanged (C4 was already “Low density residential” — only its rural flag moved). Side effect: the borderline price test test_low_density_stronger_with_distance_control (an xfail) now xpasses — restores the v4 low-density × sale-price finding; left as xfail pending a maintainer call on converting it to a hard assert.
  • Brisbane Priority Development Areas (PDA) added back to the zoning layer. previously dropped the entire LVL1_ZONE == "Planning scheme" overlay (PDA + South Bank/SBCA). PDAs are state-declared urban-renewal areas (Bowen Hills, Northshore Hamilton, Woolloongabba, Carseldine, Fitzgibbon …) that supersede the City Plan base zone and enable substantial — usually high-density — housing, so dropping them undercounted housing-capable land. Now: keep ZONE_CODE == "PDA" rows, re-add them as residential with storeys = NA (unknown height — PDAs run their own development schemes with no single City Plan cap; this also guarantees PDA land never falls into the ≤2-storey restricted bucket), and let PDA win precedence over the underlying base zone. South Bank (SBCA) stays dropped (parks-heavy). est_zone "PDA" maps to the existing Centres / Priority Development Area category. Verified: 12 PDA polygons, 9.36 km², ~0% self-overlap (the self-overlap that motivated the original blanket drop was SBCA-driven), ~4.4k lot parcels under PDA of which 80% sit on a residential base (parks/reserves are already removed by the parcel tenure filter), so no extra clip is needed. The build re-classifies 4,406 parcels to est_zone = "PDA": 4,151 are not- restricted (→ no-height-data → non-restricted under) and 255 are heritage- restricted (a heritage building inside a PDA is genuinely heritage-restricted). Greater Brisbane ex-rural cumulative shares: restricted 85.1 → 84.5 (−0.6 pp), low-density 56.9 → 56.4 (−0.4 pp), ≤2-storey 83.1 → 82.4 (−0.6 pp), heritage 0.97 → 1.04 (+0.07 pp — PDAs like Bowen Hills carry more heritage overlay than the metro average). The “Centres / Priority Development Area” zoning category gains content (mean ring share 9.7% → 10.2%).
  • Melbourne City-of-Melbourne SUZ6/SUZ7/SUZ8 added back as Mixed use. keeps zones via a ZONE_CODE_GROUP keep-list, which excluded all Special Use Zone schedules. Added a targeted, LGA-scoped carve-in for ZONE_CODE %in% c("SUZ6","SUZ7","SUZ8") & LGA == "MELBOURNE"not a group-wide SUZ add (that would sweep in airports/universities/hospitals/ racecourses statewide, and the schedule numbers are LGA-specific). These permit residential/mixed-use development; classified Mixed use with storeys = NA (unknown height — no melbourne_storey_rules SUZ entry). Verified: 7 polygons, 0.70 km², all inside the Greater Melbourne GCCSA, 0% overlap with already-kept residential zones (genuinely additive). The build adds 799 parcels (511 SUZ6 + 288 SUZ7; no SUZ8 falls in the City of Melbourne LGA). Ex-rural share movements are negligible (<0.02 pp on every metric — 799 of ~2.0 M parcels); the “Mixed use” zoning category grows marginally (mean ring share 8.95% → 9.02%).
  • Map default: <city>-non-restricted now includes no-height-data parcels. In, _non_restricted is now all not-restricted residential land (height known or unknown), reversing’s default carve-out. A parcel with no recorded height cap is, if anything, among the least restricted residential land, so greying it out as “unknown” read as more restricted than reality and shrank the /cities/[slug] hero map’s contrast layer. The <city>-no-height-data layer is kept as a non-exclusive sub-overlay (no-height-data ⊆ non-restricted) so the “we don’t know the cap here” caveat is still surfacable, it is just no longer the default colour. Complements: the new PDA / SUZ unknown-height parcels now read as unrestricted on the map. The test_residential_layers_partition invariant was rewritten for the overlapping (Option B) semantics: union + non-restricted partition every housing parcel; no-height-data ⊆ non-restricted. CSV metrics are unaffected (map-only); PMTiles rebaked. A versioned PMTiles reingest issue will be filed in zoning-australia.

Per-city metric movement (vs rc.2)

Total ex-rural residential land (GCCSA) + restriction-control shares; full history in [].

City Resid land km² Highly restricted HR (SUA) ≤2-storey Low-density Heritage Detached-only Δ HR (pp) What happened
Sydney 1,006 86.9% 85.2% 76.9% 77.2% 5.8% 7.2% +2.71 C4 (Environmental Living) reclassified non-rural → enters the ex-rural denominator — methodology
Melbourne 1,500 49.8% 49.5% 47.8% 31.4% 4.1% 10.8% -0.01 City-of-Melbourne SUZ6/7/8 added as Mixed use — coverage
Brisbane 788 84.5% 84.3% 82.4% 56.4% 1.0% 34.8% -0.59 Priority Development Areas (PDA) re-included — coverage
Perth 657 88.8% 88.6% 88.6% 50.0% 0.9% 0.0%
Adelaide 372 88.2% 88.1% 87.1% 27.7% 7.7% 0.0%
Hobart 96 97.4% 97.2% 96.9% 21.3% 3.2% 0.0%
Canberra 111 75.1% 76.0% 75.0% 75.0% 2.0% 0.0%
Darwin 27 88.4% 88.4% 88.4% 73.3% 0.0% 73.3%

[1.0.0-rc.2] - 2026-06-26

Second release candidate for the 1.0.0 line — rc.1 (byte-identical to 0.26.0) plus the correctness fixes below, on a fully regenerated baseline.

Changed

  • Excluded anomalous parcels flagged by Ethan (NSW, QLD).
  • QLD: dropped 7 named survey plans + all feat_name == "Main Line" rail-corridor parcels (the existing \bRailway\b filter doesn’t catch “Main Line”). 266 parcels dropped in Greater Brisbane (18 plan + 248 Main Line). Brisbane restriction shares move ~0.2 pp (e.g. le-2-storey-all 5 km 0.6989 → 0.7009).
  • NSW: dropped 4 anomalous parcels. Ethan identified them by GPKG fid; we drop by the persistent cadid instead (see below). Sydney moves are negligible (6th decimal — 4 parcels of 1.6 M).
  • Hardened all manual parcel-exclusion lists to persistent cadastral keys (VIC, SA). Re-keyed the existing exclusion lists off rebuild-fragile row-ids onto stable identifiers — byte-identical outputs (same parcels dropped; verified Melbourne/Adelaide unchanged): Melbourne fid → parcel_pfi (VicMap Persistent Feature Identifier), Adelaide objectid → dcdbid. fid / objectid renumber on re-fetch and would silently target the wrong parcels. New convention doc: [].

Fixed

  • Regenerated stale capacity/lot-by-lot-eligibility* + scenarios/lot-by-lot*. These had not been refreshed since 0.20.0 (2026-06-23) — the v0.21–v0.26 releases were disjoint-output branch merges that didn’t re-run the full combine, so these stages were frozen while their inputs (parcels, typology gates, amalgamation shares) moved underneath them. The stage is deterministic (two clean runs are byte-identical; compute_frontage verified reproducible) — the earlier “nondeterminism” read was stale-vs-current, not run-to-run. This rc is cut from a full clean combine, so these are now in sync with their inputs.

[1.0.0-rc.1] - 2026-06-25

First release candidate for the 1.0.0 line. This is a confidence / maturity milestone, not a methodology change: the data is byte-for-byte identical to 0.26.0 — only VERSION, this changelog, and the emitted move. The RC is held in a validation freeze (full test suite + frontend reingest check) before being promoted to a dated ## [1.0.0].

Note on the version number

Under this project’s SemVer policy a MAJOR bump means a breaking change to the output schema, ring indexing, or denominator conventions — and no such break is shipped here. 1.0.0 is a deliberate round-number / “we are confident this dataset is publicly stable” marker. The policy is unchanged: the next breaking schema or denominator change is still what bumps to 2.0.0; non-breaking methodology/coverage changes bump the MINOR (1.1.0, …).

[0.26.0] - 2026-06-25

Fixed

  • Reverted the wash-only map slim — it reintroduced a rendering bug. While optimising the pmtiles size (v0.22.0 non-heritage → v0.24.0 → v0.25.0 Tier-1 wash-only, 724→580 MB), we made several layers ship only their dissolved per-SAL “wash” companion, dropping the per-parcel z13–14 geometry. That broke close-zoom rendering: the dissolved/joined polygons do NOT render at z>14 — they overzoom into algorithmic blobs / drop out — which is the exact bug per-parcel emission was added to fix. The frontend zooms the city spotlight + suburb/council maps to lot level (~z15), so any wash-only layer wired onto them would have blanked out. All layers are restored to per-parcel (WASH_ONLY_LAYERS is now empty). The slim never reached the live site (the slimmed layers weren’t frontend-bound yet), so this is a clean revert. The pmtiles returns to full per-parcel fidelity (~1 GB) — “large files over no rendering”. The safe ways to shrink it WITHOUT breaking close-zoom (lower --maximum-zoom, heavier simplification, or compositing the pure complements) are tracked in.

[0.25.0] - 2026-06-25

Added

  • non-low-density complement map layer. The denser-housing-allowed complement of the low-density layer (exact complement over residential land: low-density + non-low-density partition all ex-rural residential). Synthetic flag in literal_polygons, ships wash-only (it’s the denser-allowed majority of residential, so per-parcel detail would bloat the bundle).

Changed

  • Map-volume slim — restriction/coverage complement layers ship wash-only (Tier 1). Per the 2026-06-25 map-volume audit: the per-parcel (z13–14, lot-level) layers were ~80% of the 724 MB pmtiles, but the frontend only binds lot-level on a few maps. Tier 1 = the layers the frontend does not bind yet (shipped ahead of pending render issues): permits-multi-dwelling, gt-2-storey, permits-only-detached, non-heritage, non-low-density, no-height-data, no-data-heritage, no-data-detached-only now ship wash-only (per-parcel z13–14 dropped). GeoJSON source 7.96 → 5.72 GB; pmtiles ~724 → ~500 MB, no live change. KEEP full lot-level: zoning (detailed map), union, non-restricted. Tier 2 (le-2-storey/low-density/rural — bound per-parcel today) held for a paired frontend rebind. Ships via the re-baked on R2.

[0.24.0] - 2026-06-24

Changed

  • non-heritage map layer now ships wash-only (no per-parcel detail). added gt-2-storey + non-heritage complement layers (v0.22.0). The per-parcel non-heritage layer is the heritage complement — all residential land — and ballooned the pmtiles to 848 MB (+213 MB) for negligible value over the dissolved choropleth wash (the per-parcel “non-heritage” view is just “every lot except the heritage ones”). New WASH_ONLY_LAYERS in emits only the dissolved per-SAL non-heritage-wash for it; gt-2-storey keeps its full per-parcel layer. pmtiles back to ~660 MB. NOTE: v0.22.0’s 848 MB tiles never went live (the R2 upload failed); this is the first live ship of’s layers. Map-only; ships via the re-baked on R2.

Changed

  • Regenerated prices/ to re-align with the current suburbs/ leaderboard. The committed prices/by-{sal,sa2,lga}.csv had drifted against the upstream suburbs/by-*.csv they join onto: they were last generated before the ex-rural-denominator standardisation and the permits-only-detached / no-data reworks landed in the suburb rollup. The refresh re-runs (which faithfully passes the up-to-date suburb columns through) so the shared restriction columns — *_ex_rural_*, rural_*, permits_only_detached_*, *_no_data_* — now match the suburbs leaderboard exactly (previously off by up to ~80pp / full 0↔100 swings on some boundaries). Three columns carried from the suburb rollup are now present in prices/ too: composite_rank, qualifies_for_ranking, total_ex_rural_m2. The v5 time-series growth columns (price_cagr_pct / price_growth_period / price_growth_source) were already in the committed outputs and are unchanged. Price / income / rent / sale-price / CAGR values are stable. Also regenerated the dependent,, and the approvals-by-ring-* artefacts.

[0.22.0] - 2026-06-24

Added

  • Two complement map layers — gt-2-storey (>2-storey) and non-heritage. Map-only (gitignored polygons/*.geojson + their dissolved -wash companions for all 8 cities); no CSV / committed-output change and no R re-run. Both are synthetic flags computed in literal_polygons._prepare_city_parcels from columns already in the parcels gpkgs: gt-2-storey = the literal height-known storeys > 2 footprint (~height_unknown & ~le_2_storey, the canonical gt_2_storey flag — height-unknown parcels stay in no-height-data, not here); non-heritage = ~heritage over residential land (exact point-on-surface complement of the heritage layer). Both exclude_rural=True and both added to WASH_LAYERS. le-2-storey + gt-2-storey + no-height-data now partition ex-rural residential exactly, as do heritage + non-heritagedocs/pipeline/,,, the per-city pages + README, and reframed full_gccsa-as-headline language in / comments. GCCSA is everywhere reframed as the secondary companion (never removed). Capacity is the explicit exception (GCCSA-bound, self-consistent, no SUA baseline — labelled as such).

Added

  • SUA-clipped ex-rural cumulative shares for all five restriction controls (union/highly-restricted, ≤2-storey, low-density, heritage, and permits-only-detached), enabling the frontend’s “full metro” headline + components to sit on the Significant Urban Area consistently with the ex-rural denominator (closes). Previously carried cumulative_sua only for the all-residential (-all) family, and permits-only-detached had no SUA value at all — so an ex-rural full-metro headline had no truthful per-control SUA companion (using the -all SUA cut would mix denominators and break the union ⊇ component superset invariant). Adds five *-ex-rural-all metric rows (union-ex-rural-all, le-2-storey-ex-rural-all, low-density-ex-rural-all, heritage-ex-rural-all, permits-only-detached-ex-rural-all) to, each carrying cumulative_sua plus matching cumulative_5km/cumulative_20km/full_gccsa ex-rural cuts. The chosen emit slots straight into the existing ingest (no per-ring-file schema change). Numerator = parcels (repr-point in SUA_2021) AND control mask AND not rural; denominator = the ex-rural residential land clipped to SUA — the same restricted & ~rural / ~rural definition as (the new full_gccsa reproduces the published by-ring cumulatives to 0.0000 pp across all 8 cities × 5 controls). The superset invariant union ⊇ {≤2-storey, low-density, heritage, detached}rural, excluding it from the ex-rural denominator and the restriction metrics — consistent with the other 7 capitals.** The Perth/WA adapter never set a parcel-level rural column, so defaulted all WA parcels to rural=FALSE. The 18,119 parcels in the "Low-density / rural residential" LPS category (zones: Rural residential, Special rural, Special residential, Residential bushland) were therefore counted as ordinary restricted low-density residential: they leaked into residential_ex_rural and inflated the low-density / union / highly-restricted shares, and shipped empty. Perth now sets rural = (zone_category == "Low-density / rural residential"), netting ~273 km² of rural-residential land out of both sides of every ex-rural metric (mirrors Adelaide’s adelaide_rural_zones model). Perth-only. Perth full-metro (GCCSA) cumulative shares move down: highly-restricted (union) 92.7 → 88.8%, ≤2-storey 92.5 → 88.6%, low-density 67.5 → 50.0%, union-ex-heritage 92.1 → 87.9%; within-20km: union 87.6 → 86.9%, low-density 56.1 → 53.5%.

Changed

  • Darwin ring origin repointed to the Darwin GPO; Darwin public-transport proximity now ships N/A (no urban rapid transit).
  • : Darwin’s per-ring origin was an ad-hoc road intersection (Garramilla Bnd & Cavenagh St). Repointed it to the Darwin GPO (48 Cavenagh St, lon=130.8419655, lat=-12.4610446), matching Hobart’s GPO convention, across every ruler (,, cities CBD,). The GPO is ~170 m from the old origin, so every Darwin per-ring share shifts only marginally; the ring annuli still partition the metro total cleanly.
  • : Darwin has no urban rapid transit and no GTFS feed, so the old OSM rail/tram/ferry fallback returned 9 phantom “stops” (the Ghan long-distance terminal, harbour/island ferries, plus bus interchanges via a public_transport=station query bug). Darwin is now an explicit no-urban-rapid-transit city (NO_RAPID_TRANSIT): its qualifying rapid-stop set is empty, so ships its row honestly as N/A (empty/NaN proximity shares, stop_count=0 — was share_near_pt=3.94%, share_restricted_in_pt=47.6%, stop_count=9) and its pt-* map layers (rapid-stops, restricted-near-pt, non-restricted-near-pt, buffer) emit empty. The OSM public_transport=station query line (which leaked bus interchanges) was dropped, with a defensive bus-mode post-filter retained, so the rail/tram/ferry fallback stays clean for any future no-GTFS city.

[0.19.0] - 2026-06-23

Fixed

  • Melbourne detailed-zoning dissolve labels now match the zone-classification SSOT. The Melbourne polygon dissolve collapsed RDZ/UGZ/DZ into one merged Urban renewal / Greenfield group label that had no row in — so the frontend (which now classifies the map from that SSOT,) fell to grey/unknown and needed an interim → mixed-use hack that conflated two zones on different rungs. Split the mapping to the classifier’s own labels: RDZ/DZUrban renewal (mixed-use), UGZGreenfield (non-residential). All 6 Melbourne dissolve labels now resolve against the classifier; the Greenfield urban-growth fringe correctly renders non-residential rather than mixed-use. Melbourne-only, map-only (the melbourne-zoning layer); ships via the re-baked on R2. No CSV / headline-number change.

[0.18.0] - 2026-06-23

Bundles two independent data-correctness changes cut off v0.17.0 — the Perth R-Code apartment-floor completion and the UDIA-benchmark removal — into one release (disjoint outputs: typology/ vs min-lot-size/ + amalgamation/). CSV-only; no map / R2 change.

Removed

  • UDIA greenfield benchmark dropped from the pipeline (, Ethan). The per-city UDIA 2026 State of the Land median greenfield lot size (+ min_lot.greenfield_source, exposed via assumptions.greenfield_thresholds) was an unreliable, blended/unsourced per-city value. The whole min_lot config section, the Python + R greenfield_thresholds getters, and the now-orphan are removed.

Changed

  • min-lot-size/by-{sal,sa2,lga}.csv keep only the cadastre lot-size stats. The three greenfield-share columns (actual_share_above, regulated_share_above, greenfield_threshold_m2) are dropped; the leaderboard now ships exactly city, code, name, parcel_count, mean_lot_area_m2, median_lot_area_m2. The retained lot-size data is unchanged (byte-identical parcel_count / mean / median vs the prior release across all three grains) — “the minimum lot size data” Ethan asked to keep.
  • Amalgamation small-lot cutoff repointed to each city’s own median residential lot size. no longer reads the UDIA threshold; it computes the cutoff self-consistently as the median area_m2 of each city’s restricted-residential parcels (no external benchmark). The output column greenfield_threshold_m2 is renamed median_lot_size_m2. Hobart + Darwin — previously skipped for lacking a UDIA threshold — are now included.
  • Perth R-Code apartment floor extended to 6 plain-Residential councils (completes). v0.17.0 added the WA-only R-Code floor (_apply_wa_rcode_floor in) that downgrades a multi-dwelling typology to prohibited where a parcel’s R-Code ranks below the matched (council, zone) row’s apartment_min_rcode — but only Stirling | RES was floored, so apartments were over-reported on every other Perth council’s low-R-Code “Residential” land. Set apartment_min_rcode = R40 on the six remaining plain-”Residential” (RES) rows of WA.tsv — Bassendean, Bayswater, Claremont, Melville, Nedlands, Victoria Park — the direct analogs of Stirling’s Ethan-confirmed case. Centre / Mixed Use / District-Local-Neighbourhood Centre / Highway / Private-Community-Purposes zones are correctly left unfloored (apartments there are permitted by the zone type, not R-Code-gated); no townhouse_min_rcode floor was added (Stirling has none). Bayswater MHDR and Cottesloe 1B (dedicated higher-density residential) are flagged for Ethan — left unfloored. Per-council apartment_permitted_pct: Bassendean 99.4→25.2, Bayswater 99.4→95.9, Claremont 95.3→5.8, Melville 100→15.5, Nedlands 99.8→38.6, Victoria Park 100→40.7. Perth overall 18.21→13.18 (Stirling unchanged 32.31). WA/Perth-only — every non-Perth typology row byte-identical to the prior release.

[0.17.0] - 2026-06-23

Bundles six parallel work-streams cut off v0.16.0 (, heritage+GCCSA-clip,) into one release — one changelog entry, one R2 pmtiles upload, one frontend reingest.

Added

  • ** — per-state zone-code → density-level SSOT.** The classification that colours the detailed-zoning map lived only in the frontend, forking provenance from the backend. Migrated the whole table here: 156 per-(city, zone_code) rows + 53 group_fallback rows → one of 9 density rungs (low … medium-high, high, centre, mixed-use, non-residential). 150/150 frontend cityZoneList codes resolve. Ethan’s corrections applied: Melbourne Urban-renewal→mixed-use, HCTZ→medium-high, RGZ→medium-high (=HCTZ); Canberra RZ5→high, CZ2/CZ5→mixed-use; Darwin Service/Tourist-Commercial→mixed-use; Brisbane LMDR↦LMR merge; Adelaide township zones (N/T/TN/TAC/TMS) excluded from “Zoning groups”. Map-colouring SSOT; no number change.
  • permits-multi-dwelling detailed-map layer — the “missing-middle allowed” land. The detached control partitions residential land into three buckets but only two shipped as polygons (permits-only-detached + no-data-detached-only); the positive bucket — land that permits MORE than a detached house — had no shape. Added it (+ -wash, all 8 cities) as the complement permits_only_detached_known & ~permits_only_detached. Per-city: Melbourne 1.9 M (LDRZ stays detached-only), Sydney 981 k, Perth 619 k, Adelaide 580 k, Brisbane 488 k, Canberra 128 k, Hobart 101 k, Darwin 8.5 k. Existing layers + suburb CSVs byte-identical; map-only, ships via the re-baked on R2.
  • City-swap counterfactual is now backend SSOT. The /cities “what if city A had city B’s zoning?” model was modelled entirely in the frontend. The pipeline now ships — one row per ordered (source, target) pair of the 8 capitals (8×7 = 56) with current_restricted_km2, swapped_restricted_km2, delta_km2, delta_dwellings, current_share_pct, swapped_share_pct, total_res_km2. The swap cross-applies each target’s per-ring restricted-ex-rural share onto each source’s residential km² (single-sourced from, clipped to the 20 km headline disc) — reproducing the frontend formula exactly. The frontend reads + renders only.
  • City-composition rollup (, ask 3). counterfactuals/city-composition.{csv,json} — the area-weighted pooled inner-20 km 8-cell (≤2 × LD × heritage) cross-tab per city (the backend mirror of cityComposition), so the frontend no longer re-aggregates the joint distribution.
  • Documented dwellings/ha density-yield assumption (, ask 1). The frontend’s hardcoded DWELLINGS_PER_HA 50 / 200 / 400 figures now live in with an ASSUMPTION: source + a _relationship_to_capacity_per_ha note explaining why they are intentionally distinct from the calibrated capacity.per_ha kernel (round, conservative headline densities vs the per-storey GMAPS yields). Read via yimby.assumptions.counterfactual_*. The counterfactual swap’s dwelling delta uses townhouse_3_storey (50 dw/ha) × 100 ha/km².

Fixed

  • Detailed-zoning map heritage was applied to whole zone polygons, not the Heritage Overlay extent — Melbourne, Sydney, Canberra. The map flagged an ENTIRE (multi-suburb) zone polygon as heritage if it touched an HO anywhere, so on the three cities whose zoning source is zone-level (not parcel-level) large blocks rendered hatched. Melbourne was worst — intersects(ho_union) in marked ~62% of the metro as heritage. Now heritage is the geometric intersection of the zones with the raw heritage layer (VIC, NSW Heritage_Filtered.shp, ACT), split from the remainder: Melbourne 62% → 3.8%; Sydney whole-zone → fine-grained pieces (median 578 m², 228 km² matching the raw extent); Canberra → the genuine intersection. The parcel-level cities (Brisbane/Adelaide/Perth/Hobart/Darwin) keep their already-correct per-parcel heritage. Map-only; no CSV / number change. Ships via the re-baked on R2.
  • Detailed-zoning map now clips to the GCCSA for Sydney, Adelaide, Hobart, Darwin (the fix, extended). Their zoning sources are statewide, so the map carried all-state zones — Sydney had 75% of its zoning area outside Greater Sydney, Adelaide 61%, Hobart/Darwin nearly all. _build_one now clips each statewide source to its GCCSA polygon (with a per-geometry make_valid → buffer(0) → polygonal-only repair for the invalid / mixed-dimension SA/TAS source geometry). Now 0% outside the GCCSA. Melbourne/Brisbane/Perth were already metro-only (Brisbane/Perth byte-identical). Map-only; same re-baked pmtiles.
  • Perth typology now resolves on (council × zone × R-Code), not just (council × zone). WA permissibility is two-layer (LPS zoning table × R-Codes density floor), but the rollup dropped the R-Code — collapsing e.g. Residential (R20) and (R40) to one verdict — biasing Perth’s shares upward. _perth now parses the R-Code (82.9% coverage) and a WA-only ordered-scale floor downgrades a multi-dwelling typology to prohibited where the parcel’s R-Code is below the council’s *_min_rcode (new WA.tsv threshold columns). Stirling apartment share 97.2% → 32.3%. The remaining ~29 metro councils’ R-Code floors are a follow-up audit (Ethan). WA-only — every other state’s typology/ output is byte-identical.
  • SA low-density zones now permit low-rise apartments. The SA typology audit was built from a secondary Guide PDF, reading Suburban Neighbourhood / Hills Neighbourhood / Neighbourhood (SN/HN/N) as apartment = no. The operative Planning & Design Code classifies residential flat buildings as Deemed-to-Satisfy in those zones, restricting only those of 3+ levels — so low-rise apartments are permitted. Set apartment_permitted = conditional for SN/HN/N. Adelaide apartment_permitted_pct 56.6% → 74.2%.
  • Moreton Bay GR_U secondary-dwelling contradiction fixed. GR_U (a high-density precinct) has house_permitted = no, yet the row had secondary_dwelling_permitted = yes — but a secondary dwelling presupposes a primary house, so it can’t exist where a house isn’t permitted. Set to no. Brisbane secondary_dwelling_permitted_pct 99.3% → 98.6%.

[0.16.0] - 2026-06-23

Changed

  • Reform uplift now excludes heritage parcels at parcel grain. The reform-uplift matrix (reforms/*.csv) was heritage-BLIND — it granted uplift to heritage-overlay parcels that can’t actually redevelop. now reads the per-parcel heritage flag (already in every parcels gpkg) and zeroes those parcels’ uplift. This is the exact geometric heritage exclusion, replacing the frontend’s lossy ring-average ×(1−heritagePct) multiplier (the frontend can drop it). Moves the published reform numbers down by each city’s heritage share: Adelaide −7.8%, Sydney −6.1%, Melbourne −3.3%, Canberra −2.6%, Hobart −1.7%, Brisbane −0.7%, Perth −0.4%, Darwin −0.1% (midrise_everywhere).

Added

  • Ranking SSOT columns on suburbs/by-{sal,sa2,lga}.csv. Three facts the frontend used to compute itself, now published from the pipeline: qualifies_for_ranking (per-level ranking floor — SAL ≥500 parcels OR ≥0.5 km²; SA2 ≥500 parcels (cadastre) / ≥1.5 km² (zone-polygon cities); LGA ≥1.5 km²), composite_rank (the per-city CBD-composite score: distance 60% / restricted% 25% / log-area 15%, per-city min-max over qualifying rows), and total_ex_rural_m2 (persisted; = max(0, total_m2 − rural_m2)).
  • . Native absolute “locked land” area per city × radius {5,10,20,30 km} = Σ per-ring restricted km² (le-2-storey-all), the precise form of the frontend’s lockedLandKm2.
  • Reform ratio columns on. upliftPct, upliftVsExistingPct, increasePct (+ _20km) + the existing_dwellings / baseline_dwellings / existing_plus_baseline denominators — the ratios the reforms page (incl. the “+174%” figure) used to derive in the browser, now SSOT so every surface reads identical numbers.

[0.15.0] - 2026-06-23

Fixed

  • Melbourne detailed-zoning map export now clips to the Greater Melbourne GCCSA, not a stale ~49 km disc (closes). The v0.13.0 GCCSA fix reached the parcel/data rollups but NOT the map-polygon export — that’s a separate artifact (→), last regenerated under the disc clip and never refreshed. The raw VicMap zones cover all of Victoria (~9° wide); the generator now clips them to the same Greater Melbourne GCCSA polygon uses for parcels. The melbourne-zoning map layer goes from a 1.14° circle to the 1.34° metro extent — recovering the Mornington Peninsula (south −38.29 → −38.48) and the eastern suburbs (east 145.55 → 145.74). Map-only: no CSV / headline-number change. Ships via the re-baked on R2 (the GeoJSON + gpkg are gitignored).

Changed

  • Combine bake-speedup — ~24% faster (65.4 → 50.0 min), byte-identical output. Six stages re-implemented as pure speedups, each verified byte-for-byte identical to v0.14.0: polygons (geopandas to_json → vectorised shapely.to_geojson), per-lga-ring (sjoin fast-path + residual overlay, 375 → 42 s), reform-uplift (vectorised the per-parcel iterrows scatters, 302 → 148 s), polygon-zoning (parallelised the 8 cities, 209 → 73 s), sensitivity-suite (slim non-geometry frames + precomputed LGA groups, 269 → 210 s), and street_frontage (bulk STRtree query). No data change.

[0.14.0] - 2026-06-22

Added

  • Melbourne housing-typology classification,. Melbourne was the only capital with no typology data — the per-zone permission metrics (apartment_permitted_pct, townhouse_permitted_pct, *_with_consent_pct, …) were empty, and permits_only_detached defaulted to FALSE for every parcel. Adds planning-schemes-package/output/spatial_join/VIC.tsv (keyed on the schedule-stripped VicMap zone group — NRZ1/NRZ2 → NRZ) classifying the 17 housing-permitting zone groups: LDRZ (Low Density Residential) is the only detached-only group (large-lot single dwelling), and every other residential / growth / mixed-use zone (NRZ, GRZ, RGZ, R1Z, HCTZ, UGZ, MUZ, ACZ, CCZ, CDZ, PDZ, DZ, C1Z, B1/2/5Z) permits missing-middle (dual-occ / townhouse / apartment). now sets permits_only_detached, permits_only_detached_known and zone_typology (= group, for the rollup). Headline restricted share unchanged — LDRZ is already low_density, so flagging it detached-only is redundant for the union. This populates the Melbourne typology-permission metrics (parity with the other 7 cities) and the detached-only component / map layer (previously empty for Melbourne).

[0.13.0] - 2026-06-22

Changed

  • Brisbane LMR2 3-storey uplift now propagates across strata schemes,. The LMR2 2→3-storey upgrade was decided per cadastral parcel, so in a strata / community-title scheme (BUP/GTP/SP plan) only the unit(s) physically fronting a ≥ 15.5 m road reserve passed the test — the interior units of the same development wrongly stayed at 2. Now, if any LMR2 parcel in a survey plan qualifies (in the 400 m station band and fronting ≥ 15.5 m), all LMR2 parcels in that plan are lifted to 3 storeys (grouped by plan, which is globally unique statewide; a single-parcel freehold plan is a no-op). The upgrade rises from 7,461 → 17,129 of 71,599 LMR lots. Brisbane-only; pulls inner-ring restriction down further than v0.12.0. Follow-up to.
  • Melbourne now clips to the Greater Melbourne GCCSA, not a 60 km disc. clipped parcels/zones to a circular 60 km buffer around the CBD — Melbourne was the only city not clipping to its GCCSA polygon. That rendered the detailed-zoning map as a circle and, more importantly, dropped real Greater-Melbourne parcels beyond 60 km (Mornington Peninsula, outer growth corridors) while sweeping in non-GCCSA rural land within 60 km. Now clips to the Greater Melbourne GCCSA like every other city; parcels reach the GCCSA edge (~75 km) instead of a 49 km circle. The 20 km headline is unaffected; full-metro / SUA-scoped Melbourne figures + the zoning map change.
  • ACT Missing Middle reforms applied to the Canberra mapping,. RZ1 gains apartments (2-storey walk-up / manor form; height unchanged at 2); RZ2–RZ5 take their multi-unit heights (RZ2 3, RZ3 4, RZ4 6, RZ5 7 storeys) and are renamed (Suburban Density / Residential Transition / Urban Residential / Urban Density Zone). Moves Canberra apartment_permitted_pct up sharply (RZ1 ≈ 80% of resi land) and gt-2-storey for RZ2–RZ5. Highly-restricted (ex-rural) falls 91.4 → 75.1% (−16.3 pp) — RZ2–RZ5 move out of the ≤2-storey bucket as they take their multi-unit heights (RZ1’s own 2-storey cap is unchanged, but it is not the whole story; an earlier draft of this note’s “headline barely moves” was wrong). This is the only real-world policy change in the dataset’s history so far. ⚠️ At v0.13.0 these were the proposed Missing Middle reforms (a draft Major Plan Amendment out for consultation, not yet gazetted), applied per maintainer direction — every changed row is tagged DRAFT … (pre-gazettal), sourced to the draft MPA, traceable and revertible. (The reforms have since been gazetted / are now in effect, so this models current ACT zoning.)

Added

  • 20 km-scoped coverage columns on,. Six *_within_20km siblings (red/green/grey areas + shares) so the frontend’s coverage bar can match the 20 km-scoped section it sits under instead of citing the full-metro figure. Additive — existing columns unchanged.

0.12.0 - 2026-06-20

Changed

  • Brisbane LMR2 conditional 3-storey uplift,. Greater Brisbane Low–Medium Density Residential (LMR) lots previously capped at 2 storeys are lifted to 3 storeys where they meet City Plan 2014’s LMR 2-storey/3-storey condition 2: within 400 m walking distance of a rail or busway station and fronting a road reserve ≥ 15.5 m wide. Walking distance is a true OSM pedestrian-network isochrone from rail (GTFS route_type==2) + curated busway stations (, committed); road-reserve width is the median inward-normal chord across a lot’s shared frontage with adjacent Road Type Parcels. 7,461 of 71,599 LMR lots qualify and move 2→3 storeys. Brisbane-only; pulls inner-ring restriction down (le-2-storey-all 5 km 0.756→0.722, union-all-parcels 5 km 0.795→0.762). The LMR2 change touches QLD only (all other states byte-identical w.r.t. this change).
  • Melbourne HCTZ1/HCTZ2 schedule-dependent storeys,. Housing Choice and Transport Zone parcels now take schedule-dependent heights: HCTZ1 defaults to 4 storeys (6 where the lot is ≥ 1000 m² and street frontage is ≥ 20 m — the GMAPS Melbourne yield cut), HCTZ2 defaults to 3 (4 under the same size/frontage condition). Frontage is computed in-adapter (mirrors street_frontage.compute_frontage) on the ~3,772 ≥1000 m² candidates. Melbourne-only; restriction-union / le-2-storey unchanged (HCTZ are mid-rise, already > 2 storeys) — moves heights/by-category and the reform-uplift estimates only.

0.11.0 - 2026-06-19

Changed

  • Precinct-granular QLD typology for all 5 Greater Brisbane councils,. QLD residential land was largely unmatched in the typology join: the adapters emit base zone codes (LDR, legacy-density GR, HDR, LMR, CR) while the audit (QLD.tsv) keys on precinct-suffixed codes (LDR_A, GR_S, HDR_15, LMDR_3a, CR_C, LDR1…). A typology-only zone_typology column now carries the precinct (Logan/Ipswich/Moreton LDR+GR, BCC HDR/LMDR/ CR, Redland LDR1-5), leaving est_zone — and therefore all restriction / heights / lot-size / low-density / zone-category / min-lot numbers — byte-identical. Also completes the long-pending migration of the QLD typology / min-lot / zoning-map readers off the stale legacy Qld_Dwelling_Heritage_Data.shp onto the from-raw. Typology coverage rises: Logan 53.5→81.0, Moreton Bay 62.3→98.3, Ipswich 7.9→82.8, Brisbane 57.5→84.4, Redland 93.8→97.6 (%). Only QLD moves; all non-QLD cities byte-identical. The detached-only component becomes precinct-aware (flows into suburbs/prices/share, QLD-only); Redland townhouse 93.3→68.6 corrects a legacy over-count (the LDR1/2/4 precincts prohibit townhouses the base “LDR (other)” row permitted).

0.10.0 - 2026-06-18

Added

  • Per-control coverage stat for the spotlight bars,. New — one row per (city, control) for control ∈ {le-2-storey, low-density, detached-only, heritage} with red (restricted by that control), green (assessed, not restricted) and grey (no published data) as both km² and shares of the ex-rural residential denominator. Computed on the exact same denominator + numerators as the *-ex-rural-by-ring headline shares (verified byte-identical), and grey matches the grey map layers by construction, so the frontend can draw red|green|grey bars consistent with the spotlight maps + component %s. Lets wire the last review item.

Changed

  • Council / suburb membership → Significant Urban Area (SUA),. The suburb (by-sal), SA2 (by-sa2) and council (by-lga) rollups, the sal-to-lga correspondence, the per-LGA-per-ring file, the council overview map and the SA2 demographics now define “belongs to a capital” by the ABS SUA (contiguous urban footprint) rather than the broader GCCSA. A suburb is kept iff its representative point is in the city’s SUA; a council is kept iff it is home to ≥1 such suburb (suburb-derived — robust to land-sliver LGAs and tiny-but-dense councils alike). Effects:
  • Fixes the broken council links: sal-to-lga now references only in-SUA councils, so every suburb’s council link resolves (0 broken, 0 orphans). Fringe councils that hold real metro suburbs but are <50% inside the SUA — Kingborough (Kingston), Derwent Valley, Light, Adelaide Plains, Mitchell, Unincorporated NT (Charles Darwin/East Arm) — are now included (they were wrongly dropped by the old ≥50%-of-LGA-area filter).
  • Drops extra-SUA satellites that GCCSA swept in — Sydney loses Central Coast, Melbourne loses Macedon Ranges (each its own ABS SUA). Councils ~133 → 137; suburbs ~2,556 → ~2,383.
  • The headline restricted-by-ring metric is unchanged (still GCCSA-scoped); this release re-scopes the council/suburb navigation, not the headline.

Fixed

  • per-lga-per-ring Darwin area (surfaced by). per_lga_ring computed parcel areas from geometry.area, but Darwin’s strata placeholders carry a fake ~50 m² circle geometry (real area is in lot_area_m2/PAR_AREA). added the all-strata fringe councils Litchfield + Unincorporated NT, which exposed it (per-ring area ~800 m² vs the real ~90,800). Now apportions the real lot_area_m2 by each parcel’s geometry fraction — a no-op for the real-geometry polygon cities (SA/ACT/TAS/QLD/WA), and now consistent with by-lga for Darwin.

Internal

  • New — single source of truth for SUA membership (in_sua_mask, sua_council_codes, sua_polygon), replacing the duplicated _lgas_in_gccsa / _lgas_in_sua / _filter_lgas_to_sua filters.
  • Pipeline efficiencies: per-stage wall-clock timing in the combiner, YIMBY_SKIP_SENSITIVITY=1 flag (mirrors YIMBY_SKIP_POLYGONS for iterative regens), and dropped the always-empty no-data-low-density map layer.

0.9.0 - 2026-06-18

Changed

  • Brisbane capacity baseline → Greater Brisbane (5-council LSDM sum),. brisbane capacity_dwellings 119,300 → 397,400 — now the sum of all five Greater-Brisbane GCCSA councils’ SEQ LSDM 2021 additional-dwelling capacity from a single source (Brisbane 119,300 + Ipswich 112,400 + Logan 59,900 + Redland 35,500 + Moreton Bay 70,300), with a per_council_lsdm_2021 breakdown. This is a consistent net-additional construct (comparable to the other capitals’ baselines) and supersedes both the prior BCC-only 119,300 and the proposed BCC-SGS-197k × land-ratio extrapolation (~833,000, which mixed constructs and over-extrapolated the greenfield outer councils). Shifts Brisbane’s calibrated capacity floor + uplift (the baseline is added as the lower anchor); capacity README worked example updated to match.

0.8.0 - 2026-06-18

Added

  • Detached-only is now a standalone reported component. v0.6.0 added permits-only-detached as a 4th component of the restricted union but never emitted it on its own, so the frontend’s per-component 2×2 grid + detached spotlight had nothing to read. It now ships everywhere the other three components do: permits_only_detached_m2/_pct (+ _ex_rural) on the by-lga/sa2/sal rollups, a, and a <city>-permits-only-detached PMTiles layer. No number changes — purely surfacing the existing flag.
  • Per-control “no data” coverage. For each control, residential land that is not-otherwise-restricted but whose source input is absent is now surfaced (distinct from “present and permissive”), so the frontend can paint grey + render red│green│grey coverage bars. New <control>_no_data_m2/_pct rollup columns for all four controls + <city>-no-data-{low-density,heritage, detached-only} PMTiles layers (≤2-storey “no data” is the existing no-height-data layer). Source-absent per control: ≤2-storey = no published height limit (storeys NA); low-density = always zone-determined (grey = 0); heritage = no register ingested (Darwin only — synthesised from the HT zone); detached-only = (lga,zone) not in the audit, incl. all of Melbourne (a new permits_only_detached_known gpkg column threads the audit match-gate out of). Absence stays treated as not-restricted (the conservative floor is unchanged); empty grey buckets are expected and fine.

0.7.0 - 2026-06-17

Added

  • Darwin: City of Palmerston coverage — Darwin now includes the City of Palmerston council, which the cadastre-only rebuild silently dropped (the City of Darwin Cadastre layer is inner-Darwin only). now combines BOTH NT sources recorded in: the City of Darwin Cadastre (inner Darwin, carries TOWNP_ZONE) and the NT Parcels layer clipped to the City of Palmerston LGA — the latter carries geometry only, so it’s spatial-joined to the NT Town Planning Zone polygons to synthesise TOWNP_ZONE and derives PAR_AREA_M from AREA_HA. Merged to one uniform schema at the fetch layer, so is unchanged and the combiner’s LGA_2025 sjoin labels the new parcels City of Palmerston automatically. Darwin: ~20.6k → 32,381 residential lots (+~11.8k, almost all Low Density Residential), gaining a second council. Darwin’s low-density-ex-rural share rises ~11 pp (Palmerston is overwhelmingly LR); ≤2-storey +0.5 pp; heritage unchanged. Per-LGA, by-ring, suburb, lot-size and capacity outputs all gain the Palmerston rows.

0.6.0 - 2026-06-17

Changed

  • restricted is now a 4-way union — added permits-only-detached (a zone permits a detached house but no multi-dwelling form: dual-occ / townhouse / apartment) as the 4th restriction component alongside ≤2-storey, low-density, and heritage. Derived natively in R (ports the permission audit → 3-tier binarisation → house-but-no-multi, with each adapter’s zone reconciliation: NSW/QLD/WA per-(lga,zone) incl. the WA two-layer + the NSW SEPP exclusion; SA/TAS/NT/ACT state-wide). Baked through add_restriction_flags, so the gpkg, the 8.x by-ring CSVs, share/, capacity, and pt all pick it up consistently. The component is also a new permits_only_detached gpkg column. Melbourne stays 3-way (no typology prescriptions).
  • Dense-zone guardrail on permits-only-detached. The audit encodes “not specified” as n/s, which the typology convention treats as prohibited. That is correct for a genuine low-density zone, but inverts the flag for a zone that is multi-dwelling by definition whose multi-dwelling permissions the audit simply didn’t record — so a .TYP_DENSE_ZONES denylist prevents NSW R3/R4 (Medium/High Density Residential), MU1 (Mixed Use) and E1/E2/B1–B8 (commercial/mixed centres) from ever being flagged detached-only. Genuine low-density cases are kept (NSW R2 Low Density, R5 Large Lot, RU5 Village; every NT/QLD/SA/WA/ACT detached-only zone is already rural/low-density). Net effect: ~0 pp in every city — detached-only land is almost entirely already captured by low-density/≤2-storey, so the union adds definitional completeness + long-term robustness without moving the headline numbers, computed at source in R rather than bolted on downstream.

Fixed

  • Stale within-20km approval counts for Melbourne & Sydney. v0.5.0 moved the ring origins to the central stations (Flinders St / Central) but the *_within_20km columns were never regenerated against them — said Central/Flinders while the approvals rollup still reflected the pre-revert centres. This full regen reconciles the within_20km_cbd SA2 flag with the committed ring origins; Melbourne/Sydney count_within_20km (and the _per_1000_* ratios derived from it) shift by ~1–6% per FY. Deterministic distance-from-CBD flag, so the new values are the correct ones; no other city is affected.

0.5.0 - 2026-06-17

Typology methodology overhaul (Ethan-directed) + ring-origin correction. Full regen of + PMTiles.

Added

  • Three-tier typology reportingdiscretionary (a DA / merit assessment is required and may be refused) is now its own reported tier instead of conflated with prohibited, which had systematically understated WA (and a little NT/SA/TAS). Additive + backward-compatible: each typology keeps <t>_permitted_pct (yes+conditional) and gains <t>_with_consent_pct (discretionary); permissible = the sum, prohibited (no/n-s) = the remainder.
  • Detached-house-only metric in the house-everywhere-apartment-on-a-third finding (~1,042 km² across the 7 capitals).

Changed

  • WA two-layer typology join — Perth now joins on (council, LPS underlying zone) (the council Zoning-Table Multiple-Dwelling call, Layer 2) instead of the state R-Code site-area table (Layer 1), which had overstated apartments to 90%. Perth apartment = 22.2% by-right + 42.6% with-consent = 64.8% permissible (most WA councils permit apartments via a discretionary DA).
  • NSW secondary-dwelling SEPP override — the Housing SEPP permits a secondary dwelling (granny flat) with consent statewide wherever a house is permitted, overriding the LEP land-use table. Sydney secondary_dwelling 31.6% → 93.0%.
  • Sydney + Melbourne ring origins → central stations (revert) — Sydney to Central Station (was Martin Place), Melbourne re-aligned to its adapter’s Flinders St ruler (was the CBD grid centre). Every capital’s ring origin is now its central station/hub. Shifts all Sydney ring + cumulative (5/20 km) metrics.

0.4.0 - 2026-06-16

Data-correctness + coverage batch:– (per-city admissions), (Sydney SEPP height uplift), (typology surfaced across all land), plus a two-round adversarial output-validity review + a full pipeline audit that hardened the typology joins and the release guardrails. Full regen of all families + PMTiles from the SEPP-applied per-state outputs.

Added

  • Polygon map layer “residential, no height-limit data” — height-unknown residential parcels split out of non-restricted so the map stops colouring unknown-height land as confirmed-unrestricted (~131k parcels across the capitals).
  • Sydney SEPP (Housing) 2021 height overridesmax(LEP, SEPP) per parcel: Ch 5 TOD (22 m inside the TOD Sites Map) + Ch 6 LMRH (true street-network 400 m/800 m walking bands around 116 Town Centres + 59 Schedule 11 stations, R1–R4, minus bushfire/coastal/heritage; R3/R4 22/17.5 m, R1/R2 9.5 m). 126,609 parcels height-uplifted in metres; provenance (in_tod/lmrh_tier/sepp_height_m/ height_source/sepp_apartment_permitted) on; YIMBY_SYDNEY_LEP_ONLY=1 reproduces the LEP-only baseline. New deps osmnx/networkx. Capacity framing: of the 126,609, ~87k are R1/R2 parcels whose 9.5 m ceiling is storey-neutral (still 2 storeys after floor((9.5−1)/3.1)); the parcels that actually gain a storey number ~39.6k, and sepp_apartment_permitted (43,704) is the cleanest liberalisation measure — don’t read “126,609” as 126k parcels getting meaningfully taller.
  • Typology surfaced across all land — the permitted-typology rollup gains + grains and all 8 typologies (added boarding_house/retirement/aged_care); NSW unions the SEPP uplift. 7 of 8 capitals (Melbourne excluded — no VIC audit in). by-ring/by-city are metro-bounded (parcels within the city’s CITY_MAX_RING); by-sal/by-sa2/ by-lga cover all cadastre land.

Changed

  • Sydney: admit City of Parramatta Deferred Matter land as Mixed use, unknown height (; +0.49 km²).
  • Adelaide: add FC+UC strata/community-title subtypes to the DCDB filter (; +7.16 km²).
  • Perth: admit Commercial-family parcels carrying an R-Code as residential (; +629 parcels, +0.93 km²).

Fixed

  • Typology NSW LGA-name join (review) — 5 Sydney LGAs whose audit data existed but whose names had drifted (City_of_Sydney_LEP vs Sydney, Campbelltown (NSW) vs Campbelltown, Sutherland Shire vs Sutherland, Canterbury-Bankstown Local Environmental, Bayside (NSW)) were silently dropped, understating Sydney coverage. A shared _canon_lga reconciles both sides: Sydney per-parcel match 63% → 86% (~205k parcels recovered), house share 87% → 94%. A ⚠️ LOW-MATCH stderr warning now guards against future drift.
  • Typology by-ring cap binning (review) — replaced an np.clip that piled every beyond-cap parcel into one cap-ring row (Adelaide ring-70 was 50% of city area) with a .between(1, cap) filter, so each ring is a true 1 km annulus and by-city reflects the metro rather than the whole state.
  • Typology Brisbane coverage docs — corrected the README’s false claim that unmatched land is non-residential; Brisbane’s 47% reflects Logan/Moreton Bay/ Ipswich residential land keyed by precinct-suffixed audit rows the base-code cadastre can’t join (tracked for a follow-up; no fabricated precinct assignment).
  • Typology LMRH dual-occ/townhouse s.164 exclusions (audit) — the Sydney SEPP union granted dual-occ + townhouse to ~53k heritage/bushfire/coastal/ exclusion-map parcels the LMRH liberalisation excludes (apartment was already gated). The adapter now exports an exclusion-aware sepp_lmrh_permitted flag and the rollup gates dual-occ/townhouse on it, matching the apartment + height treatment.
  • Typology WA split R-Codes (audit) — _perth now collapses split codes (R20/40R40) to highest density before the join, mirroring; ~81k previously-dropped split-coded parcels now join, lifting Perth coverage.
  • Typology SA Neighbourhood zone (audit) — added the bare Neighbourhood zone (19,122 parcels / 168 km², Adelaide’s largest unmatched bucket) to SA.tsv⚠️ UNMATCHED-ZONE canary (the per-LGA warning skipped SA/TAS/WA/ACT/NT, hiding the SA + WA drops above), a per-city coverage-floor test, an all-cities-present test, a per-city ring-cap test, and a version-cut test that fails on an undated CHANGELOG.

0.3.0 - 2026-06-13

Two per-city coverage/correction fixes on top of 0.2.0, with a full regen of the gpkg-derived sub-stages + polygon PMTiles.

Changed

  • Sydney: count the Metropolitan Centre zone (SP5 — formerly B8, recoded under the 2022 Employment Zones reform; zero B8 polygons remain) as residential, bucketed Mixed use. +1.28 km² inner-ring residential land — ring-1 (CBD core) residential share 7.8% → 37.7%, ring-2 44.9% → 51.5%; Mixed-use share +12.2 pp (ring 1) / +6.6 pp (ring 2).

Fixed

  • Melbourne: exclude 7 manually-flagged erroneous / non-residential VicMap parcels by GeoPackage fid (, Ethan). −0.29 km² residential land, concentrated in rings 5/7/9/14 (the flagged lots are large).

0.2.0 - 2026-06-13

Data-correctness batch — 12 of the 13– issues. (Brisbane capacity — BCC Sustainable Growth Strategy 197k extrapolated to the SUA — is held back pending Ethan’s methodology validation, so the Brisbane capacity baseline stays at 119,300 SEQ LSDM in this release.)

Added

  • Perth Special Control Area — admit hand-curated residential Development-zone polygons (storeys unknown) + Special use parcels carrying an R-Code.
  • SA “Historic Area” heritage overlay — the Planning & Design Code area-wide control, routed to the Other Heritage Overlay bucket.
  • Hobart Particular Purpose Zone residential land via a manual overlay (Mixed Use, unknown height; +1,097 parcels).
  • Major-stadium exclusion — drop CBD stadiums (OSM leisure=stadium) from residential land across all capitals (; Melbourne’s Marvel is the only real removal — most majors sit on recreation zones).
  • Dataset semantic versioningVERSION + CHANGELOG +, surfaced in the site footer.

Changed

  • Melbourne: exclude business-only zones C2Z/B3Z/B4Z; gate UGZ greenfield against the FUS land-use layer (10% coverage, −183.9 km²); drop the Docklands-bay + Flinders-St non-residential overlay.
  • SA: zone-category buckets (Golf Course Estate, Home Industry, Strategic Innovation, Urban Neighbourhood) + Urban Corridor storeys; Strategic Innovation flipped to residential. Widen the DCDB parcel filter to FL/UN/TA with a strata footprint dedup (+21.9 km²). Golf Course Estate + Home Industry also flagged low_density (Ethan,).
  • Brisbane: exclude Emerging Community by default, re-include only the Neighbourhood-Plan precincts.

Fixed

  • (none — this batch is methodology/coverage corrections.)

0.1.0 - 2026-06-12

Baseline release — the dataset as published for the federal-launch site. First version under semantic versioning; every subsequent data change is tracked against this point.

  • Per-km-ring restricted / height-capped / heritage shares for all eight capital cities, built from raw cadastre via the adapters into the combiner.
  • Published capacity baselines, headline stats (5 km / 20 km cumulative averages), suburb / SA2 / LGA rollups, and the polygon PMTiles family.
  • Parcels-area denominators throughout; km_ring 1-indexed; wide-format X.Y files derived from the canonical 8.x long-form by construction.

Citation

How to cite a specific snapshot

Cite the snapshot date alongside the dataset name. Example: Australian Zoning Atlas (snapshot 23 July 2026). Numbers quoted may have shifted in later snapshots.

Timeline

Everything that’s changed

Data releases and site changes in one list, newest first. Each entry is tagged— Data for a pipeline release that moves the numbers, and Feature / Methodology / Fix for changes to the site itself. The latest of each is flagged so you can see what the live data and the live site currently reflect.

  1. Fix Latest site The menu on phones was unusable. Every section listed all of its sub-pages at once, so the panel ran well past the bottom of the screen—and because it hangs off a header pinned to the top, dragging it scrolled the page behind rather than the menu. Sections now collapse behind a chevron (six rows instead of twenty-two, with whichever section you’re currently in already open), and the panel scrolls within whatever screen height is left.
  2. Fix Follow-up to yesterday’s zoning-legend fix, now complete. The remaining Melbourne codes (Development Zone, Precinct Zone, Special Use Zone, Urban Growth Zone, Commercial 1 Zone) show their full names too, and every city’s zone names are now read live from the same backend source as their density classification, rather than a hand-maintained copy on our end—one less place for the two to drift apart. Also corrected along the way: Sydney’s E2 zone was showing as “Environmental Conservation,” its name before a 2021 state planning reform repurposed the E-zone codes for commercial and employment use; it now correctly reads “Commercial Centre.”
  3. Fix Two fixes to the detailed zoning map’s legend. Melbourne’s legend previously showed only bare planning-scheme codes (LDRZ, NRZ1, GRZ7, and so on) with no readable name; it now shows each zone’s full name. Victoria’s codes are a base zone plus a numbered schedule—GRZ1 through GRZ15 are all “General Residential Zone,” not fifteen different zones—so codes sharing one name now collapse into a single legend row rather than repeating it. Canberra’s legend was showing every code twice, e.g. “Suburban (RZ1) (RZ1)”; it now reads “Suburban (RZ1).” A handful of Melbourne codes (Development Zone, Precinct Zone, Special Use Zone, Urban Growth Zone, Commercial 1 Zone) still show as a bare code pending a data-quality fix upstream.
  4. Data Latest data Data v1.9.2—the follow-up flagged in v1.9.1 below. Melbourne’s roughly 105 zone codes now each carry a proper density classification, so the detailed zoning map shows its full colour ladder instead of reading mostly grey. This is a map-colour completion only—it doesn’t touch the highly-restricted/open split behind the headline numbers, which is computed separately, so no city’s figures move.
  5. Data Data v1.9.1—no city’s numbers move. Two fixes, both under the hood. First, Melbourne’s detailed zoning map had been quietly reading a shapefile orphaned since a June rewrite of our Melbourne pipeline—it was still showing only 6 coarse zone groups where every other city shows real zone codes, and it never picked up Housing Choice and Transport or Precinct Zone at all. It’s now reading the current data (176 zone polygons, up from 12), though most of those codes don’t have a density classification yet, so the map will read mostly grey until that follow-up lands. Second, we corrected how a few of v1.8.0’s city-by-city moves were labelled: Canberra, Hobart, Perth and Sydney’s refreshes are now correctly tagged as our own data catching up to an already-current reality, not a new change in the law—matching the wording already used in the Findings post, now backed by the same tag in the full version history below.
  6. Data Data v1.9.0—a real policy change in Melbourne, not a correction. The Victorian Government gazetted Amendment GC285 today: Stage 2 of the Train and Tram Zone Activity Centres Program, rezoning nine activity-centre clusters across six councils—Boroondara, Glen Eira, Greater Dandenong, Kingston, Stonnington and Whitehorse, including the Chapel Street/Prahran centre—to a housing-choice-and-transport zone with a materially looser height allowance than whatever applied before. Melbourne’s highly-restricted share within 20km eases from 44.41% to 42.99%, a 1.4-point drop—land that used to read as capped at two storeys or low-density-only now correctly reads as open. No other city moved.
  7. Data Data v1.8.0—a routine data-currency refresh across every city, triggered by a South Australian Planning & Design Code amendment going live in late June. Rather than refresh Adelaide alone, we checked every city’s zoning, height and heritage sources against the state and territory governments’ live services—a housekeeping pass, not a re-survey of land; parcel and cadastre boundaries were untouched. Every city’s highly-restricted share within 20km moved by less than six-tenths of a percentage point: Perth eased the most, 87.06% to 86.47%, as refreshed density-zoning and height data read more land as permitting more than two storeys than our previous copy did; Adelaide’s real Code Amendments and Melbourne’s Suburban Rail Loop-driven rezoning each eased their city by a few tenths of a point; Sydney, Hobart and Canberra moved by even less; Brisbane and Darwin are unchanged. Melbourne’s refresh also brought a new zone, Precinct Zone (~15 km² across Whitehorse, Monash, Kingston and Bayside), into our per-suburb tables, restoring Notting Hill, Victoria. Full city-by-city detail is in the Findings post, “What we’ve fixed since launch, and why.”
  8. Data Data v1.4.0–v1.7.0—five small post-launch corrections, all in Sydney and Brisbane, none of which move the national picture. In Sydney, about 3,850 low-density lots inside operative Transport Oriented Development precincts—Bankstown, Kellyville, Macquarie Park—no longer count as restricted, because those blocks already carry an apartment-and-height uplift; Sydney’s highly-restricted share eases about 0.4 of a point within 20km. In Brisbane, the Priority Development Area re-add is now clipped against non-residential base zones, so land like the Royal Queensland Golf Club—74.5 hectares of open space that had been showing as unrestricted residential—is correctly excluded, nudging Brisbane’s highly-restricted share up about half a point within 20km. New alongside the headline is a Sydney-only Floor Space Ratio measure, which flags land that’s yield-capped even where height isn’t the binding limit. The city maps were rebaked to match. The story behind each fix is written up in the Findings post, “What we’ve fixed since launch, and why.”
  9. Feature This changelog now opens with a metric-history grid: every capital’s highly-restricted share plotted release to release across the dataset’s whole history, on the same 20km basis the site headlines. It makes the shape of the data’s evolution visible at a glance—almost every move is the measurement getting more precise, not the world changing, with the one real-world reform (the ACT Missing Middle) standing out as the single green step—the one move that made zoning more permissive. The full set of all five restriction controls is under Methodology › Metric history.
  10. Data Data v1.3.1—a small Sydney height correction. Where two of Sydney’s building-height overlays genuinely overlap—about 1.85 km², mostly amendment layers stacked over a base limit in the inner suburbs and CBD—the height that applies is now read as the more permissive of the two, rather than the stricter. They’re two versions of the same control, not two limits binding at once. Only Sydney’s height-based numbers move, and barely: Greater Sydney’s highly-restricted share rounds from 86.9% to 86.8%, with slightly larger shifts—up to about 0.2 of a point—in the inner rings where these overlays stack. Low-density, heritage, and detached-only controls, and every other city, are unchanged.
  11. Data Data v1.3.0—coverage and classification refinements since the 1.0 release. Perth’s heritage picture is now more complete: the WA Heritage List—individually listed local heritage places, which needn’t fall inside a designated heritage area—had been missed, leaving 5,672 Perth parcels unflagged. Adding it lifts Perth’s heritage share from about 0.9% to 1.7%, and its highly-restricted share by about a fifth of a point. Perth’s parcel base also moved to the current PlanWA property-interest cadastre—about 3% more residential lots over essentially the same land—with every published share shifting less than a third of a point. In Sydney, a scoping correction: the state’s dual-occupancy reform (two dwellings on one lot) applies right across the metro, not only near transit as the data had assumed, so Sydney’s detached-only share—land where only a single detached house is permitted—falls about 4 points within 20km. The headline highly-restricted figure doesn’t move, because that land already counted as low-density. South Australia’s parcel cadastre was also refreshed, with no meaningful effect.
  12. Data Data v1.0.0—the dataset’s first stable release, and a cumulative jump from v0.24.0. The 1.0 marker signals a publicly stable dataset, not a change of method. Folded into it are four residential-land classification fixes, three of which move published numbers. The largest is in Sydney: land zoned “Environmental Living” (the C4 zone—established bushland suburbs that sit inside the metropolitan footprint) had been filtered out as rural large-lot, and is now correctly counted as metropolitan residential. Roughly 172 km² of it—almost all low-density, almost all restricted—enters Greater Sydney’s denominator, lifting its highly-restricted share by about 3 points and its low-density share by nearly 5, while easing its two-storey-cap share (that bushland mostly carries no published height limit, so it enlarges the base without adding to the two-storey count). Brisbane eases about half a point as its Priority Development Areas—state-led urban-renewal precincts, like Bowen Hills and Woolloongabba, that override the base zone to enable substantial housing—are added back. Melbourne is essentially unchanged. On the city maps, residential land with no published height limit now shows as open rather than grey by default: it’s among the least-restricted land, so greying it out overstated restriction—the “no published limit” caveat stays available as a toggle.
  13. Feature Methodology now has its own menu in the navbar—Overview, Data inputs, Assumptions, Code & mechanics, and the Glossary in one dropdown—so the rebuilt methodology pages are reachable in a single hop. Under the hood, the primary navigation can now be edited in the CMS like the footer links already could.
  14. Methodology The methodology section was rebuilt into a plain-language, four-page family: an Overview, plus dedicated Data inputs (where every number comes from, state by state), Assumptions (every modelling choice with its direction of bias), and a Code & mechanics appendix. Assumptions moved from /about/assumptions to /about/methodology/assumptions (the old link redirects). Every page is now CMS-editable—the prose is managed in the Studio with an in-repo fallback, so the four controls behind the “highly restricted” headline (no more than 2 storeys, detached-only, low-density, heritage) are explained consistently end to end.
  15. Feature Each control’s restriction map now reads as a clean two-colour split. On the 2-storey, low-density, heritage and detached-only maps, the green is now that control’s OWN complement—land where more than two storeys, denser-than-low-density housing, no heritage overlay, or more than a detached house is permitted—so red and green tile the residential land by that single control exactly and match the red/green coverage bar beneath each map. Previously the green showed the narrower “open on every control” land, which left much of the denser-allowed land unpainted (the low-density map in particular drew almost no green). The complements render at full lot level as you zoom in. The footer now shows Data v0.26.0.
  16. Data Data v0.24.0—a cumulative jump from v0.12.0. The biggest shift for readers is scope: the “Significant Urban Area” is now the canonical full-metro extent, so the whole-of-metro figure sitting beneath each city’s 20km headline—and every per-control section (highly-restricted, low-density, heritage, the two-storey cap, detached-only)—now reads a true Significant-Urban-Area cumulative rather than the old ring-sum proxy, giving an honest contrast against the 20km number. Along the way the data corrected several long-standing distortions: Melbourne now clips to the Greater Melbourne boundary and gained housing-typology classification (its detached-only metrics fill in to parity with the other seven capitals), Perth’s rural-residential land is excluded from the metropolitan low-density count, Darwin is treated as having no rapid transit, Brisbane’s three-storey LMR uplift propagates across whole strata schemes, and reform uplift now excludes heritage parcels at exact parcel grain. The detailed-zoning map was rebuilt too—heritage renders as the geometric intersection with the overlay extent rather than whole zone polygons, statewide-source cities clip to their metro boundaries, and new complement map layers (the over-two-storey footprint and a non-heritage wash) shipped live in the tiles. The footer now shows Data v0.24.0.
  17. Fix The homepage scrollytelling now fits every viewport. Before, the sticky visuals—the eight-city bar chart, the city-grid maps with their eight-row ranking strips, and the image cards—overflowed and got clipped on short laptops, cutting off the bottom city rows and the tops of maps. Now every visual scales as a whole to fit both the height and width of the screen, never upscaling beyond its natural size and re-fitting on resize, so charts, maps, legends and ranking lists always land fully on screen. The visuals also sit clear of the site header instead of centring behind it, and their drop-shadow no longer gets sheared off at the edge. Verified across a range of laptop and desktop resolutions for every story step.
  18. Data Data v0.12.0—a Brisbane + Melbourne refinement, cumulative from v0.10.0. Brisbane’s Low–Medium Density Residential lots now lift from two storeys to three where they meet City Plan’s transit condition—within 400m walking distance of a rail or busway station and fronting a road reserve at least 15.5m wide—so the share of Brisbane capped at no more than 2 storeys eases (within 5km, 75.6% → 72.2%). A knock-on: Brisbane is no longer the most transit-restricted capital—unlocking that near-station land drops its transit-proximate restricted share just below Adelaide’s, so Adelaide (≈84%) now leads that ranking and the homepage’s rapid-transit spotlight features it. Melbourne’s Housing Choice and Transport Zone is now split into its HCTZ1 and HCTZ2 height schedules (lot-size and frontage dependent), refining Melbourne’s height and reform-capacity figures—its restriction shares are unchanged. Also folded in: precinct-granular residential typology across all five Greater Brisbane councils, and NSW Accelerated TOD precinct tagging in Sydney. The footer now shows Data v0.12.0.
  19. Data Data v0.10.0—a reconciling release. Council membership is now correct on the city fringe: every suburb’s parent council resolves to a real council page, so suburbs on the outer edge link back to where they actually sit. Seventeen Hobart suburbs—Blackmans Bay, Bonnet Hill and the like—sit in Kingborough, which (along with Derwent Valley and Sorell) is now part of Hobart’s council list rather than an off-map name; their pages previously printed the council as plain text to avoid a dead link, and now link through. Each city page also gains a data-coverage bar beneath its chart-and-map sections—a red/green/grey strip showing how each control divides that city’s residential land: restricted, not restricted, or no published limit (the conservative-floor land we keep in the denominator but never count as restricted). On the homepage, the spotlight maps now carry a compact legend overlay reading the same split. The footer now shows Data v0.10.0.
  20. Data Data v0.9.0—a cumulative jump from v0.3.0. The headline definition of “highly restricted” is now a four-way union: alongside 2-storey caps, low-density-only zoning, and heritage, it counts land that permits only detached dwellings. In practice that fourth control is almost entirely already low-density or two-storey, so the headline shares barely move—it completes the definition rather than changing the number. Darwin now includes the City of Palmerston (a new council page; Darwin’s low-density share rises about 11 points as the cadastre extends beyond the inner city). Brisbane’s reform-capacity baseline is corrected to a Greater Brisbane five-council sum. Maps gained two things: a per-component spotlight for the new detached-only control, and a grey “no data” layer showing where a control simply isn’t recorded for a parcel (Melbourne, for instance, has no detached-only data, so that map reads grey). The footer now shows Data v0.9.0.
  21. Feature Restriction maps now read in full colour. Beneath the red highly-restricted land, every map paints a green “open residential” underlay—so you can see what’s open as well as what’s locked, rather than red floating on a bare basemap. The headline-radius ring around each city is drawn solid (a few captions and the legend had described it as dashed, which no longer matched the map). A grey layer for residential land with no published control data is still to come—it needs a new field from the upstream pipeline before we can draw it honestly.
  22. Data Data v0.3.0—two targeted corrections in Sydney and Melbourne; the other six capitals are unchanged from v0.2.0. The bigger one is Sydney’s CBD core: land in the Metropolitan Centre zone (the SP5 code that replaced the old B8 business zone in the 2022 Employment Zones reform) now counts as residential, lifting the residential share of the innermost ring from 7.8% to 37.7% and adding about 1.3 km² of inner-ring residential land. Sydney’s 5 km restriction shares ease by a point or two as a result (2-storey 46.1% → 44.0%). Melbourne drops seven mistakenly-included parcels, trimming 0.29 km² with no meaningful effect on its headline figures. The footer now reads Data v0.3.0.
  23. Fix Maps caught up with the new tiles. The detailed zoning map now colours actual planning-scheme zone codes—every code in every capital assessed like-for-like and bucketed onto the same restrictiveness ladder (Perth’s R-code ladder now splits properly from R2 through R160; Sydney’s R1–R5, Canberra’s RZ1–RZ5/CZ codes, Adelaide’s P&D Code zones, and Brisbane’s City Plan codes all map per scheme, since the same code can mean different things in different states). A test now guarantees every zone shipped in the tiles has a colour, so future data updates can’t silently grey the map. Council and suburb maps also frame deterministically off their own boundary geometry instead of waiting on tile arrival—no more cropped or mis-zoomed viewports—and suburb maps gained the smooth low-zoom→parcel handoff council maps already had. Verified with rendered screenshots of all eight capitals.
  24. Data Data v0.2.0—a twelve-issue correctness batch from the upstream pipeline, now reflected site-wide. The biggest movement is Melbourne: commercial zones (C2Z/B3Z/B4Z) no longer count as residential, and Urban Growth Zone land only counts where the underlying land use is actually residential—together trimming Melbourne’s residential footprint by about 200 km² and its modelled reform capacity by roughly 13%. Brisbane’s Emerging Community zones are now excluded outside named precincts (−2.3% reform capacity). Perth gains a “Special Control Area” zoning category and admits Special-Use-with-R-Code land; Adelaide’s Historic Area overlays now appear in the heritage breakdown (about a quarter of inner-ring heritage) alongside zone re-buckets and strata-corrected parcels (+21.9 km²); Hobart picks up Particular Purpose Zone residential land; and major stadiums are excluded everywhere. Headline restriction shares barely move—these are classification corrections at the margins, not methodology changes. The footer now shows the dataset version (v0.2.0) with a link to the upstream changelog.
  25. Feature The CMS is live, and the site’s data-independent prose now lives there. Sanity Studio (at /admin, for editors) now manages the About page, the homepage hero, the FAQ, the long-form reform explainers on /reforms, city-page narratives, and the site’s canonical contact address—which /contact and /press now share, so they can’t drift apart. Studio bodies support rich text, tables, and captioned images, rendered in the site’s house style. Pages with data-wired prose (methodology, assumptions, the research deep-dives, the evidence pages) stay in the repository where their numbers are computed. Publishing in Studio triggers a site rebuild, so edits go live in minutes. A side-effect fix: the reform explainers previously rendered their bold markers as literal asterisks—they’re real emphasis now.
  26. Fix Site-wide copy edit. A full editorial pass over every reader-facing page outside the homepage story—methodology, FAQ, reforms, the research deep-dives, comparisons, and the council/suburb/SA2 templates—tightening machine-drafted prose to the site’s house voice. No number, finding, or caveat changed: wording only, with every edit logged before/after in the repo. Along the way we fixed real rendering bugs: doubled page titles on four pages (“…—Australian Zoning Atlas—Australian Zoning Atlas”), stray spaces inside statistics (“α= 0.85”, “12.8 %”) caused by template line breaks, mid-word broken hyphens (“income- driven”), and a handful of sentences that said the opposite of their own charts—“rollback compresses constraints”, a council reform caption describing the removal (rather than the granting) of an 8-storey allowance, and a research heading that placed peak fertility in the inner ring.
  27. Methodology Every restriction-share number on the site now divides by the same denominator. The headline “highly restricted” figure has always excluded rural-residential land (it’s neither buildable-up land nor a fair denominator), but the component shares—2-storey, low-density-only, heritage—were still measured against all residential land. Where a component sat beside the union that contains it, the two were on different bases, which let a component read larger than the union: Hobart (53% rural-residential) showed 2-storey at 99% above a “highly restricted” headline of 98%. Backend now ships every component on the ex-rural basis, and we’ve switched all of them across the site—city pages, rankings, SA2 / council / suburb pages, the choropleth, the compare tool, and the embeds—so “highly restricted ≥ each component” holds everywhere (verified across 12,078 area comparisons). Hobart now reads 2-storey 97.5% under a 97.9% union. We also dropped the rural-residential overlay from the low-density map (it contradicted the now-rural-excluded metric) and corrected the methodology pages, which still described several now-shipped pieces—the reform-uplift matrix, lot-by-lot capacity, the confirmed Melbourne baseline, the SUA scope—as “about to change”.
  28. Feature Reform uplift now reads down to the council. The backend reform-uplift matrix (net additional homes each reform legalises over today’s controls, scored lot-by-lot, whole-metro) landed at LGA grain, so every council page now carries a “How much could this council build under reform?” card, and Comparisons gains a national “Which councils unlock the most?” leaderboard for the Townhouse Code and Mid-rise-everywhere reforms. Per-council figures come straight from the same matrix the headline reform numbers use—no more prorated per-hectare estimate. Melbourne’s zoned-capacity baseline was also restored to its original collation value; its “potential dwellings increase” moves accordingly. We relabelled the “greenfield” lot-size figure throughout as the UDIA average (the median new-estate lot), not a regulatory floor—it’s a benchmark we compare built and regulated lots against, not a minimum below which estates can’t subdivide. The About menu now lists Assumptions and drops Press.
  29. Data Re-ingested the backend, and Darwin’s lot cadastre landed. Built from the NT land-titles cadastre (20,588 residential lots, median ~817 m²), Darwin is now a full parcel city—it runs the per-ring lot metrics, lot-by-lot, frontage and reform-uplift like every other capital (the ~16% dense-strata placeholder lots sit out the geometry-dependent stages but still count for area, count and zoning). Canberra (ACT) is now the only capital without per-distance-ring lot breakdowns. We also surfaced a new lot-size dataset—the actual median existing lot in each city (Melbourne 506 m² up to Darwin 817 m²), distinct from the UDIA greenfield average—on the minimum-lot-size page, the data inventory, and as a “median lot” tile on every suburb and council page.
  30. Data Flagged Darwin’s lot cadastre as in-motion across the About explainer pages. Darwin’s planning data is still zone-level on the live site, so it sits out the per-parcel lot-by-lot, frontage and reform-uplift metrics—aggregate min-lot stats still ship. Upstream, an interim parcel build has landed (backend) and a full-cadastre rebuild is underway that supersedes it; Darwin’s lot-level figures will update on the next data re-ingest. The caveat is sourced once from the city-profile module and surfaces on both the Data and Methodology pages.
  31. Methodology Clarified how unknown building heights are handled. Residential land with no published height limit is kept in the denominator but counted as NOT height-capped (as if it permits more than two storeys), so the 2-storey share and the headline restricted figure are a conservative floor—they under-count restriction wherever height data is sparse (notably WA and the Darwin core), never over-count it. A known-height-only variant that reads higher stays on /data. Spelled out on the methodology glossary.
  32. Feature Added a “two denominators” panel to the zoning-blocks-housing evidence page. Approvals per km² stays the headline; approvals per 1,000 existing dwellings now ship alongside as a co-equal robustness companion (top-vs-bottom-bucket gap -52% vs -26%; pooled Poisson -10.2% vs -4.4% per +10pp low-density). Dividing by existing dwelling stock runs milder because the stock is itself downstream of decades of the same zoning—the divergence is part of the evidence, not a contradiction.
  33. Methodology Standardised the “restricted suburbs approve fewer homes” gap on the conservative figure everywhere—the mean of the five annual bucket drops (~52%)—rather than the pooled five-year-mean method (~66%). The home page previously led with 66% while the evidence page said 52%; both now derive from one source, and the larger pooled figure is shown only as a clearly-labelled alternative.
  34. Data Revived Victorian/NSW/SA sale-price data (Valuer-General overlay) across the suburb + council market data and the price-based findings. Prices appear in the findings and methodology/experimental context only—they remain deliberately off the council, suburb, and SA2 detail pages.
  35. Methodology Low-density narrowed: rural-living zones excluded (YIMBY-101-Data /). NSW RU5 + C4, QLD RR, VIC LDRZ, SA Rural Living / Neighbourhood / Settlement / Shack Settlement, TAS Rural Living, NT RL + RR were previously counted as low-density but cover rural-residential land, not the suburban single-dwelling-only land the metric is meant to capture. Brisbane low-density @ 20km: 68.0% → 48.2% (Δ-19.8pt—QLD RR was a big chunk). Sydney: 70.4% → 66.3% (Δ-4.1pt). Other cities unchanged. Union-restricted unchanged because rural land was also caught by the 2-storey cap.
  36. Data Zoned-capacity outputs landed (backend). Per-ring, per-LGA, and per-SAL dwelling-uplift estimates under 3-storey townhouse and 8-storey mid-rise scenarios, plus an annual-flow translation (~1%/yr central, 0.7%/yr low) sourced from California/Auckland/NYC natural experiments. Calibrated to published state-government baselines for 5 cities; Sydney + Melbourne + Darwin ship uncalibrated. 4–7 storey scenarios deliberately excluded—they fall in the infeasibility gap between walk-up townhouse and lift-served apartment.
  37. Methodology Low-density-only redefined per Ethan’s Appendix 1—per-state zone lists rather than a one-size-fits-all keyword match. Adelaide 5km: 35% → 57%, Hobart 5km: 7% → 14%, Sydney 5km: 24% → 26%. Melbourne and Canberra unchanged. The broader Adelaide definition adds 8 detailed neighbourhood zones; Hobart adds Village + Rural Living + Future Urban; Sydney adds R5 + RU5 + C4.
  38. Methodology PT proximity now leads with share_restricted_in_pt—the fraction of land within 800m of rapid transit that is restricted, rather than the legacy fraction of restricted land that happens to sit near transit. Both numbers stay in the API; the canonical framing is the policy-relevant one (how much amenity-rich land is locked up).
  39. Data Rapid-transit stops switched from OSM all-modes to a GTFS mean-headway filter (buses qualify at ≤15 min mean headway across the weekday 7am-7pm window, with a rail / tram / ferry fallback for cities without a public feed). Hobart drops to zero rapid stops; bus-heavy networks (Canberra, Darwin) shrink as expected.
  40. Data WA pipeline migrated to parcels-area-based (matching every other state). Adelaide CBD landmark corrected; numbers shifted accordingly.
  41. Feature Rebranded to Australian Zoning Atlas; switched typography to Space Grotesk.
  42. Feature Rankings now toggle between 5km / 10km / 20km / 30km radii.
  43. Feature /councils/[code] gained per-LGA ring charts; SAL ↔ LGA cross-linking.
  44. Feature PT proximity map shipped (stops + 800m buffer + restricted-near-PT overlay).
  45. Methodology Heritage metric now sourced directly from upstream heritage-all instead of derived 2.1 × 1.2.
  46. Data ACT + NT per-SAL polygon coverage repaired (Canberra 5 → 106 SALs; Darwin 2 → 62 SALs).
  47. Methodology Maps now show a dashed 20km radius overlay matching the headline scope.