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"
# Gaston County, NC
County jurisdiction.
County jurisdiction — 3 officeholders mapped.
## Demographics (ACS 2023)
@@ -0,0 +1,39 @@
---
type: Person
title: "Jim Hefferan"
description: "Mayor, Belmont, NC"
role: "Mayor, Belmont, NC"
level: "municipal"
branch: "executive"
state: "NC"
tenure:
start: "2026-06-20"
current: true
ids:
person: "73952646-40c9-4cfa-915d-f5d9d95bf092"
office: "c49f754a-ab42-41af-880e-eb10baf75d93"
tenure: "af1f72f1-1b1a-412a-8cd0-ff6254212d09"
jurisdiction: "19c8ef82-a194-4275-9c03-f005304aff27"
sources:
- field: office
source: "Wikidata"
- field: tenure
source: "Wikidata"
- field: jurisdiction
source: "Census TIGER 2024"
confidence: official
tags: [officeholder, municipal, executive, nc]
timestamp: "2026-07-04"
---
# Jim Hefferan
Current Mayor, Belmont, NC.
## 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: "Richard Franks"
description: "Mayor, Gastonia, NC"
role: "Mayor, Gastonia, NC"
level: "municipal"
branch: "executive"
state: "NC"
tenure:
start: "2023-01-01"
current: true
ids:
person: "561a66a6-55c5-474b-a012-133ab5c5c81c"
office: "7384c637-48a2-4a83-ac24-5d035945597b"
tenure: "f53418b3-6d8d-4f89-ad5d-38a30a731adc"
jurisdiction: "4ddf45ae-7874-409a-802c-377c1c6ced5c"
sources:
- field: office
source: "Wikidata"
- field: tenure
source: "Wikidata"
- field: jurisdiction
source: "Census TIGER 2024"
confidence: official
tags: [officeholder, municipal, executive, nc]
timestamp: "2026-07-04"
---
# Richard Franks
Current Mayor, Gastonia, NC.
## 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: "Cathy Kirkland"
description: "Mayor, Stanley, NC"
role: "Mayor, Stanley, NC"
level: "municipal"
branch: "executive"
state: "NC"
tenure:
start: "2024-08-13"
current: true
ids:
person: "4c960889-db85-46d6-891b-9470703b086e"
office: "19ee8b8f-3f98-4273-af1d-f3dd738355bb"
tenure: "af8e0ca4-7155-4b7a-8924-c3de3fe2bc57"
jurisdiction: "8aac706f-2507-451d-99c9-2cf9ebbea93c"
sources:
- field: office
source: "Wikidata"
- field: tenure
source: "Wikidata"
- field: jurisdiction
source: "Census TIGER 2024"
confidence: official
tags: [officeholder, municipal, executive, nc]
timestamp: "2026-07-04"
---
# Cathy Kirkland
Current Mayor, Stanley, NC.
## Sources
- office: Wikidata
- tenure: Wikidata
- jurisdiction: Census TIGER 2024
Generated from the Atlas officeholders v3 export (2026-07-04).