12850196f9
The Board is a self-contained Artifact, so its county data is INLINED (const D / const CDETAIL) — the standalone county_*.json companions are not read by it. build_viz.py was only writing those companions, so the rendered Board kept showing the pre-crosswalk state (67 counties). Now build_viz.py injects the fresh data straight into board.html's three marked const lines, and the header stats read from an injected TOTALS object instead of being hardcoded (so they can't go stale — the original 11,285 drift). - scripts/build_viz.py — inject_board(): rewrite const D / CDETAIL / TOTALS in board.html; load candidates + acs_cd for the totals - viz/board.html — header driven by TOTALS; inlined data refreshed (county drill-downs 67 → 1049 counties; e.g. Fulton GA now shows all 7 metro mayors) Deterministic: board.html is byte-identical on rerun. Verified live — header 13,329/2,494/3,131/363, Fulton/Bastrop drill-downs render nested municipals. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>