Skip to main content
Friday, September 25, 2026Minnesota Edition

Sample data — illustrative mockup. Counts, scores and hashes are placeholders until the ledger is live.

Methodology · Forecast ledger

Every forecast, sealed before the vote. Every miss, kept on the record.

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

Forecasts scored

since Oct 2026 · Illustrative

+0.30

Skill over base rate

Brier skill score · Illustrative

84%

Decided inside timeline band

target: 80% (P10–P90) · Illustrative

Do the bands mean what they say?

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.

Five bands, sitewide

  1. 1Lownest Low
  2. 2Guardednest Low
  3. 3Moderatenest Moderate
  4. 4Elevatednest High
  5. 5Highnest High

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.

Illustrative early nest · promise ranges are not locked cut points
  • 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

Scorecard by jurisdiction

Brier score: lower is better. Baseline = always forecasting the board's base rate. Skill = 1 − Boule Brier ÷ baseline Brier.

Illustrative jurisdiction scorecard. Plymouth is under 30 scored forecasts and is marked too early to judge.
Jurisdiction · bodyForecastsApproved (base rate)Baseline BrierBoule BrierSkill
MinneapolisBoard of Adjustment16487%0.1130.071
+0.37
St. PaulBoard of Zoning Appeals9890%0.0900.064
+0.29
EdinaCity Council5285%0.1280.094
+0.27
BloomingtonPlanning Commission7189%0.0980.074
+0.24
PlymouthBoard of Zoning Adjustmentstoo early2793%0.0650.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.

The ledger

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

Illustrative sealed forecasts. Hashes are truncated placeholders, not live digests.
SealedAgenda itemBandTimeline bandResultSeal
Oct 01Lot coverage variance, R-3Minneapolis · Board of Adjustment · hearing Oct 02Moderate38–61 daysPending9f2c…e41a
Sep 15Front setback variance, R-4Minneapolis · Board of Adjustment · decided Sep 18High44–72 daysHit51ab…07dd
Sep 12Rezoning T2 to T3, University AveSt. Paul · Planning Commission · decided Sep 16Low55–95 daysHitc07e…9b30
Sep 05Conditional use permit, drive-throughBloomington · Planning Commission · decided Sep 09Low40–66 daysMiss7d19…a2f4
Sep 01Side-yard setback variance, R-1APlymouth · Board of Zoning Adj. · decided Sep 04Low30–52 daysHite3a0…5c11
Aug 25Parking variance, adaptive reuseSt. Paul · Board of Zoning Appeals · decided Aug 28Moderate41–70 daysHit2b64…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

Check a seal yourself

  1. Download the day's forecast file from the public ledger repository.
  2. Hash it and compare with the digest published before the hearing.
  3. Confirm the digest's timestamp token predates the meeting.
sha256sum ledger/2026-10-01.jsonl

Sample 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.

Terms

Boule Intel · Minneapolis, MN

Decision support built on public records. Not legal advice. Terms · About