Lage.Bonn Evaluation

OKR

Cycle 2026-08 · 2026-08-01 → 2026-08-31 · window 30d · generated

active · 15d left

One Objective per civic question in VISION.md — the four journeys are the north star, the KRs are the next honest notch on each. Source of truth: docs/okr/2026-08.md. 0.7 is success, not failure.

O1 · Journey 1 (Lena, Münsterplatz) · event ≠ report ≠ claim

Show me the gap, don't pick a winner
0.23
1/3 KR auto-measured

A resident opens one Ereignis and sees the competing accounts side by side, each bound to its source and honestly labelled.

KR1.1 lage-3esj.1
progressing

Confirmed events spanning ≥2 distinct sources

baseline 4% now 6% target 10%
KR1.2 lage-3esj.2
not auto-measured

Bericht exists as a distinct entity bound to an Ereignis, and ≥1 confirmed event renders ≥2 reports side by side on /ereignisse

baseline: 0 (no Bericht entity in src/lage) · target: binary: shipped · via code + live page
KR1.3 lage-3esj.3
not auto-measured

Every rendered report carries a visible verification level (amtlich / redaktionell / unbestaetigt / auto-extrahiert / abgeleitet)

baseline: n/a — levels not modelled · target: 0 reports rendered without a level · via gate metric

O2 · Journey 2 (Tomas, pothole) · link, don’t copy

From my street to who decided it
1.00
1/3 KR auto-measured

An Anliegen on the map leads to a named responsible body and, where one exists, to the actual council decision behind it.

KR2.1 lage-p6pi.1
not auto-measured

Akteur is a first-class entity carrying source + provenance, populated with Bonn administrative units

baseline: 0 (docs only) · target: ≥ 10 Akteure, each with source + observation date · via store query, exposed on /api/kpi/product
KR2.2 lage-p6pi.2
met

Open311 Anliegen resolved to a responsible Akteur

baseline 0% now 65% target 60%
KR2.3 lage-p6pi.3
not auto-measured

≥1 end-to-end chain live: Anliegen → Akteur → OParl Beschluss, as a deep link into the OParl record

baseline: 0 · target: binary: ≥1 chain reachable from /karte · via live page

O3 · Journey 3 (Amara, cycling) · provenance is first-class

A number I can do something about
0/3 KR auto-measured

An Indikator and the Angebote that address it sit in the same view.

KR3.1 lage-4fli.1
not auto-measured

Indikator entity exists with the Radverkehr time series (opendata.bonn.de Fahrradmessstellen), each observation carrying source + observation date

baseline: 0 (docs only) · target: binary: ≥1 indicator, ≥12 observations · via store query
KR3.2 lage-4fli.2
not auto-measured

Angebote linked via an addresses relation to an indicator and rendered beside it on /fahrradfahren

baseline: 0 · target: ≥ 3 Angebote rendered · via live page
KR3.3 lage-4fli.3
not auto-measured

Provenance gate extends to the new types: indicators and offers rendered without source + as-of date

baseline: n/a · target: 0 violations · via gate metric

O4 · Journey 4 (Jonas, tram) · what Lage computes itself is abgeleitet

Bin ich betroffen?
0.00
2/3 KR auto-measured

Disruption events answer the question the reader actually has — with the label that lets them distrust the answer in proportion.

KR4.1 lage-ozim.1
not auto-measured

Mobility index (OSM + GTFS) productionized out of sandbox/ into src/lage, with a reproducible offline build

baseline: spike only (sandbox/sndbx-mobility-graph/) · target: binary: build runs in CI, query is pure-python runtime · via repo + CI
KR4.2 lage-ozim.2
at baseline

Confirmed verkehr / Baustelle events carrying a derived affectedness edge (modes + lines + stops)

baseline 0% now 0% target 40%
KR4.3 lage-ozim.3
gate ✓

Derived edges naming their inputs — dataset, licence, index build timestamp — and tagged abgeleitet

gate · unlabelled = 0 · target 100%; 0 unlabelled derived assertions

Health guardrails (must not regress)

Metric Current Guardrail Status
lage_items_without_provenance 0 stays 0 manual
source_freshness.sources_fail 0 = 0 ok
coverage.ratio (Ortsteile) 96% ≥ 0.95 ok
localizability.ratio_ortsteil_precise 54% ≥ 0.50 ok
Return-rate KPI (Umami, visit recency bucket) see docs/kpi/return-rate.md no decline manual