# legislature/ — Maine Legislature and constitutional officers, 1820–2026 (v1.6)

Every member of the 1st through 132nd Legislatures, party composition at the start and end of each Legislature, presiding officers, and every Governor, Attorney General, Secretary of State, Treasurer and Auditor since 1820. Built 2026-10-01.

## Files

| File | What it is |
|---|---|
| `members.csv` | 24,658 rows, one per member per Legislature (House, Senate, tribal representatives). Party at start and end of session, district (where recorded), residence, towns and counties represented, leadership positions, joined-late / left-early / declined-oath flags, the Law Library's note on the change (with date), birth/death, occupation. `record_id` is the Law Library's Sessions record id (blank for the one member not yet in the Library's database, Nancy Theriault). Added in v1.2: `provisional_seat` (True for a member provisionally/conditionally seated in a contested election and later replaced — not counted at the start), `party_group` (cross-file vocabulary, from `party_start`: R, D, GB, U = UNE (v1.3: IND merged into UNE), UNK = no party recorded, OTH = PRG, LIB_1870S, IR, ID, PRO, AM, CSI, GRN, LBT) and `fix_note` (what a v1.2 correction changed and why). |
| `legislatures.csv` | One row per Legislature: years, election month, whether counts are start-of-session or everyone who served, map basis, Governor(s), House and Senate seats by party at the start. |
| `composition.csv` | Long form: legislature × chamber × start/end × party → seats. The party-strength charts are drawn from this. |
| `leaders.csv` | Speakers, Senate Presidents and other leadership posts by Legislature, with party. |
| `constitutional_officers.csv` | 258 rows (v1.2 adds `party_group` after `party`: R, D, DR, NR, W, GB, U = Unenrolled, UNK = not yet determined): Governor (75), Attorney General (57), Treasurer (53), Secretary of State (50), State Auditor (23). Years, name, residence, party, where the party came from, legislative service, notes, flag (CHECK / CORRECTED), source URL. |
| `dubin_maine_composition.csv` | Party totals for each chamber, every election 1820–2006, transcribed from Michael J. Dubin, *Party Affiliations in the State Legislatures: A Year by Year Summary, 1796–2006* (McFarland, 2007), Maine chapter pp. 79–83 (Matt's copy). One row per election year × chamber × party; `legislature` maps the election year to the Legislature it chose; `as_printed` keeps Dubin's cell exactly; `note` carries his footnotes. Codes: DEM (Democrats; Jackson men before 1832), NR (Adams men / National Republicans), WHIG, REP, FREESOIL, LIBERTY, AM_ANTIMASON, IND, LIB_1870S, GB, PRG, ID, GRN, UNK (his "?", party not found), X (his "x", unexplained). |
| `dubin_vs_lawlibrary.csv` | Dubin's D/R totals beside the Law Library counts for every chamber 1871–2006. |
| `legislature_sources.zip` | Raw downloads: the Law Library Sessions grid (`sessions_raw.*`), all 25,404 full Sessions records (`details.json`), the Speakers/Presidents/Tribal tables (`leaders_raw.json`), text of the Maine Legislative Registers 1915–1985 used for checking (`registers_1915_1985.txt`), and the Wikipedia officer lists/bios used to fill and check officer parties. |
| `legislature_maps.zip` | `combined.topo.json`: towns plus the 2003, 2013 and 2021 House and Senate district plans, used by the page maps. |
| `scripts/` | `dubin_raw.py` + `dubin_parse.py` (the Dubin transcription and its parser), `build_legislature.py` (members, composition, leaders, page data), `townmatch.py` (Law Library town names → map towns), `build_officers.py`, `parsewiki.py`, `grab2.py`; v1.2: `fix_v1_2_members.py` (record corrections → members, composition, legislatures and `../site-design/legislature/leg_data.json`), `fix_v1_2_officers_party_group.py`, `propose_joined_late_pre1983.py` (writes the proposal; its output was adopted as `joined_late_pre1983_applied.csv`); v1.3: `fix_v1_3_members.py`, `fix_v1_3_officers_unenrolled.py`; v1.4: `fix_v1_4_members.py`. **Order:** a rebuild from the raw sources with `build_legislature.py` must be followed by `fix_v1_2_members.py`, `fix_v1_2_officers_party_group.py`, `fix_v1_3_members.py`, `fix_v1_3_officers_unenrolled.py` and `fix_v1_4_members.py`, or the corrections are lost. |
| `joined_late_pre1983_applied.csv`, `proposed_joined_late_pre1983_effects.csv` | **Applied in v1.3 (Matt adopted the rule, 2026-10-05).** Members of the 1st–110th Legislatures whom the Library's notes show joining after the session opened ("Qualified 9/21/1954", "Elected in Special Session", ...), with the matched text, confidence and a `decision` column (80 applied, John Mitchell Sr. not). Was `proposed_joined_late_pre1983.csv`. The effects file is the record of what adopting it did to each Legislature's start counts and labels (computed before adoption). |
| `../site-design/legislature/` | Page templates, app script and builders, the built pages (`legislature-history.html`, `constitutional-officers.html`) and `links.json`. |

## Sources

* Maine State Law and Legislative Reference Library, *Maine Legislators 1820–present* (Legislators Biographical Database), Sessions records — primary source for members, parties, districts, residence and in-session changes.
* Law Library lists of Speakers of the House, Presidents of the Senate, and tribal representatives.
* Law Library lists of constitutional officers and Governors; Wikipedia lists and biographies used to fill officer parties the Library does not give (marked `party_source`).
* Dubin (2007), above — chamber party totals for 1828–1871, shown on the pages for the 9th–50th Legislatures, where the Law Library gives no party. His own sources: the Portland *Eastern Argus* and *Advertiser*, Hatch's *Maine: A History*, and from 1871 the *Maine Register*.
* *Maine Legislative Register* 1915–1985 (Law Library scans) — used to verify party counts.
* District plans: Maine GeoLibrary (2003, 2013, 2021).

## How counts are made

* **9th–50th Legislatures (elected 1828–1870):** the seat charts, strength charts and control tables use Dubin's chamber totals (hatched = party not found by Dubin), except where members' own parties have been transcribed from newspapers (v1.5, `party_1820_1871/`; 11th and 13th Legislatures so far — 50th, 49th, 48th and 42nd; 12th, 14th–19th, 21st, 22nd, 26th, 27th and the 34th Senate partly). 1st–8th (1820–1827): no party totals exist. 1828 gives only "Adams majority" in both chambers, and the 1829 House has no totals (Speaker vote in the note).

* **Start of session** excludes members who joined later (special election, appointment, seating after a contest) and, since v1.2, a member provisionally seated in a contested election whom the chamber later replaced (`provisional_seat`; the permanently seated member is counted instead: 116th House HD 101, 127th Senate SD 25), and uses each member's party on the first day (party changes are read from the Library's "Changed party from X to Y on date" notes).
* From the 1st to the 110th Legislature (1820–1982) the Library's records do not mark who joined mid-term. Since v1.3, members whose own notes show a later start (`joined_late_pre1983_applied.csv`) are marked `joined_late`, and a Legislature with any such member is counted at the **start of session**; the others are still counted as **everyone who served** and labeled that way on the page.
* **Party: "Unenrolled", never "Independent"** (Matt, 2026-10-05: Maine has no Independent party; such members are officially unenrolled). The code is UNE (`party_group` U). `party_db` keeps the Library's label as printed, and the Library's own notes ("Changed party from Republican to Independent on ...") are quoted as written. Real parties with "Independent" in the name (Independent Republican, Independent Democrat, Green Independent, Common Sense Independent) keep their own codes.
* Election month: April 1820; September of the year before the session through 1958; November from 1960.

## Pages

* Legislature history: https://mainepoliticaldata.com/legislature/ (`#top` overview, `#house`, `#senate`, `#L1`–`#L132`)
* Constitutional officers: https://mainepoliticaldata.com/constitutional-officers/
* Linked from the home page (In Augusta and The Legislature blocks); not in the navbar yet.

See `FLAGS.md` for known gaps.

## What changed in v1.6 (2026-10-16 — early-Legislature party strength; PENDING-WORK P-186)

Matt (2026-10-16): "Estimate the unknowns and move forward on the labeling of the era as one of one-party control … the actual party was Democratic Republican, and I don't want the confusion with the modern-day Republican Party."

* **1st–8th Legislatures (sessions 1820–1828, elected 1820–1827) = the Democratic-Republican one-party era.** No seat counts by party exist; the charts show a shaded band labelled "Democratic-Republican one-party era", the control tables and seat charts say "Democratic-Republican one-party era", and each Legislature's note explains it (the Jeffersonian party historians call the Democratic-Republicans; no connection to today's Republican Party, founded 1854; Federalists won few seats). Evidence: opening-day votes 1820 Speaker 139–0, 1824 126–10; the contested votes of 1822 (78–58) and January 1828 (Ruggles 83, Evans 60) were factional. Their Speakers and Presidents are coded DR; the Law Library speaker list's Benjamin Greene (1824, "NR") and John Ruggles (1825–1828, blank) are now DR, and Ruggles 1831 (was "DR") is DEM (the Jackson candidate against National Republican Scammon).
* **9th–25th Legislatures (sessions 1829–1845): unknown House seats estimated** from the House's opening-day vote for Speaker (Clerk for the 21st), read from the newspapers (`party_1820_1871/floor_votes_1820_1845.csv`). Members beyond a party's known count who voted for its candidate are counted with it; any remaining unknown seats are split in proportion to the vote. The 9th and 10th, for which Dubin gives no House totals at all, are estimated whole (9th: 102 NR / 46 D; 10th: 74 NR / 72 D). Result in `chamber_estimates_1829_1845.csv`; on the pages estimated seats are drawn lighter (seat charts and bars) and marked with open circles on the strength lines, and each House note gives the vote and the arithmetic. Chambers whose members' own parties are transcribed (≥ 90 %, v1.5) are not estimated.
* **Dubin's two misplaced footnotes** (Speaker vote "114 J / 62 NR" printed under the 1829 election and "73 J / 71 NR" under 1832) are swapped: the newspapers show 73 NR / 71 J in January 1830 and 110 J / 61 NR in January 1833. The page notes say so; `dubin_maine_composition.csv` keeps Dubin as printed (FLAGS 18).
* `members.csv`, `composition.csv` and `legislatures.csv` are unchanged (they are member-based); the estimates live in `chamber_estimates_1829_1845.csv` and the page bundle (`'<PARTY>~'` keys in `dc.H`).
* Script: `scripts/fix_v1_6_estimates.py` (idempotent) — **run it after `fix_v1_5_party_1820_1871.py`** whenever a v1.5 batch is applied. Page code: `site-design/legislature/legislature_app.js` (era band, estimate styling).

## What changed in v1.5 (2026-10-15 — members' party 1820–1871 from newspapers, batch 1; PENDING-WORK P-005)
`party_1820_1871/` (README there) holds a member-by-member transcription of the party lists Maine newspapers printed after each
election, read from the page images on Newspapers.com, and `scripts/fix_v1_5_party_1820_1871.py` applies it (re-runnable; run
after `fix_v1_4_members.py`): `party_start`/`party_end` = the party found, `party_source` = "newspaper: <list>", `party_group`
(D, NR, W, R …), a `fix_note`; `composition.csv` and `legislatures.csv` re-derived for the Legislatures changed; the page bundle
gets the members' parties, and a chamber whose start-of-session members are at least 90% found switches its seat chart and
strength line from Dubin's printed totals to the members' parties (Dubin's totals stay in the chamber note as the check figure).
* **Batch 1:** 11th Legislature (1831) — House 84 Democrats (Jackson Republicans) / 61 National Republicans / 6 not found,
  Senate 11 / 8 / 1 (Eastern Argus, Nov. 12, 1830: the Argus's own count 86 / 62 = Dubin's); 13th (1833) — House 85 / 59 / 40
  not found (Kennebec Journal, Sept. 21, 1832; Dubin 97 / 59), Senate not yet.
* **Batch 2:** 12th (1832) — House 93 / 51 / 36 not found, Senate 22 / 3 / 1 (Eastern Argus, Sept. 1831; Dubin 100 / 58 and
  21 / 4); 13th completed from the Eastern Argus of Sept. 25, 1832 (its count 97 / 59 and Senate 15 / 10 = Dubin's) — House
  96 / 58 / 30 not found, Senate 15 / 10; 14th (1834) House in part — 72 Democrats / 41 "Not on the Democratic list" (code OPP:
  the Argus marked only its own side in the three-way 1833 race) / 72 not found (Dubin 79 / 39). New party code OPP.
* **Batch 3:** 15th (1835) House — 91 Democrats / 68 Whigs / 27 not found (Eastern Argus, Sept. 12–19, 1834, checked against
  its own count, and the Hancock County Advertiser of Sept. 24; Dubin 94 / 66). Senates of the 14th and 15th not found as lists.
* **Batch 4:** House of the 16th (1836: 52 D / 37 W / 95 not found — as incomplete as Dubin's own 51 / 41 / 94 ?), 17th (1837:
  90 / 49 / 46; Eastern Argus Sept. 26, 1836 with the Kennebec Journal as cross-check) and 18th (1838: 63 / 77 / 44; Argus Sept. 21
  and Oct. 5, 1837, Bangor Whig Oct. 6). The page note now says the Argus calls the Whigs "Federalists".
* **Batch 5:** House of the 19th (1839: 97 D / 65 W / 25 not found; Eastern Argus Sept. 29, 1838, county counts check) and the
  21st (1841: 61 D / 90 W / 33; Bangor Whig Sept. 24, 1840, agreeing with its own recapitulation). No list found yet for the 20th.
* **Batch 6:** House of the 22nd (1842: 123 D / 50 W / 1 Liberty / 45 not found; Eastern Argus Oct. 23, 1841, county counts check).
* **Batch 7:** House of the 26th (1846: 78 D / 51 W / 21 not found; Eastern Argus Jan. 5, 1846, the whole House "and their political character").
* **Batch 8:** the 50th (1871), both chambers — House 109 R / 40 D / 4 not found, Senate 27 R / 3 D (Portland Daily Press, Jan. 3, 1871; Senate = Dubin's 28 / 3).
* **Batch 9:** the 42nd (1863), both chambers — House 100 R / 44 D / 8 not found, Senate 23 / 6 / 1 (Ellsworth American Jan. 30, 1863, from the Kennebec Journal; War and Straight Democrats both coded D); 34th Senate, 21 of 31 (Eastern Argus Sept. 23, 1854: 11 Whigs / 5 Morrill Democrats / 5 Free Soil). Page notes for these years now say what the papers' labels mean.
* **Batch 10:** the 49th (1870), both chambers — House 112 R / 31 D / 11 not found, Senate 27 / 3, all 30 found (Portland Daily Press Jan. 5, 1870, "Maine Legislature, 1870.": printed totals 117 / 34 and 28 / 3, the same as Dubin's).
* **Batch 11:** the 48th (1869), both chambers — House 118 R / 27 D / 6 not found, Senate 27 / 2, all 29 found (Portland Daily Press Jan. 5, 1869, "Members Elect of the Senate and House": printed 123 / 28 with a Limington tie, and 29 / 2 — Dubin's figures).
* **Batch 12:** the 27th House (1847) — 53 D / 56 W / 39 not found of 148 (Eastern Argus Sept. 26, 1846 and the later trials to Nov. 20; Dubin 78 / 66 / 6 Liberty / 1 I).
* The Legislature page: the 11th's seat charts and strength lines now use the members' parties; every member tile of the 11th
  and 13th shows a party; presiding officers take the party of their member record; National Republican tiles use dark text.
* Still blank: all other members of the 1st–50th Legislatures (next batches), and the members listed in
  `party_1820_1871/review_1820_1871.csv`.

## What changed in v1.4 (2026-10-14, data audit II items P-3, P-4, P-5, P-9, P-11, P-12)
`scripts/fix_v1_4_members.py` (re-runnable; every member change is noted in `fix_note`):
* **Party at start and end follows each member's own party-change note (P-3).** The original reader understood only "Changed party from X to Y on m/d/yyyy" and missed "Switched from", "Unenrolled from … Party", "Changed party affiliation", two-digit years and dates given as a month or a season. Nine member-terms change: George Boyce (110th, R at start, D at end), Clyde Hichborn (114th, R → D), June Meres (117th, D → R), Barbara Merrill (122nd, D → unenrolled), Thomas Saviello (124th, unenrolled → R), Martin Grohman and Denise Harlow (128th, D → unenrolled), Norman Higgins (128th, R → unenrolled), Sophia Warren (130th, unenrolled → D). The House start counts now match the election results: 114th D 97 / R 54; 117th D 77 / R 74; 122nd D 76 / R 73 / U 1 / Green 1; 124th D 96 / R 54 / U 1; 128th D 77 / R 72 / U 1 / CSI 1; 130th D 80 / R 67 / U 4. The 110th House end count is now D 82 / R 68. `composition.csv` and `legislatures.csv` are rebuilt for those seven Legislatures.
* **Senate districts (P-5).** Four senators were filed under a neighbour's district and are moved to the district they won: Gerard Conley Sr. (105th) 9 → 10, Bennett Katz (106th) 17 → 19, Samuel Collins Jr. (107th) 17 → 21, Nancy Clark (109th) 27 → 11. Sixteen blank Senate districts are filled: from the 1968, 1970 and 1972 general-election results (104th: Barnes 25, Beliveau 5, Boisvert 13, Moore 6, Quinn 29; 105th: Carswell 7, Quinn 29; 106th: Roberts 3), and for members who joined by special election, from the predecessor the Law Library names (104th Holman 21 after Mills; 106th Henley 5 after Aldrich; 125th Dill 7; 130th Grohoski 7). The 104th–109th Senates now have no blank or missing district (the 104th SD 21 and 106th SD 5 each list a senator and his successor).
* **Senate Presidents of 1895–98 (leaders.csv, P-9).** The Law Library attached "President" to the wrong Day records. The 68th Legislature's President (1897–98) was Albert R. Day of Corinna (the Law Library's own list of Senate Presidents and Wikipedia agree); "Almon Day" (a House member from Turner) is replaced, and the extra "Albert Day" in the 67th is removed (George M. Seiders was President for the whole 67th). The `positions` field of the three member records is corrected to match.
* **120th Senate Presidents.** `leaders.csv` already listed Michael Michaud (2001) and Richard Bennett (2002); the page bundle `leg_data.json` now carries them in the list of Senate Presidents too (`build_leg_page.py` keeps its guard, so the built page is the same).
* **"M.D." is a title, not part of a name:** dropped from the display `name` of four member-terms (Ervin Center ×3, Herbert Allen, Herbert Caverly); `full_name` keeps it.
* **Dates for the 132nd (P-11):** Rep. Kathy Javner's date of death, 1/10/2026, is now in `note_date` (WGME, 1/12/2026: "passed away on Saturday"; Wikipedia); Rep. Crockett's change to unenrolled is dated about September 2025 in `fix_note` (Maine Public, 9/25/2025).
* `constitutional_officers.csv`: the Wardwell and Hayford (State Auditor) notes now cite the State Auditor's office list of past auditors, which gives Hayford from 1922 — so the 1922 start stands (P-12). Years unchanged.
* **Not changed:** election winners. The cases where the results name a winner the Legislature did not seat are listed in FLAGS 16 (P-4).

## What changed in v1.3 (2026-10-05, Matt's decisions)

`scripts/fix_v1_3_members.py` and `scripts/fix_v1_3_officers_unenrolled.py` (re-runnable; every member change is noted in `fix_note`):

* **Pre-1983 "joined late" rule adopted.** `joined_late = True` for the 80 members proposed in v1.2 (62 high, 4 medium, 14 review: the 1st Legislature's second-session replacements, the three 1830 convention-elected senators later removed, Josiah Sanford 1841, John Gill 1963); John Mitchell Sr. (special election before the 105th opened) stays counted at the start. Start counts change for 29 chamber-Legislatures and 21 Legislatures are relabelled "start of session" (as the effects file predicted, checked chamber by chamber), e.g. 90th Senate 38 → 33, 99th House 157 → 151, 101st House 160 → 151.
* **Unenrolled, never Independent.** `party_start`/`party_end` IND → UNE on 66 rows (51st–132nd, e.g. Sen. Richard Bennett, 132nd, now UNE at the end of the term; Jill Goldthwait, William Pluecker); `party_group` I → U. End of the 132nd: House 75 D, 73 R, 3 U; Senate 20 D, 14 R, 1 U.
* `constitutional_officers.csv`: Treasurer Terry Hayes and Governors James Longley and Angus King: party "Independent" → "Unenrolled", `party_group` U (`party_source` notes that the Library prints Independent).
* `composition.csv` and `legislatures.csv` rebuilt for the 53 Legislatures whose counts, party codes or label changed; `leg_data.json` refreshed (party codes, joined-late flags, start counts and labels, governors' and leaders' party codes) and both pages rebuilt. The Legislature page shows "Unenrolled" (same colour as before) and names the tribe on each tribal representative's tile (e.g. "Houlton Band of Maliseet Indians" for Brian Reynolds).

## What changed in v1.2 (2026-10-05, data audit of 2026-10-04 items E4, E5, H9, H10)

`scripts/fix_v1_2_members.py` (re-runnable; every change is noted in the row's `fix_note`):

* **132nd Legislature brought into line with `officeholders/officeholders.csv` (verified 2026-09-30):** Sen. Richard Bennett (SD 18) `party_end` REP → IND (the Senate lists him as I; the Library's note says he became unenrolled in June 2025); Rep. W. Edward Crockett (HD 112) `party_end` DEM → UNE; Rep. Nancy Theriault (HD 29, Republican, Millinocket) added — special election to succeed Kathy Javner, sworn in 7/14/2026, `joined_late`; Joseph C. Perry Sr. (HD 24, declined the oath to become Treasurer) now also `left_early`. Faircloth, Harriman, Cloutier and Javner rows checked — already right. End counts now: House 75 D, 73 R, 2 U, 1 I; Senate 20 D, 14 R, 1 I.
* **Start-of-session counts:** `joined_late` set for Michael F. Brennan (120th Senate; special election 3/5/2002 after Abromson died), Eugene Paradis (109th House; seated 1/2/1980 for Gould) and Mary Cahill (114th House; elected 6/15/1989 for her father); `provisional_seat` for Cathleen Manchester (127th Senate SD 25) and Sumner Jones Jr. (116th House HD 101, also now `left_early`). 109th/114th/116th House starts are now 151, 120th/127th Senate 35.
* **Duplicates:** 103rd Senate Frank Whitehouse Anderson record 378 dropped (identical to 377 in every field, and in the Library's own `details.json`). The two "John Coffin Talbot" records are **not** duplicates: the Library's grid files his 1836 record (24846) under the 13th Legislature and his 1837 record (24847) under the 16th; their own session years put them in the 16th and 17th, so they are re-filed there (13th Senate 26 → 25 rows, 17th 22 → 23; `leaders.csv` already lists Talbot as President of the 17th). These were the only two rows in the file whose session years disagree with their Legislature.
* **District:** Sean Paulhus, 130th, HD 50 → 52 (Bath was HD 52 under the 2013 plan; HD 50 in the 130th is Ralph Tucker of Brunswick).
* `party_db` "democrat" (2 rows, 95th and 96th) → "Democrat".
* `composition.csv` and `legislatures.csv` rebuilt for the 13th, 17th, 103rd, 109th, 114th, 116th, 120th, 127th and 132nd with `build_legislature.py`'s counting rules; every other row is unchanged (checked: re-deriving all 132 Legislatures from the old `members.csv` reproduces the old tables exactly).
* `../site-design/legislature/leg_data.json` refreshed for those Legislatures (plus the 16th and 130th, whose member lists changed) and `legislature-history.html` rebuilt; a plain-language line is added to the page note of the members whose status changed.
* `party_group` added to `members.csv` and `constitutional_officers.csv` (cross-file vocabulary shared with governors, SJC, officeholders; `people/people_index.csv` links the same person across those files).
