How this works
San Francisco and California Ballot Backstory explains each measure with its history, its money and its supporters, in seven languages. Here is how the pages are made and checked.
What we publish
One page per measure: what a YES and a NO vote do, why the measure is on the ballot now, the money involved, who placed it on the ballot, who endorses it, who is paying for each side, and the strongest case for and against. Seven measures also get a timeline of earlier decisions and a record of what past measures promised and delivered.
How each page is written
We start from primary sources: the official voter guides, the Controller’s and Legislative Analyst’s fiscal analyses, the legal text, campaign finance filings and published endorsements. An AI model drafts each page from those sources only, and every sentence carries a link to the source that supports it.
The automated checks
No person reviews or edits pages before they go live. Instead, every page must pass these automated checks. The last column shows how many published pages passed each one.
| Check | Result |
|---|---|
| Citations: a second model confirms that each cited passage supports its sentence. | 175 pages passed |
| Numbers: code checks every figure against the source data. | 175 pages passed |
| Quotes: code confirms that every quoted passage appears word for word in the saved source. | 175 pages passed |
| Cross-check: an AI model from a different company re-checks the claims. | skipped on 175 pages |
| Neutrality: a model scores each draft against a neutrality rubric, reading it as progressive, moderate and conservative readers would. A page that still fails after rewrites shows only the official text. | 175 pages passed |
| Plain language: a model checks that each page is easy to read. | 175 pages passed |
| Translation: two models translate independently, and sections where they disagree in meaning are redone. | — |
| Back-translation: another model translates the result back into English to catch changes in meaning. | 150 pages passed · not applicable on 25 pages |
| Glossary: election terms must match the official translations used by San Francisco and the state. | 150 pages passed · not applicable on 25 pages |
| Chinese wording: Simplified Chinese pages are checked for mainland, Taiwan and Hong Kong word choices. | 25 pages passed |
| Readers: anyone can report an error from any section, in any language. | — |
Which AI models we use
AI models from Anthropic write and check every page. This table is counted from the records each published page carries.
| Step | Model | Pages |
|---|---|---|
| bloc_summary | Claude Opus (Anthropic) | 175 |
| impact | Claude Opus (Anthropic) | 175 |
| Writing the first draft | Claude Opus (Anthropic) | 175 |
| Researching why it’s on the ballot now | Claude Opus (Anthropic) | 49 |
| Checking citations | Claude Sonnet (Anthropic) | 175 |
| Neutrality check | Claude Opus (Anthropic) | 175 |
| Plain-language check | Claude Haiku (Anthropic) | 175 |
| Translation | Claude Opus (Anthropic) | 150 |
| Translation | Claude Sonnet (Anthropic) | 150 |
| Second, independent translation | Claude Sonnet (Anthropic) | 150 |
| Comparing the two translations | Claude Sonnet (Anthropic) | 150 |
| Back-translation | Claude Haiku (Anthropic) | 150 |
The cross-check by a model from another company was not run for this election, so it shows as skipped above.
How we stay neutral
We never endorse. We give each side’s strongest argument in its supporters’ terms. YES and NO use colors with no party or good-and-bad meaning, and both ovals on our pages stay empty.
How we place measures on the coalition scale
The coalition scale runs from the progressive coalition to the moderate coalition. A measure’s position comes only from which tracked groups endorse or oppose it and who funds each side, using the group classifications listed below. It is not our opinion of the measure.
For state measures, the scale runs from the California Democratic Party and its allies to the California Republican Party and its allies, such as the Howard Jarvis Taxpayers Association. The position is set the same way: only by which tracked groups endorse or fund each side.
Where the money numbers come from
San Francisco campaign money comes from SF Ethics Commission filings on DataSF, which update daily. State measure money comes from the California Secretary of State (Cal-Access). Every money figure shows the date of the latest filing we include.
How we calculate cost examples
The cost examples on measure pages, such as a homeowner’s yearly bill, are calculated by code (ai/impact_costs.py) from the tax rates and amounts cited on each page. An AI model does not write or estimate these figures. Each example states its assumptions, such as building size and assessed value, so your own bill will differ.
How we translate
Pages are translated into Chinese (Traditional and Simplified), Spanish, Filipino, Vietnamese and Russian. Terms are checked against the Department of Elections glossary, a third model translates back to English to catch changes in meaning, and wherever San Francisco or the state publishes an official translation of the ballot question, we show that exact text. There is no official Russian translation, so Russian pages must meet the strictest agreement threshold.
Why every page says AI-generated
AI models write and check these pages. We label every page so you always know, and we show when each page was last checked.
Corrections and error reports
Every section has a Report an error button. Every fix is listed in the public corrections log with the date and what changed.
Groups we track and how we classify them
| Group | Type | Classification | Why |
|---|---|---|---|
| San Francisco Democratic Party | party | Political parties | sf axis +0.40 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.81 (computed from 13 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| San Francisco Republican Party | party | Political parties | sf axis +0.60 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors) |
| GrowSF | advocacy | Moderate slate | Anchor for the sf scale's moderate end, as listed in PLAN.md §5; sf axis +0.56 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis +0.04 (computed from 13 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| TogetherSF Action (now Blueprint SF) | advocacy | Moderate slate | Anchor for the sf scale's moderate end, as listed in PLAN.md §5; sf axis +1.00 (computed from 6 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors) |
| San Francisco Chamber of Commerce | business | Moderate slate | Anchor for the sf scale's moderate end, as listed in PLAN.md §5; sf axis +0.79 (computed from 7 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis +1.00 (computed from 5 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| Abundant SF | advocacy | Moderate slate | Anchor for the sf scale's moderate end, as listed in PLAN.md §5; No Nov 2026 positions could be read; the org has no effect on any score. |
| San Francisco League of Pissed Off Voters | advocacy | Progressive slate | Anchor for the sf scale's progressive end, as listed in PLAN.md §5; sf axis -0.85 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.86 (computed from 11 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| Harvey Milk LGBTQ Democratic Club | democratic-club | Progressive slate | Anchor for the sf scale's progressive end, as listed in PLAN.md §5; sf axis -0.85 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.96 (computed from 12 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| Democratic Socialists of America, San Francisco | advocacy | Progressive slate | Anchor for the sf scale's progressive end, as listed in PLAN.md §5; sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| San Francisco Berniecrats | advocacy | Progressive slate | Anchor for the sf scale's progressive end, as listed in PLAN.md §5; No Nov 2026 positions could be read; the org has no effect on any score. |
| San Francisco Labor Council | labor | Labor | sf axis -0.78 (computed from 3 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors) |
| SPUR | good-government | Other groups | sf axis +0.65 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -1.00 (computed from 10 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| League of Women Voters of San Francisco | good-government | Other groups | sf axis -0.85 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors) |
| YIMBY Action | advocacy | Other groups | sf axis +0.78 (computed from 6 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -1.00 (computed from 3 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| San Francisco Chronicle editorial board | newspaper | Other groups | No Nov 2026 positions could be read; the org has no effect on any score. |
| San Francisco Women's Political Committee | advocacy | Other groups | sf axis -0.60 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.89 (computed from 13 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| Alice B. Toklas LGBTQ Democratic Club | democratic-club | Other groups | sf axis +0.40 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.89 (computed from 13 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| Edwin M. Lee Asian Pacific Democratic Club | democratic-club | Other groups | sf axis +0.77 (computed from 8 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.12 (computed from 13 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| San Francisco Green Party | party | Political parties | sf axis -0.83 (computed from 7 measures where the anchors split; +1 = always with the moderate anchors, -1 = always with the progressive anchors); state axis -0.27 (computed from 13 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| SEIU Local 1021 | labor | Labor | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| San Francisco Taxpayers Association | taxpayer | Other groups | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| Sierra Club, San Francisco Bay Chapter | environmental | Other groups | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| San Francisco Tenants Union | tenant-advocacy | Other groups | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| United Educators of San Francisco | labor | Labor | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| Coalition on Homelessness | advocacy | Other groups | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| Small Business Forward | business | Business | sf axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| California Democratic Party | party | Political parties | Anchor for the state scale's left end (the two major parties and the Howard Jarvis Taxpayers Assn.); state axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| California Republican Party | party | Political parties | Anchor for the state scale's right end (the two major parties and the Howard Jarvis Taxpayers Assn.); state axis +0.82 (computed from 11 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| Howard Jarvis Taxpayers Association | taxpayer | Other groups | Anchor for the state scale's right end (the two major parties and the Howard Jarvis Taxpayers Assn.); state axis +1.00 (computed from 10 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| California Labor Federation | labor | Labor | state axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| California Chamber of Commerce | business | Business | No Nov 2026 positions could be read; the org has no effect on any score. |
| ACLU of Northern California | civil-rights | Other groups | state axis not scored: fewer than 3 measures with a yes/no position where the anchors split |
| League of Women Voters of California | good-government | Other groups | state axis -0.71 (computed from 12 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |
| California Teachers Association | labor | Labor | state axis -0.60 (computed from 5 measures where the anchors split; +1 = always with the right anchors, -1 = always with the left anchors) |