412
Forecasts scored
since Oct 2026 · Illustrative
Sample data — illustrative mockup. Counts, scores and hashes are placeholders until the ledger is live.
Methodology · Forecast ledger
We publish a risk band and timeline band for each covered agenda item before its hearing, lock it with a public timestamp, and score it against the board's decision. Nothing is edited after the fact.
The lead numbers are skill over each board's historical approval rate, and the share of decisions that land inside the timeline band. Raw accuracy is not a headline. A model that always says approved is the trap that rate sets up. It is not the baseline.
412
since Oct 2026 · Illustrative
+0.30
Brier skill score · Illustrative
84%
target: 80% (P10–P90) · Illustrative
Each band promises an approval-rate range. The dot is what boards actually decided for items we put in that band. A dot inside its shaded range means the band is honest.
Base rate across all items in this sample: 88% approved, so a model that always says approved is right 88% of the time. The skill score compares us with a forecaster who always predicts each board's base rate.
skill = 1 − Boule Brier ÷ baseline Brier. Lower Brier is better.
Until each of the five has at least 30 scored forecasts (n ≥ 30), the chart publishes three groups: (1+2) → Low, 3 → Moderate, (4+5) → High. A band that reaches 30 gets its own row. Until then it stays inside its group, or, if listed alone, is marked too early to judge — the same rule as the jurisdiction scorecard. The three names on the chart are that publishing nest. They are not a second scale.
This chart is the early state. Guarded and Elevated are not drawn as their own rows. The promise ranges, the dots, and the counts are illustrative.
Low
1 Low and 2 Guarded
Promise 90–100% · observed 96%
96%288 forecasts
Moderate
3 Moderate
Promise 65–90% · observed 79%
79%86 forecasts
High
4 Elevated and 5 High
Promise 0–65% · observed 42%
42%38 forecasts
Brier score: lower is better. Baseline = always forecasting the board's base rate. Skill = 1 − Boule Brier ÷ baseline Brier.
| Jurisdiction · body | Forecasts | Approved (base rate) | Baseline Brier | Boule Brier | Skill |
|---|---|---|---|---|---|
| MinneapolisBoard of Adjustment | 164 | 87% | 0.113 | 0.071 | +0.37 |
| St. PaulBoard of Zoning Appeals | 98 | 90% | 0.090 | 0.064 | +0.29 |
| EdinaCity Council | 52 | 85% | 0.128 | 0.094 | +0.27 |
| BloomingtonPlanning Commission | 71 | 89% | 0.098 | 0.074 | +0.24 |
| PlymouthBoard of Zoning Adjustmentstoo early | 27 | 93% | 0.065 | 0.058 | +0.11 |
Jurisdictions with fewer than 30 scored forecasts are shown but flagged as too early to judge. Plymouth is the specimen: the row stays visible, and the skill figure is not a judgment. Every count, rate, and Brier number in this table is illustrative.
Latest sealed forecasts. Misses stay here with the hits. Band names on these rows are the early nest. A row keeps the label it was sealed with.
6 sample rows
| Sealed | Agenda item | Band | Timeline band | Result | Seal |
|---|---|---|---|---|---|
| Oct 01 | Lot coverage variance, R-3Minneapolis · Board of Adjustment · hearing Oct 02 | Moderate | 38–61 days | Pending | 9f2c…e41a |
| Sep 15 | Front setback variance, R-4Minneapolis · Board of Adjustment · decided Sep 18 | High | 44–72 days | Hit | 51ab…07dd |
| Sep 12 | Rezoning T2 to T3, University AveSt. Paul · Planning Commission · decided Sep 16 | Low | 55–95 days | Hit | c07e…9b30 |
| Sep 05 | Conditional use permit, drive-throughBloomington · Planning Commission · decided Sep 09 | Low | 40–66 days | Miss | 7d19…a2f4 |
| Sep 01 | Side-yard setback variance, R-1APlymouth · Board of Zoning Adj. · decided Sep 04 | Low | 30–52 days | Hit | e3a0…5c11 |
| Aug 25 | Parking variance, adaptive reuseSt. Paul · Board of Zoning Appeals · decided Aug 28 | Moderate | 41–70 days | Hit | 2b64…f98e |
Pending means the decision is not scored yet. The Oct 01 row is the specimen: the seal is already on the row, and the forecast file is not public yet. The Sep 05 row is the specimen miss. Filters show that miss alone, or beside the hits. Nothing is dropped to improve a view.
Fingerprint first
sha256sum ledger/2026-10-01.jsonlSample path. Not a live file.
The digest and the RFC 3161 timestamp token are public before the hearing. The file those commands hash is public after the decision. A pending row can show its seal. It cannot yet offer the file.
Repository rules: signed commits, a force-push-protected main branch, and a mirror on a second host. OpenTimestamps is not part of the first setup. The public ledger repository is not published yet, so there is no repository to open and no forecast file to download.
Operating rule, once the ledger is live: updated daily, and the scorecard recomputed after each decision. The CSV is this sample table, not a dump of unreleased forecasts.