Decisions, per run
x_decisionsrelease v0.7.1CC0 1.0
About
Extraction table: one row per Board item per run (DATA_ARCHITECTURE.md 7.2), with the columns the existing runs filled; the rest are empty until decisions v2 lands in the same shape.
- How far to trust it
- The release passed its automatic checks before it was published (what is checked). A hand check by the editor of qipu data is under way: 36 of 38 items checked so far were right, on votes, money, places and the map. A row says what the record states; the scanned page is the authority. Details
- Licence
- CC0 1.0: use it for anything, no permission needed. The scans and other sources keep their own rights.
- Version
- v0.7.1, published 21 October 2026. A published release is never changed; corrections come as a new release.
Technical details
- Table
- x_decisions
- Rows
- 748,894 (San Francisco 748,894)
- Columns
- 50
- Parquet
- x_decisions.parquet, 94.0 MB
- Version
- v0.7.1, 21 October 2026
- Licence
- CC0 1.0. Sources keep their own rights.
Rows
Rows by run_id
| Value | Rows | Share | |
|---|---|---|---|
| sf-v21-haiku-1014 | 475,800 | 63.5% | |
| bos-corpus-2026-09 | 161,015 | 21.5% | |
| resweep-d1970-haiku55-2026-10 | 42,505 | 5.7% | |
| resweep-d2010-haiku55-2026-10 | 25,476 | 3.4% | |
| resweep-d2000-haiku55-2026-10 | 21,060 | 2.8% | |
| resweep-d1960-haiku55-2026-10 | 17,398 | 2.3% | |
| resweep-d1990-haiku55-2026-10 | 3,420 | 0.5% | |
| resweep-d1980-haiku55-2026-10 | 2,220 | 0.3% |
Rows by kind
| Value | Rows | Share | |
|---|---|---|---|
| resolution | 282,043 | 37.7% | |
| ordinance | 209,955 | 28.0% | |
| (empty) | 112,079 | 15.0% | |
| motion | 46,920 | 6.3% | |
| hearing | 24,348 | 3.3% | |
| claim | 20,652 | 2.8% | |
| other | 19,068 | 2.5% | |
| appointment | 9,074 | 1.2% | |
| charter_amendment | 8,356 | 1.1% | |
| contract | 7,910 | 1.1% | |
| communication | 6,179 | 0.8% | |
| ballot_measure | 1,644 | 0.2% |
Rows by stage
| Value | Rows | Share | |
|---|---|---|---|
| (empty) | 481,535 | 64.3% | |
| adopted | 159,972 | 21.4% | |
| final | 55,566 | 7.4% | |
| first reading | 49,741 | 6.6% | |
| hearing | 2,080 | 0.3% |
Method and accuracy
| Field | Made by | How well it is known |
|---|---|---|
| x_decisions v2 money currency (SF) | fixed in the build | the run's writer stamps CAD on every amount; SF amounts are relabelled USD in the release (run files unchanged); gate M1 fails any SF amount in CAD. |
| x_decisions run sf-v21-haiku-1014 / van-v21-haiku-1014 (decisions v2) | LLM, one call per page | agreement with an Opus-written key (L4_TEST.md, SF gold; not hand-checked; n = 115, a Wilson 95% interval on 0.95 is about 0.89-0.98): finds 0.95, number 1.00, action 0.95, vote counts 0.99, all three 0.95, vote names 0.95, mover 0.93, money F1 0.80, places F1 0.66, parties F1 0.61, dates F1 0.55, related F1 0.17 (new fields scored against an Opus key, not hand-checked). |
The release passed its automatic checks before it was published (what is checked). A hand check by the editor of qipu data is under way: 36 of 38 items checked so far were right, on votes, money, places and the map. A row says what the record states; the scanned page is the authority.
Columns 50
| Column | Type | Can be empty | Privacy | Public copy | Description |
|---|---|---|---|---|---|
| run_id | VARCHAR | no | none | as is | The extraction run that read the row (see runs).Values bos-corpus-2026-09, resweep-d1960-haiku55-2026-10, resweep-d1970-haiku55-2026-10, resweep-d1980-haiku55-2026-10, resweep-d1990-haiku55-2026-10, resweep-d2000-haiku55-2026-10, resweep-d2010-haiku55-2026-10, sf-v21-haiku-1014, van-v21-haiku-1014 |
| page_id | VARCHAR | no | none | as is | The archive.org page: <identifier>:<leafNum> (IA's leaf number, the jp2 / IIIF number), or <identifier>:d<n> where only the BookReader index is known, or <url>:<page> for a web document. nopage:<seq> where the source gives no page number (sfbos rows without one): the row is kept, page_url is NULL.Values e.g. journalofproceed30sanfrich:1 |
| page_url | VARCHAR | yes | none | as is | Opens the page: archive.org BookReader link built from the leaf map (audited against IA's scandata), or <pdf url>#page=<n> for a PDF. NULL only where page_id is nopage:<seq>.Values e.g. https://archive.org/details/journalofproceed30sanfrich/page/n1 |
| seq | VARCHAR | yes | none | as is | Row id inside the run: the corpus item id (<volume>|<n>) for v1 rows, the item's position on the page (1, 2, ...) for decisions v2 rows. |
| decision_id | VARCHAR | no | none | as is | The decision the row reads (see decisions); a v2 reading of a v1 item carries the v1 id. |
| year | BIGINT | yes | none | as is | Year of the Journal volume or meeting. |
| date | VARCHAR | yes | none | as is | Meeting date (YYYY-MM-DD) where known; empty on decisions v2 rows. |
| quote | VARCHAR | yes | raw text | left out under the embargo | The item's text as printed (v1: first 300 characters; v2: the quote the model copied). Empty (withheld in the public files for records under the privacy embargo (75 years in SF, 92 in Vancouver)). |
| heading_on_prev | VARCHAR | yes | free text | private people's names withheld under the embargo | v1 rows: the item's printed heading. Decisions v2 rows: true/false, whether the heading is on the previous page. Person-like names are withheld for records under the 75-year privacy filter (92 years in Vancouver). |
| kind | VARCHAR | yes | none | as is | Kind of item: resolution, ordinance, motion, contract, hearing, permit, appointment, claim, other, ...Values appointment, ballot_measure, charter_amendment, claim, communication, contract, hearing, license, motion, ordinance, other, resolution |
| number | VARCHAR | yes | none | as is | Resolution or ordinance number as printed (v1: parsed from the item's opening words, see decision_numbers; v2: read by the model). |
| file_no | VARCHAR | yes | none | as is | Board file number as printed. |
| stage | VARCHAR | yes | none | as is | Decisions v2: stage reached, from action_raw: adopted, final, first reading or hearing; empty for other actions and v1 rows.Values adopted, final, first reading, hearing |
| outcome | VARCHAR | yes | none | as is | Result: passed, refused, pending, referred, continued, vetoed, unknown, ... (v2: mapped from action_raw).Values amended, approved by voters, continued, passed, passed first reading, pending, referred, refused, rejected, rejected by voters, submitted_to_voters, tabled ... |
| action | VARCHAR | yes | none | as is | v1 corpus rows: what the Board did, as classified (ordered, voted-or-scheduled, granted, amended, refused, ...); v2 rows use action_raw.Values accepted, amended, appointed, appropriated, commended, granted, ordered, other, paid, refused, settled, voted-or-scheduled |
| continued_to | VARCHAR | yes | none | as is | Decisions v2: when the item was continued to, as printed (next meeting of Council, two weeks). |
| amended | BOOLEAN | yes | none | as is | Decisions v2: true when the item was amended on the pages read. |
| ayes_n | BIGINT | yes | none | as is | Ayes count as printed (v1: from the item's roll call in x_roll_calls; v2: read by the model). |
| noes_n | BIGINT | yes | none | as is | Noes count as printed (v1: from the item's roll call; v2: read by the model). |
| absent_n | BIGINT | yes | none | as is | Absent count as printed (v1: from the item's roll call; v2: read by the model). |
| ayes | VARCHAR[] | yes | a public official | as is | Surnames voting aye, as printed (v1: from x_roll_call_votes; v2: read by the model). |
| noes | VARCHAR[] | yes | a public official | as is | Surnames voting no, as printed (v1: from x_roll_call_votes; v2: read by the model). |
| absent | VARCHAR[] | yes | a public official | as is | Surnames absent or excused, as printed (v1: from x_roll_call_votes; v2: read by the model). |
| mover | VARCHAR | yes | a public official | as is | Decisions v2: surname of the member who moved the deciding motion, as printed. |
| seconder | VARCHAR | yes | a public official | as is | Decisions v2: surname of the member who seconded the deciding motion, as printed. |
| parties_text | VARCHAR | yes | free text | private people's names withheld under the embargo | Re-swept rows: the parties involved, written by a model. Person-like names are withheld for records under the 75-year privacy filter (92 years in Vancouver). |
| money_text | VARCHAR | yes | free text | private people's names withheld under the embargo | v1 corpus rows: amounts printed in the item, as text. |
| places_text | VARCHAR | yes | free text | private people's names withheld under the embargo | Place as written: the re-sweep model's place text, or the v1 streets joined with & . Person-like names are withheld for records under the 75-year privacy filter (92 years in Vancouver). |
| block | VARCHAR | yes | none | as is | v1 corpus rows: assessor block the 2026-09 pipeline placed the item on. |
| topic | VARCHAR | yes | none | as is | v1 rows: topic label (running-the-city, admin, the-street, land-and-building, ...); v2 rows use topics. |
| subtopic | VARCHAR | yes | none | as is | v1 corpus rows: finer topic (vote-or-scheduling, zoning, city-buys-land, ...). |
| plain | VARCHAR | yes | free text | private people's names withheld under the embargo | One-line plain summary, written by a model (check the scan). Person-like names are withheld for records under the 75-year privacy filter (92 years in Vancouver). |
| record_type | VARCHAR | yes | none | as is | v1 corpus rows: what the text is (decision, vote-outcome-only, public-comment, cut-in-half, page-furniture, index-row, ...).Values cut-in-half, decision, departmental-work, index-row, page-furniture, public-comment, too-damaged, vote-outcome-only |
| classified_by | VARCHAR | yes | none | as is | v1 corpus rows: what the 2026-09 classification went by (form, rule, title, purpose-clause, record, near-duplicate, fund).Values form, fund, near-duplicate, purpose-clause, record, rule, title |
| confidence | DOUBLE | yes | none | as is | Decisions v2: 0-1 from rule checks: 1.0 quote found on the page, 0.7 found loosely, 0.4 not found; x0.8 for action other or noes count not matching names. |
| scan_url | VARCHAR | yes | none | as is | Link to the page: the archive.org scan or the minutes URL. |
| page_exact | BOOLEAN | yes | none | as is | True when the archive.org page number was converted from the OCR leaf with the per-volume leaf map; false = may be a page or two off. |
| action_raw | VARCHAR | yes | none | as is | Decisions v2: the last action on the pages read, as the model chose it (adopted, passed_final, referred, continues_next_page, ...).Values adopted, amended, continued, continues_next_page, failed, hearing_held, ordered_submitted_to_voters, other, passed_final, passed_first_reading, referred, tabled ... |
| department | VARCHAR | yes | free text | private people's names withheld under the embargo | Decisions v2: the department, board, officer or committee that reported or requested the item, as printed. |
| parties | STRUCT("name" VARCHAR, "role" VARCHAR)[] | yes | nested | field by field (below) | Decisions v2: private parties named, with their role. Empty in the public files under the privacy embargo (75 years SF, 92 Vancouver): every row in v0.4. |
| money | STRUCT(amount DOUBLE, currency VARCHAR, purpose VARCHAR, payee VARCHAR, direction INTEGER, value_year BIGINT, amount_2026 DOUBLE, index_used VARCHAR)[] | yes | nested | field by field (below) | Decisions v2: each amount with currency (USD SF, CAD Vancouver), purpose and payee as read by the model; direction is empty. payee is not name-filtered. |
| places | STRUCT("text" VARCHAR, street VARCHAR, number VARCHAR, from_street VARCHAR, to_street VARCHAR, block VARCHAR, lot VARCHAR, area VARCHAR, "precision" VARCHAR)[] | yes | nested | field by field (below) | Decisions v2: each place as printed, with street, number, from/to street, block, lot, area and precision. |
| zoning | STRUCT(from_district VARCHAR, to_district VARCHAR)[] | yes | nested | field by field (below) | Decisions v2: a zoning change, from_district and to_district as printed. |
| related | STRUCT(relation VARCHAR, ref_number VARCHAR)[] | yes | nested | field by field (below) | Decisions v2: numbers of other measures the item amends or refers to (relation is always refers_to). |
| dates | STRUCT(date VARCHAR, "role" VARCHAR)[] | yes | nested | field by field (below) | Decisions v2: dates that set or schedule the decision, with role (effective, continued_to, hearing, deadline, other). |
| topics | VARCHAR[] | yes | none | as is | Decisions v2: topics chosen by a model from a fixed list (housing, whats-being-built, parks, transit, ...). |
| city | VARCHAR | no | none | as is | sf or van.Values sf, van |
| privacy_flag | VARCHAR | yes | none | as is | may_name_private_person_after_1950 on rows from 1952 on that have a quote.Values may_name_private_person_after_1950 |
| decision_group | VARCHAR | yes | none | as is | One id per printed item (v0.6.1; see decisions.decision_group). |
| row_key | VARCHAR | no | none | as is | <run_id>/<page_id>/<seq>. |
Privacy: what kind of text the column holds. Public copy: what the published file does with it; the embargo covers records after 1951.
Preview
| run_id | page_id | page_url | seq | decision_id | year | date | quote |
|---|---|---|---|---|---|---|---|
| bos-corpus-2026-09 | journalofproc…2sanfrich:682 | archive.org/deta…nfrich/page/n679 ↗ | journalofproceed34part2sanfrich|273 | decision/jour…2sanfrich|273 | 1939 | 1939-10-16 | Resolution No. 588, as follows: Resolved. That certain dia… |
| bos-corpus-2026-09 | journalofproceed25sanfrich:192 | archive.org/deta…nfrich/page/n191 ↗ | journalofproceed25sanfrich|154 | decision/jour…5sanfrich|154 | 1930 | 1930-01-20 | Ordinance, is hereby changed so as to place the property f… |
| bos-corpus-2026-09 | journalofproc…sanfrich:1482 | archive.org/deta…frich/page/n1482 ↗ | journalofproceed22sanfrich|1610 | decision/jour…sanfrich|1610 | 1927 | 1927-08-01 | Ordinance No. 1061, entitled "Regulating the Width of Side… |
| bos-corpus-2026-09 | journalofproc…6sanfrich:117 | archive.org/deta…nfrich/page/n116 ↗ | journalofproceed1916sanfrich|97 | decision/jour…16sanfrich|97 | 1916 | 1916-01-31 | Resolution No. (New Series), as follows: Resolved, That pe… |
| bos-corpus-2026-09 | journalofproc…4sanfrich:879 | archive.org/deta…nfrich/page/n879 ↗ | journalofproceed1914sanfrich|1037 | decision/jour…sanfrich|1037 | 1914 | 1914-07-21 | Resolution No. 11046 (New Series), as follows: Resolved, T… |
| bos-corpus-2026-09 | journalofproc…8sanfrich:187 | archive.org/deta…nfrich/page/n184 ↗ | journalofproceed1918sanfrich|274 | decision/jour…8sanfrich|274 | 1918 | 1918-02-25 | Ordinance of said I City and County of San Francisco, said… |
| bos-corpus-2026-09 | journalofproc…sanfrich:1845 | archive.org/deta…frich/page/n1845 ↗ | journalofproceed21sanfrich|2402 | decision/jour…sanfrich|2402 | 1926 | 1926-11-08 | Resolution No. 26410 (New Series), as follows: Resolved, T… |
| bos-corpus-2026-09 | journalofproc…sanfrich:1731 | archive.org/deta…frich/page/n1731 ↗ | journalofproceed23sanfrich|2207 | decision/jour…sanfrich|2207 | 1928 | 1928-08-13 | Resolution No. 28175 (New Series), for premises on the sou… |
8 of 50 columns shown. Eight rows sampled at build time, from the years up to 1951. Hover a shortened value for all of it.
Download
| Format | File | Size |
|---|---|---|
| Parquet | x_decisions.parquet ↗ | 94.0 MB |
| SQLite (all tables) | qipu_sf.db ↗ | 6.44 GB |
SQL
Run in the SQL console (DuckDB in the browser, over the Parquet file).