Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

State Status Reference

One row per jurisdiction, covering scrape/extraction health, session timing, and bill-text format — the operational data needed to decide when a scraper should be turned on or off, and what’s currently broken vs. just out of session.

This is a living document — most rows below are placeholders (TBD) to be filled in over time, not a claim that data is missing or wrong. The columns that are already fully populated (Machine Readable Bill Text) come from bill-format-audit.md (last updated 2026-07-02, archived 2026-07-24 — no longer in the repo, this table is now the canonical copy of that data).

Why this exists

Turning scrapers on/off by session is already automatable in principle: each state’s chn-openstates-scrape.yml config has a template field that flips between openstates-scrape (active) and openstates-scrape-paused (paused). An automated version of this (check-sessions.py, driven by the OpenStates API’s own session dates) is currently disabled — its dates were repeatedly wrong and caused false “frozen” alarms. Until that’s trustworthy again, session dates here should be manually verified, not copied from the API, and the “Should be” column is the actual signal to act on: does the verified session status match what the config is currently set to?

Status code legend

Reuses the failure taxonomy already produced by scrape.sh / scrape-summary.json and referenced in scraper-status.md, so a row here can be copy-pasted straight from an automated run summary instead of re-classified into a separate scheme.

CodeMeaning
Working, no known issue
N1/N3Active block (connection refused / reset)
N2Connectivity (timeout, connection aborted)
N4DNS failure
H1Active block (HTTP 403)
H2Auth failure (401)
H3Rate limited (429)
H4Server down (503)
S1/S2Out of session (soft failure — expected, not broken)
S3Session config mismatch
S4/S5Site structure changed (upstream scraper needs a fix)
S6OCD validation failure
P1Shrinking output — fresh scrape produced fewer files than committed; guard refused to overwrite
UNKNOWNFailed, cause not yet classified
TBDNot yet checked

Reference table

StateCurrent SessionSession Dates (verified)ConfigShould BeScraperText-ExtractionMachine-Readable Bill TextBill Count (current session)Last Verified / Notes
AKTBDTBDTBDTBDTBD✅ (text/html, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
ALTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
ARTBDTBDTBDTBDTBDTBD❌ (no bills yet as of audit)TBD
AZTBDTBDTBDTBD🔄 runningTBD2,190Fixed 2026-07-24 (--fastmode cache poisoning, not the old cookie bug) — first successful scrape ever, live via PR #5742. See tamara-notes/scraper-status/not-working.md for the full writeup
CATBDTBDTBDTBDTBD✅ (text/html, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
COTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
CTTBDTBDTBDTBDP1TBD❌ (pdf only)TBDHit shrink-guard 2026-07-21 — duplicate bill objects under different UUIDs (1.4-2.9x inflation), single-session not multi-session. Cleared and re-dispatched same day per scraper-status.md; not independently re-verified since (see MT for a case where a similar ‘fixed’ claim didn’t fully hold up). Self-hosted required (Azure IP block on FTP server)
DCTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
DETBDTBDTBDTBDTBD✅ (pdf, text/html)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
FL2026 Regular (+ 2026F special)TBDSelf-hostedActive🔧 in progressTBD❌ (pdf only)TBD2026-07-23/24: found two distinct bugs — flhouse.gov bot detection (PR #5724, issue #1386) and a separate missing-timeout hang on the same host. Both fixes pushed, awaiting maintainer review. Self-hosted required; tinyproxy path untested until amd64 image fix lands.
GATBDTBDTBDTBDTBDTBD❌ (pdf only)TBD
GUTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
HITBDTBDTBDTBDTBD❌ (no bills yet as of audit)TBDWAF block (Cloudflare) per bill-format-audit (Scraper ✅ per 2026-07-21 audit)
IATBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
IDTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
ILTBDTBDTBDTBDTBD✅ (pdf, text/html)TBDSelf-hosted required (Azure IPs served different content, broke title xpath) (Scraper ✅ per 2026-07-21 audit)
INTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
KSTBDTBDTBDTBDTBD✅ (pdf, text/html)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
KYTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
LATBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
MATBDTBDTBDTBDTBDTBD❌ (pdf only)TBDSelf-hosted required (malegislature.gov blocks Azure); known runner-uptime gaps have caused missed nights
MDTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
METBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
MITBDTBDTBDTBDTBDTBD✅ (pdf, text/html)TBDFails on every hosting path — legislature.mi.gov doesn’t serve its full TLS cert chain, not a proxy/hosting issue
MNTBDTBDTBDTBDTBDTBD✅ (text/html)TBD
MOTBDTBDTBDTBDP1TBD❌ (pdf only)TBDHit shrink-guard 2026-07-21 — duplicate bill objects under different UUIDs (1.4-2.9x inflation), single-session not multi-session. Cleared and re-dispatched same day per scraper-status.md; not independently re-verified since (see MT for a case where a similar ‘fixed’ claim didn’t fully hold up).
MPTBDTBDTBDTBDTBDTBD❌ (pdf only)TBDBlank-title OCD validation crash (S6), fix identified, not yet filed upstream
MSTBDTBDTBDTBDTBD✅ (text/html, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
MT2025 (only active session upstream — worth double-checking this is still correct given MT meets biennially)TBDNot self-hosted (plain GitHub-hosted)TBDP1 (disputed)🔧 fixed 2026-07-24❌ (no version links)~4,495 (disputed — see notes)2026-07-23/24: shrink-guard blocking scrapes since 07-21; investigated at length, real duplication confirmed (~1-2%) but doesn’t explain the gap between the committed baseline (~6,900 unique estimated) and format/fresh-scrape output (4,495) — cause still open. Separately, fixed the org-wide broken extract-text restart mechanism (PAT_WORKFLOW_TRIGGER → GitHub App token, matching scrape→format pattern); applied to this repo only so far, worth rolling out to all states.
NCTBDTBDTBDTBDTBD❌ (pdf only)TBDSelf-hosted required — was NOT an IP block, was frozen ~7 months for a different reason, see scraper-health.md (Scraper ✅ per 2026-07-21 audit)
NDTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
NETBDTBDTBDTBDTBDTBD❌ (pdf only)TBD
NHTBDTBDTBDTBDTBDTBD❌ (no version links)TBDSite blocks scraping 6am-9pm ET — schedule around this, not a real block
NJTBDTBDTBDTBDTBD✅ (text/html, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
NMTBDTBDTBDTBDTBDTBD❌ (no bills yet as of audit)TBDIntermittent FTP server issue (confirmed via direct curl testing), not a permanent dead end, not hosting-related
NVTBDTBDTBDTBDTBDTBD❌ (pdf only)TBDMeets biennially, no regular session until 2027 — low bill count is expected, not broken
NYTBDTBDTBDTBDTBD✅ (text/html, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
OHTBDTBDTBDTBDP1TBD✅ (pdf, text/html)TBDHit shrink-guard 2026-07-21 — duplicate bill objects under different UUIDs (1.4-2.9x inflation), single-session not multi-session. Cleared and re-dispatched same day per scraper-status.md; not independently re-verified since (see MT for a case where a similar ‘fixed’ claim didn’t fully hold up).
OKTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
ORTBDTBDTBDTBDTBDTBD❌ (pdf only)TBD
PATBDTBDTBDTBDP1TBD✅ (pdf, text/html, msword)TBDHit shrink-guard 2026-07-21 — duplicate bill objects under different UUIDs (1.4-2.9x inflation), single-session not multi-session. Cleared and re-dispatched same day per scraper-status.md; not independently re-verified since (see MT for a case where a similar ‘fixed’ claim didn’t fully hold up).
PRTBDTBDTBDTBDP1TBD✅ (msword)TBDHit shrink-guard 2026-07-21 — duplicate bill objects under different UUIDs (1.4-2.9x inflation), single-session not multi-session. Cleared and re-dispatched same day per scraper-status.md; not independently re-verified since (see MT for a case where a similar ‘fixed’ claim didn’t fully hold up).
RITBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
SCTBDTBDTBDTBDTBD✅ (text/html, docx)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
SDTBDTBDTBDTBDTBD✅ (text/html, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
TNTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
TXTBDTBDTBDTBDTBD✅ (text/html, pdf)TBDBlocks GitHub Actions IP ranges at the firewall — self-hosted only, see tx-backfill-runbook.md (Scraper ✅ per 2026-07-21 audit)
USATBDTBDTBDTBDP1TBD✅ (text/xml, pdf)TBDHit shrink-guard 2026-07-21 — duplicate bill objects under different UUIDs (1.4-2.9x inflation), single-session not multi-session. Cleared and re-dispatched same day per scraper-status.md; not independently re-verified since (see MT for a case where a similar ‘fixed’ claim didn’t fully hold up).
UTTBDTBDTBDTBDTBD✅ (text/xml, pdf)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
VATBDTBDTBDTBDTBD❌ (no bills yet as of audit)TBDWorkflow disabled since 2026-04-01, reason unclear — worth investigating (Scraper ✅ per 2026-07-21 audit)
VITBDTBDTBDTBDTBDTBD❌ (pdf only)TBDSource server itself offline (billtracking.legvi.org:8082) — not a code problem, fails on every hosting path
VTTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
WATBDTBDTBDTBDTBDTBD❌ (no version links)TBD
WITBDTBDTBDTBDTBD✅ (pdf, text/html)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked
WVTBDTBDTBDTBDTBD✅ (text/html)TBDSelf-hosted required (same Azure-block pattern as IL/CT/HI/MA/TN) (Scraper ✅ per 2026-07-21 audit)
WYTBDTBDTBDTBDTBD❌ (pdf only)TBDScraper ✅ per 2026-07-21 full 56-state audit (scraper-status.md) — not re-verified since; other columns still unchecked

Hosting Path History (audited 2026-07-24)

For every state without a confirmed-healthy scraper, pulled the last 10 scrape workflow runs and determined the actual hosting path each one used (not what config claims — verified directly from each run’s job log: presence of a Hosted Compute Agent/Azure Region block means GitHub-hosted, USE_PROXY: true within that splits Tinyproxy from plain; its absence entirely means it ran on the real MacBookPro runner). cancelled runs are excluded entirely — those mean the runner/proxy was never available to pick up the job at all, not that a path was tried and failed. Only non-fl/mt states are P1-noted from the same 07-21 audit as the main table above.

StatePaths TriedClean Runs (per path)Best Path So FarNotes
ARTinyproxy, MacBookProTinyproxy 6/6, MacBookPro 0/1TinyproxyMacBookPro has only one real (non-cancelled) data point, and it failed — not enough to judge that path yet
AZTinyproxy, MacBookPro, GitHub-hosted-plain0/6, 0/1, 0/2 pre-fix; ✅ clean on Tinyproxy post-fixTinyproxyNot a hosting issue at all — was --fastmode cache poisoning, identical failure on every path was the tell. Fixed 2026-07-24, PR #5742
CTTinyproxy, MacBookPro, GitHub-hosted-plainTinyproxy 4/5, MacBookPro 2/3, GitHub-hosted-plain 0/1Tinyproxy or MacBookProGitHub-hosted-plain’s one real data point was S1_OUT_OF_SESSION — a soft/expected failure, not evidence the path itself is broken
FLTinyproxy, MacBookPro0/6, 0/3None confirmed yetSee dedicated FL section above — two distinct bugs found and fixed 2026-07-23/24, awaiting merge
GAGitHub-hosted-plain only2/10 (+4 no clear signal)Only path triedNever tried Tinyproxy or MacBookPro
MAMacBookPro only (2 real runs)0/2Neither confirmedNo real Tinyproxy data at all; both real MacBookPro runs failed. Known runner-uptime gaps explain most of this state’s cancelled runs
MITinyproxy, MacBookPro0/6, 0/2None — fails everywhereRoot cause confirmed unrelated to hosting: legislature.mi.gov doesn’t serve its full TLS cert chain, fails identically on every path including genuine self-hosted
MNGitHub-hosted-plain only5/10 (+3 no clear signal)Only path triedNever tried Tinyproxy or MacBookPro
MOGitHub-hosted-plain only4/9 (+2 no clear signal)Only path triedRepeated P1 shrink-guard hits, not a hosting problem; MacBookPro’s only entry was cancelled (discarded)
MPGitHub-hosted-plain only0/10None — fails every timeNever tried Tinyproxy or MacBookPro. S6_VALIDATION/H3_RATE_LIMITED — known blank-title crash + rate limiting
MTGitHub-hosted-plain, MacBookPro (1 real run)GitHub-hosted-plain 3/9, MacBookPro 1/1MacBookPro (only one data point, but clean)GitHub-hosted-plain repeatedly hits the disputed P1 shrink-guard — see tamara-notes/state-problems.md for full MT writeup
NETinyproxy, MacBookPro0/5, 0/3None confirmed yetBoth paths failing — Tinyproxy hits shrink-guard/rate-limit, MacBookPro’s 3 real runs all failed outright, worth investigating
NHGitHub-hosted-plain, MacBookPro (1 real run)0/8, 0/1None — fails everywhereH3_RATE_LIMITED on both paths — known site blocks scraping 6am-9pm ET, likely a scheduling/timing issue rather than hosting
NMTinyproxy, MacBookPro0/6, 0/2None confirmed yetKnown intermittent FTP server issue (confirmed via direct curl testing), not hosting-related
NVTinyproxy, MacBookPro (1 real run)Tinyproxy 5/5, MacBookPro 0/1TinyproxyStrong Tinyproxy track record; MacBookPro’s one real run had no clear success/fail signal
OHTinyproxy, MacBookProTinyproxy 2/5, MacBookPro 1/2Mixed, no clear winnerBoth paths hit shrink-guard/failures sometimes
ORGitHub-hosted-plain only6/10 (+4 no clear signal)Only path triedGood track record on the only path tried
PATinyproxy, MacBookProTinyproxy 2/5 (3 unclear), MacBookPro 1/2Mixed, no clear winnerKnown duplicate-cruft/shrink-guard history, see scraper-status.md
PRGitHub-hosted-plain, MacBookPro (1 real run)GitHub-hosted-plain 2/9, MacBookPro 1/1MacBookPro (only one data point, but clean)GitHub-hosted-plain repeatedly hits P1 shrink-guard
USATinyproxy, MacBookProTinyproxy 3/5, MacBookPro 0/2TinyproxyMacBookPro’s 2 real runs both failed outright
VITinyproxy, MacBookPro (1 real run)0/6, 0/1None — fails everywhereSource server itself offline (billtracking.legvi.org:8082) — confirmed not a hosting problem
WAGitHub-hosted-plain only5/10 (+4 no clear signal)Only path triedNever tried Tinyproxy or MacBookPro
  • bill-format-audit.md, scraper-health.md, error-tracking.md — archived 2026-07-24 (no longer in the repo); this doc and tamara-notes/state-problems.md are their replacements
  • actions/pipeline-manager/chn-openstates-scrape.yml — the actual per-state config this doc should stay consistent with (runner, template, scrape_cron)
  • actions/pipeline-manager/check-sessions.py — the disabled session-pause automation this doc’s session columns are meant to eventually feed