# Verifikation der Köln-Studie 2026

## 1. Reproduzier-Hashes (SHA-256)

Die folgenden Datei-Hashes fixieren den Datensatz-Stand der Köln-Studie zum 2026-05-04. Jede dritte Partei kann mit `sha256sum` (Linux/macOS) oder `Get-FileHash` (Windows-PowerShell) prüfen, dass die heruntergeladene Datei mit dem hier dokumentierten Stand übereinstimmt.

| Datei | SHA-256 |
|---|---|
| `anonymized-locations-koeln.jsonl` | `58ae0096b838d384ada5a943e423e358aeafeae0928d9fe48d1b21be50355bfe` |
| `aggregate-koeln.json` | `7fea6f34e6822388d2821147d57e550889ee8b0616d3985ba6e4d2d42ad9052b` |
| `clean-quotes.json` | `287087467497f5a9923e292183f58710105c99d8264fbc497e18dfae50756a1c` |

**Verifikation auf Windows (PowerShell):**

```powershell
Get-FileHash anonymized-locations-koeln.jsonl -Algorithm SHA256
```

**Verifikation auf Linux/macOS:**

```bash
sha256sum anonymized-locations-koeln.jsonl
```

Erwartetes Ergebnis: exakter Match mit dem Hash oben.

## 2. Blockchain-Zeitstempel via OpenTimestamps

OpenTimestamps (https://opentimestamps.org) ist ein offener Standard, der Datei-Hashes über Bitcoin-Blockchain-Commits unveränderlich an einen konkreten Zeitpunkt bindet. Der Prozess ist kostenfrei und exakt das Verfahren, das auch für die separat veröffentlichte DACH-Studie 2026 angewendet wurde.

### Status der Stamps

**Erstellt am 2026-05-04 00:39 lokal via opentimestamps.org Web-UI, upgraded am 2026-05-04 19:25 lokal.** Die `.ots`-Proof-Dateien liegen unter `timestamp Bitcoin chain/`:

| Datei | Größe | Status |
|---|---|---|
| `anonymized-locations-koeln.jsonl.ots` | 3.376 Bytes | **Bitcoin-Block-verankert** (upgraded) |
| `aggregate-koeln.json.ots` | 3.341 Bytes | **Bitcoin-Block-verankert** (upgraded) |
| `clean-quotes.json.ots` | 3.306 Bytes | **Bitcoin-Block-verankert** (upgraded) |

Die ursprünglichen Pending-Stamps liegen als `.bak` parallel (analog zur DACH-Studien-Struktur). Damit ist die Verifikation Calendar-Server-unabhängig — der Bitcoin-Block-Header ist direkt in der `.ots`-Datei eingebettet.

### Erstellung der Stamps (Anleitung für künftige Studien)

**Variante A — Web-UI (empfohlen, kein Software-Setup):**

1. https://opentimestamps.org öffnen
2. Folgende drei Dateien einzeln hochladen (es wird nur der Hash übertragen, keine Daten):
   - `anonymized-locations-koeln.jsonl`
   - `aggregate-koeln.json`
   - `clean-quotes.json`
3. Pro Datei wird eine `.ots`-Proof-Datei zum Download angeboten — herunterladen und im Verzeichnis `D:/tmp/2026-05-03_koeln_study/timestamp Bitcoin chain/` ablegen

**Variante B — CLI (nur falls Python-OTS-Client lauffähig):**

```bash
pip install opentimestamps-client
ots stamp anonymized-locations-koeln.jsonl
ots stamp aggregate-koeln.json
ots stamp clean-quotes.json
```

**Aktueller Status auf diesem Setup:** Python-OTS-Client v0.7.2 ist installiert (`pip show opentimestamps-client`), wirft aber unter Python 3.9 + Windows einen `ctypes.cdll.LoadLibrary`-Fehler beim Bitcoin-Modul-Import. Daher ist die Web-UI-Variante der zuverlässige Pfad.

### Upgrade-Schritt (3-6 Stunden später, einmalig)

Die Web-UI-Stamps sind zunächst im Pending-Status (Calendar-Server-Attestation). Sobald Bitcoin einen Block mit der Commit-Transaktion aufgenommen hat, einmal `ots upgrade` ausführen:

```bash
ots upgrade anonymized-locations-koeln.jsonl.ots
ots upgrade aggregate-koeln.json.ots
ots upgrade clean-quotes.json.ots
```

Danach ist der Proof permanent — keine weitere Calendar-Server-Abhängigkeit.

### Verifikation durch Dritte

Nach dem Upgrade kann jede Partei mit eigener OTS-Installation und einem Bitcoin-Node (oder vertrauenswürdigen Block-Explorer) die Verankerung unabhängig überprüfen:

```bash
ots verify anonymized-locations-koeln.jsonl.ots -f anonymized-locations-koeln.jsonl
```

**Was das beweist:** Die drei Dateien existierten in genau diesem Inhalt bereits zum Zeitpunkt des Bitcoin-Blocks der Verankerung. Es gibt keine Möglichkeit, die Studie nachträglich zu manipulieren ohne die Verankerung zu invalidieren.

## 3. Methodische Reproduzierbarkeit

Die Studie kann methodisch reproduziert werden — alle Pipeline-Skripte sind in diesem Verzeichnis dokumentiert:

| Skript | Zweck |
|---|---|
| `fetch-polygons-koeln.mjs` | OSM-Bezirks-Polygone (admin_level=9) + Stadtteilgrenzen (admin_level=10) |
| `fetch-osm-koeln.mjs` | OSM-Sites-Query in Köln-Bbox |
| `enrich-koeln.mjs` | Polygon-in-Point-Mapping pro Site → Bezirk + Stadtteil |
| `scan-koeln.mjs` | Parallel-Scanner (6 Worker, Playwright, transparenter User-Agent) |
| `fix-unmapped-koeln.mjs` | Centroid-Nearest-Fallback für border-cases |
| `aggregate-koeln.mjs` | Aggregate je Bezirk / Stadtteil / Branche / Branche×Bezirk |
| `compute-and-export-clean.mjs` | Beanstandungs-frei-Quoten (weich + streng) |
| `anonymize-koeln.mjs` | Anonymisierung: SHA256-Hash der Hostnamen, Entfernung identifizierender Attribute |

Bei einer Reproduktion wären die OSM-Daten nicht 1:1 reproduzierbar (OSM ist ein lebendiger Datensatz, jeder Snapshot unterscheidet sich), aber die Methodik ist identisch reproduzierbar. Der Stand der OSM-Snapshots zum Studien-Zeitpunkt ist via Hash-Verankerung dokumentiert.

## 4. Lizenz

Die anonymisierten Rohdaten + die Studie selbst stehen unter **CC BY 4.0** zur Verfügung. Bedingung: Namensnennung (Thorsten Ahrens / Serahr) und Verlinkung der Originalquelle (`https://serahr.de/studie/koeln/2026`).

Bei wissenschaftlichen Zweitanalysen freut sich der Autor über einen Hinweis an `studie@serahr.de`.
