Sync: officeholders v3 — fresh export from live Atlas DB (13,329 tenures)

Re-exported directly from Postgres (10.0.0.116), not Atlas's introspection,
which under-reported the roster (its v3 export had 11,473, missing the
restored Florida League of Cities municipal set). Live DB current tenures:
state 7,561 · municipal 4,009 · county 1,217 · federal 542.

- build.py now reads officeholders-v3.jsonl (was v2); dataset vintage 2026-07-04
- fixed one corrupt start_date at source-export (21021-12-03 -> 2021-12-03,
  Lorraine Borowski, Mayor of Decorah IA)
- scripts/build_viz.py: committed, deterministic generator for the Board's
  county_data.json / county_detail.json (previously built ad-hoc)
- generate_changelog.py: ignore files whose only change is the vintage stamp,
  so the diff reflects government change, not re-export bookkeeping

Person files 11,285 -> 13,329. Non-FL municipal officials (1,903) are in the
tree but not yet county-mappable (place->county crosswalk still NULL).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Fabio
2026-07-04 18:56:37 -04:00
parent 092e54ae21
commit 7a2cc64362
14318 changed files with 156645 additions and 58602 deletions
+4 -4
View File
@@ -2,7 +2,7 @@
"""Build the OKF entity tree from the raw source exports in data/.
Inputs (committed raw, one JSON object per line):
officeholders-v2.jsonl Atlas — person->seat records (11,285)
officeholders-v3.jsonl Atlas — person->seat records (13,329)
bodies.jsonl congress-legislators — institutions (233)
leadership.jsonl current federal leadership roles (28)
committee_memberships.jsonl person->committee edges (3,879)
@@ -27,7 +27,7 @@ REPO = Path(__file__).resolve().parent.parent
DATA = REPO / "data"
OUT = DATA / "jurisdictions"
BODIES_OUT = OUT / "us" / "bodies"
DATASET_DATE = "2026-06-20" # officeholders v2 build date
DATASET_DATE = "2026-07-04" # officeholders v3 export date
CONGRESS_DATE = "2026-07-03" # congress-legislators ingest date
@@ -304,7 +304,7 @@ def person_body(rec, enr):
any_src = True
if not any_src:
out.append("- (no field-level source recorded)")
out += ["", f"Generated from the Atlas officeholders v2 export ({DATASET_DATE})."]
out += ["", f"Generated from the Atlas officeholders v3 export ({DATASET_DATE})."]
return out
@@ -537,7 +537,7 @@ def load(name):
def main():
officeholders = load("officeholders-v2.jsonl")
officeholders = load("officeholders-v3.jsonl")
bodies = load("bodies.jsonl")
leadership = load("leadership.jsonl")
memberships = load("committee_memberships.jsonl")