{"id":14839,"plugin_id":"plugin_asdk_app_6aa2bcbd58c08191b12c01393c733f39","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:10:16.697Z","digest":"ab46ef08156add0e9aba1f9d93874c383e23b743d4a5590aafe54b7d32a139d4","against":null,"payload":{"name":"votemapper","description":"Use when answering questions about US elections on a map — 2026 midterm race ratings, which races are competitive, what has changed in the forecast, what a described scenario does to control of a chamber, checking and scoring a sealed VoteMapper forecast, or any presidential election from 1788 to 2024. Covers the ratings taxonomy, the seat arithmetic, and what this data is and is not.","included_files":[],"skill_md_contents":"---\nname: votemapper\ndescription: Use when answering questions about US elections on a map — 2026 midterm race ratings, which races are competitive, what has changed in the forecast, what a described scenario does to control of a chamber, checking and scoring a sealed VoteMapper forecast, or any presidential election from 1788 to 2024. Covers the ratings taxonomy, the seat arithmetic, and what this data is and is not.\n---\n\n# VoteMapper\n\nVoteMapper answers questions about US elections from published, dated datasets, and\nanswers them on a map.\n\n**The 2026 midterms**: the consensus competitiveness rating for any Senate race or House\ndistrict, which races are genuinely in play, what forecasters have changed their minds\nabout, and what a described scenario does to control of a chamber.\n\n**Presidential history, 1788–2024**: how any past election went, what changed between two\nof them, and how a single state has voted over time. That half has its own skill — see\n[history](../history/SKILL.md) for which of the three tools answers which question, and for\nthe boundary that matters most there: the historical data holds electoral votes, never\npopular-vote totals, margins, turnout or anything at county level.\n\nWhich half a question belongs to is usually obvious from the year. 2026 is congressional\nand belongs to `build_scenario`, `lookup_race` and `list_races_by_rating`; a presidential\nyear is historical. Nothing here covers 2028 — there is no forecast for an election with no\nratings published, and saying so is the right answer.\n\n## The boundary, first\n\n**VoteMapper is a simulator. It never reports live vote counts, returns, or called races.**\n\nA rating is a forecaster's opinion about a race that has not happened. A rating moving from\nLean R to Toss-up is Cook and Sabato revising their view — it is not a result, and saying\n\"North Carolina moved to Toss-up\" must never be phrased as though something happened in\nNorth Carolina.\n\nThe one exception is `score_forecast`, which reads race calls published from the Associated\nPress in order to score a sealed forecast. Even there, the tool reports whether a forecast's\npicks were right; it does not report vote totals and calls nothing itself. For live results,\nuse a results source.\n\n## The ratings taxonomy\n\nSeven ratings, one scale, safest Democratic to safest Republican:\n\n`safeD` · `likelyD` · `leanD` · `tossup` · `leanR` · `likelyR` · `safeR`\n\n- **Competitive** means `leanD`, `tossup` and `leanR` together. When someone asks which\n  races \"matter\", \"are in play\" or \"are close\", that is the filter they want — not `tossup`\n  alone, which is narrower than the question.\n- **A toss-up has no favourite.** It is not a half-seat for each party and it is not a lean.\n  Under a consensus baseline it stays uncalled.\n- Ratings are a **consensus of Cook Political Report and Sabato's Crystal Ball**, and every\n  answer carries the date they were published. Quote that date; a rating without one invites\n  the reader to assume it is current when it may not be.\n\n## The seat arithmetic\n\nThis is the part worth deferring to the tools rather than doing in your head.\n\n**The Senate has 100 seats and only 35 are on the 2026 ballot.** The other 65 are held over\nand already counted — 32 Democratic, 31 Republican and 2 independent as of the current data.\nA Senate tally built from the contested races alone is wrong by 65 seats. Control needs 51.\n\n**The House is all 435 districts**, every one on the ballot, and control needs 218. Most\ndistricts are not individually rated: an unrated district is treated as safe for whoever\nholds it, which is why the House map is nearly full before anyone calls anything.\n\n**Independents are their own party.** Two sitting senators are independents. Do not fold\nthem into a party's total, and do not describe a party as holding the chamber unless it\nreaches the threshold on its own.\n\n## Turning a sentence into a scenario\n\n`build_scenario` exists because models read scenarios well and count them badly. Your job is\nthe translation; let the tool do the arithmetic and quote what it returns.\n\n> \"Republicans hold every toss-up but lose North Carolina and Maine\"\n\n```json\n{\n  \"chamber\": \"senate\",\n  \"tossups\": \"republican\",\n  \"assignments\": [\n    { \"race\": \"NC\", \"party\": \"democrat\" },\n    { \"race\": \"ME\", \"party\": \"democrat\" }\n  ]\n}\n```\n\nThe pieces:\n\n- `baseline` — `consensus` (default) starts every race at its forecaster favourite and\n  leaves toss-ups uncalled. `empty` starts from an uncalled map.\n- `tossups` — hands every toss-up to one party. Use it for \"sweeps the toss-ups\", \"runs the\n  table\", \"everything breaks their way\".\n- `assignments` — individual races, applied last, beating the blanket rule. `\"none\"` returns\n  a race to uncalled.\n\n**Do not compute the result yourself.** The same sentence produces different arithmetic as\nratings move: a race that was a toss-up last month may be Lean D today, in which case\n\"they lose it\" changes nothing. The tool resolves against the ratings in effect; you do not\nknow them.\n\nRaces are addressed by id or name: `GA` and `TX-18`, or `Georgia Senate` and `Texas 18th`.\nAnything the tool could not apply comes back in `unresolved` — say so rather than reporting\na tally for a scenario the user did not describe.\n\n## Sealed forecasts\n\nA user can declare a forecast in the VoteMapper app, which seals it with a SHA-256\nfingerprint. `verify_forecast` says whether a fingerprint is on the record and what it was\nsealed over; `score_forecast` scores it against published calls.\n\n**Accuracy is counted over called races only.** An uncalled race is not a miss. Before\nelection night there is nothing to score, and the honest answer is that — never a zero.\n\n**Sealing happens in the app.** These tools read the registry; they cannot create or seal a\nforecast, and you should not imply otherwise.\n\n## Staying even-handed\n\nBoth parties are treated symmetrically by the data and should be by you. Use both directions\nin examples, attach no adjectives to either party's position, and let the numbers carry the\nanswer. Every rating is sourced and dated; say where it came from.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}