Repository navigation
Conversation
The 120th Congress, seated January 3, 2027, has new districts in AL, CA, FL, LA, NC, OH, TN, TX and UT. The map loaders and USDistrictChoroplethMap take an optional Congress (119 by default), and the package ships 120th boundaries and hexes beside the 119th ones, with the same district IDs. The boundaries redraw the nine states from Census's 2026 TIGER/Line files and keep every other state's 119th boundaries, which Census's block equivalency files show are unchanged (Missouri keeps its 2022 map). The hexes use The Downballot's hexmap v3.2 (CC BY 4.0). data-sources/congressional-districts (not packaged) records every source with its SHA-256, the build scripts, a boundary check against Census's block assignments, and county, tract and 119th-to-120th tables. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
@DTrim99 is attempting to deploy a commit to the PolicyEngine Team on Vercel. A member of the Team first needs to authorize it. |
13 tasks
congressionalDistrictMembers120.json lists each district's member-elect (name and party letter) or "not yet called", read from Wikipedia's 2026 House elections page with the revision and time recorded. loadCongressionalDistrictMembers120() loads it. The first snapshot has 406 races called and 30 not yet called; fetch_members.py refreshes it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Author
|
@PavelMakarchuk could you review this? It adds the 120th Congress district maps and members-elect beside the 119th ones, chosen with a |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds 120th Congress district maps beside the 119th ones. The 120th Congress is seated on January 3, 2027. Part of PolicyEngine/microcosm#1526, which tracks moving PolicyEngine's district data and maps to the 120th Congress.
What changes
loadCongressionalDistrictsGeo(congress?: CongressNumber)loadCongressionalDistrictsHex(congress?: CongressNumber)USDistrictChoroplethMaptakescongress(119 by default) and loads the matching map.CongressNumber = 119 | 120, plusCongressionalDistrictMemberandCongressionalDistrictMembers.loadCongressionalDistrictMembers120()loads each district's member-elect and party letter, or "not yet called". The file is a snapshot of race calls, read from Wikipedia's 2026 House elections page, with its read time and page revision recorded. The first snapshot (November 5) has 406 races called (253 D, 153 R) and 30 not yet called, within a few seats of the news totals that morning (252 D, 158 R, 25 uncalled).fetch_members.pyrefreshes it.src/visualization/data/, loaded only when asked for:congressionalDistrictsGeo120.json: 851 KB, 437 features;congressionalDistrictsHex120.json: 489 KB, 436 features;congressionalDistrictMembers120.json: 436 districts.District IDs (
ST-NN) follow each state's new numbering: in the 120th files,TX-35is the area Texas's new map numbers 35. The list of IDs is the same in both Congresses, because seat counts come from the 2020 apportionment.In the nine redrawn states, an ID now names a different area. For example, 40% of the new TX-35's 2020 population was in the old TX-28, and only 10% was in the old TX-35. So callers should draw each result on the boundaries it was computed with. The
congressprop says which.The 120th data
Nine states redrew for the 2026 elections: AL, CA, FL, LA, NC, OH, TN, TX and UT, 173 seats in all.
data-sources/congressional-districts/holds the build. It isn't in the package'sfiles, so it isn't published:sources.json, with all 66 inputs and their SHA-256s;ST-NN, Census GEOID, and policyengine-us'scongressional_district_geoid), with labels;Checks
Population. The 2020 block populations sum to 331,449,281 people in 5,769,942 populated blocks, which matches the national total.
Boundaries against Census's block assignments. Take every tract wholly inside one district. Its internal point should fall in that district's shape.
Per state, the 120th file does as well as or better than the 119th baseline. Alabama is 2 of 1,382 tracts, so TIGER/Line carries its June 2026 map.
Data tests (
tests/visualization/congressionalDistrictData.test.ts):CONGRESS120 and a5002000USGEOID;-01;Loader tests. The component asks for 119 by default and 120 when
congress={120}is set, for both views.Local runs.
bun run typecheckandbun run buildpass.generated-csstests. They fail on this Windows checkout because of CRLF line endings insrc/theme/quarto.scss, which this PR doesn't touch.Not in this PR
fetch_members.pybefore release, until every race is called and certified. After January 3, switch tounitedstates/congress-legislators.congress={120}, which happens when its data moves to the 120th. Existing dashboards keep the 119th default unless their owner changes them, and new projects passcongress={120}.🤖 Generated with Claude Code