How we analyze candidates, grade transparency, and protect nonpartisan integrity. Both this page and the downloadable PDF render from the same versioned source — whatever you see here is exactly what a PDF export produces.
Single-model analysis inherits whatever bias that model's training embeds. Architecturally different models trained on different data rarely fail the same way in the same direction. When both agree, the claim is stronger; when they disagree, we show both rather than pick one.
"Avery" (policy) and "Mara" (accountability) are prompt personas — not separate models. They exist so readers can see which analyst produced which claim and catch bias in the persona itself, not just the underlying model.
Both analysts receive identical, nonpartisan prompts that ask for concrete facts, specific bills and donors, and a steelmanned critique from opponents. Adjectives like "progressive" or "conservative" are avoided in favor of observable evidence.
Public-launch cost controls. Daily LLM budget cap ($3/day default, configurable via LLM_DAILY_BUDGET_USD, surfaced as a pill on /admin/usage and enforced by lib/llm_budget.js inside every openAIChat / anthropicChat). Default models switched to small-class (gpt-4o-mini + claude-haiku-4-5) for bulk enrichment crons; high-stakes paths still pass model: explicitly. Voter-facing /api/officials/[id]/grade and /api/officials/[id]/analyze stop triggering live LLM calls — they now serve cache-only, returning 202 + "pending" placeholder when the nightly cron hasn't warmed the record. Net: a viral spike can no longer spend more than the daily cap.
Rebuild. Unified methodology source shared between UI and PDF. Updated AI model references to current production (OpenAI gpt-4o + Anthropic claude-sonnet-4-6). Replaced speculative Decode Score point scheme with the data-backed rubric actually shipped in lib/grading.js: five weighted components (transparency, track record, specificity, accessibility, executive effectiveness) with office-type–specific weights and an insufficient-data gate.
Initial public release of the methodology document.
We welcome scrutiny. If you see a flaw in our approach or have suggestions for improvement, we want to hear from you.
Contact our team