Municipals: nest 1,823 city officeholders under their real counties

Pull Atlas's place→county crosswalk (Census TIGER 2024 places × county
geometries, 32,041 places) into the build as a committed raw input, and
use it to resolve municipal officeholders whose county was unknown.

- data/place_county_crosswalk.jsonl — new raw input (place_geoid → county_geoid)
- build.py — place-name+state → county_geoid → ACS county slug as a fallback
  in county_slug(); city_slug() generalized to non-FL bare place labels
- data/sources/sources.yaml — provenance entry for the crosswalk

_unresolved municipals: 1919 → 58. The remainder are genuine: CT planning
regions (post-county), county-level rows mislabeled municipal upstream,
consolidated city-counties (null label), Wikidata-QID placeholder names,
and ambiguous same-name places — left unresolved rather than guessed.

Join key is county_geoid (5-digit FIPS); the directory slug is taken from
the ACS county node so municipals nest under the exact existing county dir.
Deterministic (byte-identical rebuild); validate.py passes 19,721 records.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Fabio
2026-07-04 20:23:57 -04:00
parent ad7607856d
commit 199d8b37d3
2893 changed files with 33094 additions and 995 deletions
@@ -32,7 +32,7 @@ timestamp: "2026-07-03"
# Wood County, OH
County jurisdiction.
County jurisdiction — 3 officeholders mapped.
## Demographics (ACS 2023)
@@ -0,0 +1,39 @@
---
type: Person
title: "Mike Aspacher"
description: "Mayor, Bowling Green, OH"
role: "Mayor, Bowling Green, OH"
level: "municipal"
branch: "executive"
state: "OH"
tenure:
start: "2020-01-01"
current: true
ids:
person: "91191bb3-8a4c-409b-83d1-f1a22b4dbadd"
office: "0dfaa6e0-a6e8-45bb-8d83-4ffdb923b4e2"
tenure: "8830a7bb-3227-43be-b87f-75cf4c8e12be"
jurisdiction: "03f2cd68-f518-4e7f-a0fc-c1fc13ec1ee9"
sources:
- field: office
source: "Wikidata"
- field: tenure
source: "Wikidata"
- field: jurisdiction
source: "Census TIGER 2024"
confidence: official
tags: [officeholder, municipal, executive, oh]
timestamp: "2026-07-04"
---
# Mike Aspacher
Current Mayor, Bowling Green, OH.
## Sources
- office: Wikidata
- tenure: Wikidata
- jurisdiction: Census TIGER 2024
Generated from the Atlas officeholders v3 export (2026-07-04).
@@ -0,0 +1,39 @@
---
type: Person
title: "Tom Mackin"
description: "Mayor, Perrysburg, OH"
role: "Mayor, Perrysburg, OH"
level: "municipal"
branch: "executive"
state: "OH"
tenure:
start: "2026-06-20"
current: true
ids:
person: "f91541e0-94b7-40d7-8059-0799cb2a3180"
office: "9537657f-6693-49b4-a229-d766ea5523a0"
tenure: "9a9c6717-2542-42f8-a209-77c6b2d96083"
jurisdiction: "2436f52c-44b5-4263-ae88-a517d5ad2cbd"
sources:
- field: office
source: "Wikidata"
- field: tenure
source: "Wikidata"
- field: jurisdiction
source: "Census TIGER 2024"
confidence: official
tags: [officeholder, municipal, executive, oh]
timestamp: "2026-07-04"
---
# Tom Mackin
Current Mayor, Perrysburg, OH.
## Sources
- office: Wikidata
- tenure: Wikidata
- jurisdiction: Census TIGER 2024
Generated from the Atlas officeholders v3 export (2026-07-04).
@@ -0,0 +1,39 @@
---
type: Person
title: "Neil A. MacKinnon III"
description: "Mayor, Rossford, OH"
role: "Mayor, Rossford, OH"
level: "municipal"
branch: "executive"
state: "OH"
tenure:
start: "2026-06-20"
current: true
ids:
person: "3c24e36d-db00-438c-ac32-9ec0b2e46adb"
office: "6dd1d9a0-bba7-4585-ba93-4b96740c46a9"
tenure: "5845175b-65dd-40e8-9bfa-c7ae6a9faf62"
jurisdiction: "9f5efafd-4f9a-454a-a0aa-9d7b18338f47"
sources:
- field: office
source: "Wikidata"
- field: tenure
source: "Wikidata"
- field: jurisdiction
source: "Census TIGER 2024"
confidence: official
tags: [officeholder, municipal, executive, oh]
timestamp: "2026-07-04"
---
# Neil A. MacKinnon III
Current Mayor, Rossford, OH.
## Sources
- office: Wikidata
- tenure: Wikidata
- jurisdiction: Census TIGER 2024
Generated from the Atlas officeholders v3 export (2026-07-04).