{
  "dataFormat": "spatialagents-benchmark-08-public-1.4.0",
  "benchmark": "SpatialAgents Benchmark 08",
  "task": {
    "title": {
      "de": "Integrierte Multi-Hazard- und Klimarisikoanalyse für Stuttgart",
      "en": "Integrated multi-hazard and climate-risk analysis for Stuttgart"
    },
    "prompt": {
      "de": "## Auftrag\n\nDas **Amt für Umweltschutz und Katastrophenvorsorge der Stadt\nStuttgart** braucht eine integrierte Multi-Hazard- und Klimarisiko-\nBewertung für das Stadtgebiet. Stuttgarts Kessellage, das Neckartal,\ndie Hanglagen am Rand und der städtische Wärmeinsel-Effekt machen den\nStandort besonders aussagekräftig — sechs Naturgefahren wirken hier\nräumlich sehr unterschiedlich, und der Klimawandel verändert das\nBild bis 2050 zusätzlich.\n\nDu sollst diese Analyse end-to-end durchführen — von der Daten-\nbeschaffung über die Berechnung der Gefahren-Indizes bis zu einer\npublikationsreifen Karten-Komposition und einem schriftlichen\nBericht. Die Bewertung soll vier Kernfragen beantworten:\n\n1. **Topografie & Gefahren**: Welche räumlichen Muster zeigen die\n   sechs Naturgefahren über das Stadtgebiet?\n2. **Multi-Geometrie-Exposition**: Welche Restaurants (Punkte),\n   Gebäude (Polygone) und Straßenabschnitte (Linien) sind dem\n   Hochwasser-Risiko am stärksten ausgesetzt?\n3. **Statistik & Komposit-Bewertung**: Wie korrelieren die Gefahren\n   untereinander, wie verteilen sich die Werte, und wie sieht ein\n   gewichteter Komposit-Score aus?\n4. **Klima-Projektion**: Wie verschiebt sich das Risikobild unter\n   RCP 4.5 und RCP 8.5 bis 2050?\n\n## Bibliotheks-Empfehlung und Skill-Konsultation\n\nFür die geodatenbasierten Berechnungen sollst du primär die\n**`geo-api`-Bibliothek** nutzen — sie bündelt unter `GeospatialRaster`\nund `GeospatialVector` genau die Datenquellen (OSM, Microsoft\nPlanetary Computer, DWD/CORDEX, Open-Meteo) und Algorithmen (Terrain-\nDerivate, Spectral Indices, Zonal Statistics, Routing), die du hier\nbrauchst. Lies dazu **vor der ersten Code-Aktion** den Skill\n`geo-api`. Wo `geo-api` keinen direkten Algorithmus hat (z.B.\nspezielle Vektor-Operationen, statistische Aggregationen), entscheide\nselbst über Fallback-Pakete — die Skills `geopandas-shapely`,\n`xarray-rioxarray`, `rasterio`, `grass-gis`, `gdal-binaries`,\n`pyproj` und `qgis-styles` sind verfügbar und sollen ergänzend\nkonsultiert werden wenn die Aufgabe es erfordert.\n\nFür QGIS-Visualisierung (Layer-Tree, Styling, Screenshots, Bookmarks,\nLayout) nutze die **QGIS-MCP-Bridge** über den Skill\n`spatial-agent-bridge`. Den Workflow-Skill `bench` (Coverage-Tasks-\nSektion) **musst** du auch konsultieren — er beschreibt das\nRESULT.json-Schema und den Self-Review-Loop für Screenshots.\n\nTool-Wahl ist explizit deine Entscheidung — der Prompt schreibt\nkeine konkreten Funktions- oder Modul-Namen vor. Begründe in deinem\ninitialen Plan kurz, welchen Pfad du gehst und warum.\n\n## Vorgehen\n\nBeginne mit einem **schriftlichen Plan** (3–8 Sätze) in der\n`RESULT.json` unter `summary.plan` — welche Phasen du in welcher\nReihenfolge angehst, welche Skills du gelesen hast, welche\nDatenquellen du benutzt. Erst dann mit der Implementierung beginnen.\n\nErstelle früh die Verzeichnisstruktur:\n\n```\nartifacts/\n├── data/\n│   ├── basemaps/\n│   ├── osm/                  (Restaurants, Gebäude, Straßen, Bezirke)\n│   ├── terrain/              (DEM + Derivate)\n│   ├── hazards/              (6 Gefahren-Indizes + Komposit + Inundationszonen)\n│   ├── analysis/             (Sampling-Resultate, Aggregationen)\n│   └── climate/              (RCP-skalierte Resultate)\n├── charts/                   (matplotlib-PNGs)\n└── screenshots/              (QGIS-Screenshots)\n```\n\nSpeichere das QGIS-Projekt unter `artifacts/stuttgart_hazards.qgz`.\nSetze das Projekt-CRS bewusst (EPSG:25832 ist eine naheliegende Wahl\nfür Süddeutschland).\n\n## Phase 1 — Studiengebiet definieren und Basisdaten beschaffen\n\nBestimme das Studiengebiet: das Stadtgebiet Stuttgart mit den\numgebenden Höhenrücken (Bopser, Killesberg, Frauenkopf), insgesamt\neine BBox von ca. 10 × 10 km. Hole für dieses Gebiet:\n\n- ein digitales Höhenmodell mit ca. 30 m Auflösung (Copernicus\n  GLO-30 via Microsoft Planetary Computer ist Standard);\n- einen OSM-Basemap-Layer;\n- die OSM-Vektordaten: alle Restaurants (POI), alle Gebäude-\n  Polygone, das fahrbare Straßennetz, die Stadtbezirks-Grenzen.\n\nHinweis zur DEM-Beschaffung: lade nur den AOI-Ausschnitt herunter,\nnicht ganze Kachel-Stapel.\n\nOrganisiere die geladenen Layer in QGIS in einem sinnvollen Layer-\nBaum (Gruppen wie \"Terrain/Rohdaten\", \"Urban/Gebäude\", \"POI\",\n\"Verwaltung/Bezirke\", \"Basemaps\"). Style-Beispiele aus dem Skill\n`qgis-styles` sind willkommen.\n\nMache am Ende der Phase einen Übersichts-Screenshot.\n\n## Phase 2 — Terrain-Derivate\n\nAus dem DEM müssen die wichtigsten Geländeableitungen entstehen.\nMindestens nötig sind:\n\n- **Hangneigung** (Slope, in Grad)\n- **Exposition** (Aspect, 0-360°)\n- **topographische Position** (z.B. TPI auf ~330 m Fensterradius)\n- **topographic wetness index** (z.B. TWI)\n- **Ruggedness** (z.B. TRI)\n- **Profil-Krümmung**\n- **Höhe über nächstem Vorfluter** (HAND)\n- **Flow Accumulation**\n- **Hillshade** (für Visualisierung)\n\nWelche Library/welches Tool du verwendest, ist offen — `geo-api` hat\nfür viele davon einen `terrain`-Accessor, GRASS GIS bietet\nspezialisierte Module (siehe Skill `grass-gis`), GDAL-CLI hat ein\npaar Basics (siehe Skill `gdal-binaries`). HAND ist meist der\naufwändigste Schritt (Flow-Accumulation → Stream-Extraktion →\nvertikale Distanz).\n\n**Performance-Hinweis:** Watershed-Algorithmen (besonders HAND und\nFlow-Accumulation) können bei naiver Python-Implementierung auf\neinem 10×10 km / 30-m-DEM **mehrere zehn GB RAM** verbrauchen. Wenn\ndu merkst dass dein Prozess >20 GB RSS belegt, brich ab und wechsle\nden Pfad — GRASS GIS' `r.watershed` ist auf großen DEMs deutlich\nRAM-effizienter als Python-Pendants (zeit-tested C-Code).\nAlternativ kannst du den DEM vor der HAND-Berechnung downsamplen\n(~60 m statt 30 m halbiert die Pixel-Zahl und ein Viertel den RAM-\nBedarf). Dokumentiere die Wahl unter `summary.hazard_formulas`.\n\nStyle die Derivate so dass die Information klar wird: Hillshade als\nGraustufen-Hintergrund; Slope warm; TPI divergierend (Täler/Rücken);\nTWI sequenziell (trocken→nass); HAND sequenziell (nahe Vorfluter→\nhoch darüber).\n\nScreenshot der Derivate-Übersicht (Hillshade + halbtransparenter\nSlope ist ein guter Default).\n\n## Phase 3 — Sechs Gefahren-Indizes und ein Komposit\n\nBerechne aus den Terrain-Derivaten sechs normalisierte Gefahren-\nIndizes (jeweils auf [0,1] skaliert, 1 = höchste Gefahr) sowie einen\ngewichteten Komposit. Folgende Indizes mit folgenden physikalischen\nBegründungen sind erwartet:\n\n| Index | Was es modelliert | Empfohlene Komponenten |\n|---|---|---|\n| **Wind-Exposition** | Rücken und Westhänge sind Wind-exponiert | TPI, Westhang-Maß, relative Höhenposition, Slope |\n| **Frost-Risiko** | Kaltluft sammelt sich in Tälern und feuchten Senken | Talposition (Inverse von TPI), TWI, niedrige Höhenposition |\n| **Hochwasser-Risiko** | Tiefliegend nahe Vorflutern mit großem Einzugsgebiet | Inverse HAND, TWI, Flow-Accumulation |\n| **Hitzestress** | Niedrige Höhe + Südhang + Stadtfaktor | Höheninverse, Südhang-Maß, urbaner Faktor (Konstante) |\n| **Hangrutsch** | Steil + nass + konkav | Slope, TWI, Konkavität |\n| **Erosion (LS-Faktor)** | RUSLE-LS-Faktor aus Flow × Slope | Flow-Accumulation, Slope-Funktion |\n\nDie genauen Formeln und Gewichte sind dein Ermessen — orientiere dich\nan Standard-Literatur (RUSLE für Erosion, TPI für Wind, HAND für\nFlood). Dokumentiere die gewählten Formeln in der `RESULT.json`\nunter `summary.hazard_formulas`.\n\nKomposit: gewichtete Summe der sechs Indizes (deine Gewichts-Wahl,\nbegründet — typischerweise Flood + Heat höher in einer städtischen\nHitze-/Hochwasser-Domäne).\n\nScreenshots: pro „signature\"-Gefahr (Wind, Flood, Heat, Hangrutsch)\neine eigene Karte über Hillshade, plus eine Komposit-Übersichts-\nKarte.\n\n**Zusätzlich: HAND-basierte Inundations-Zonen** für drei Szenarien\n(1 m / 2 m / 5 m Wasserspiegel über nächstem Vorfluter). Die Zonen\nals Polygone exportieren (z.B. nach GPKG). Berechne und melde pro\nSzenario: geflutete Fläche (km²), Anzahl betroffener Gebäude,\nGesamtlänge betroffener Straßen (km).\n\n## Phase 4 — Multi-Geometrie-Exposition\n\nDrei verschiedene Geometrie-Typen sollen mit Hazard-Werten beprobt\nwerden. Das ist bewusst so gewählt — sie verlangen unterschiedliche\nRaster-zu-Vektor-Extraktionsmethoden:\n\n- **Restaurants (Punkte)**: für jeden Punkt die Werte aller 6 Gefahren\n  + Höhe + Slope ziehen. Daraus Komposit-Score pro Restaurant berechnen\n  (Gewichte sind deine Wahl, dokumentieren). Vier Risikoklassen\n  (Niedrig / Mittel / Hoch / Sehr Hoch).\n- **Gebäude (Polygone)**: pro Polygon den Hochwasser-Index aggregieren\n  (Zonal-Statistics oder Centroid-Sampling — wähle was sinnvoll ist).\n  Vier Risikoklassen.\n- **Straßen (Linien)**: pro Segment ebenfalls den Hochwasser-Index\n  aggregieren. Vier Risikoklassen, plus Linienbreite proportional\n  zum Score in der Visualisierung.\n\nExport aller drei Resultate jeweils als GPKG unter\n`artifacts/data/analysis/`. Die Restaurant-Resultate zusätzlich als\nGeoJSON und CSV.\n\nBezirks-Level-Aggregation: die Restaurants per Spatial-Join den\nStadtbezirken zuweisen, pro Bezirk Mittelwert/Anzahl/% Hochrisiko\nberechnen, als Choropleth-Polygone in QGIS visualisieren.\n\nScreenshots: pro Geometrie-Typ ein dedizierter Screenshot\n(Restaurants/Gebäude/Straßen jeweils nach Risikoklasse), plus\nBezirks-Choropleth, plus die drei Inundationszonen.\n\n## Phase 5 — Statistik und Charts\n\nGeneriere mindestens sieben Charts als PNG unter `artifacts/charts/`\n(matplotlib ist der naheliegende Default). Mindest-Inventar:\n\n1. Korrelations-Heatmap der 6 Gefahren über alle Restaurants (6×6,\n   Pearson, divergierende Farbskala mit annotierten Werten);\n2. Histogramm-Panel der 6 Gefahren (Verteilungs-Form je Hazard);\n3. Radar-Charts der Top-5 risikoreichsten Restaurants;\n4. Balkendiagramm Restaurant-Anzahl pro Risikoklasse;\n5. Scatter Höhe × Hochwasser-Score (mit Trendlinie);\n6. Boxplots pro Risikoklasse über alle 6 Gefahren;\n7. Klima-Vergleichs-Balkendiagramm (Baseline vs RCP 4.5 vs RCP 8.5).\n\nChart 7 wird in Phase 7 berechnet, kann aber als Skelett schon hier\nvorbereitet sein.\n\n## Phase 6 — Hochrisiko-Inspektion und Evakuierungs-Routing\n\nSelektiere die Restaurants mit Komposit-Score > 0.50. Zoome auf das\nräumliche Cluster der höchsten Konzentration und das einzelne\nRestaurant mit dem höchsten Score (eigene Screenshots).\n\nWähle die drei Restaurants mit dem höchsten Komposit-Score und\nberechne für jedes eine Fußgänger-Route zu einem sicheren Punkt\n(z.B. ein Punkt mit HAND > 10 m auf einem Höhenrücken). Die\nRouten-Berechnung kann über OSM-Routing erfolgen (`geo-api` hat\ndafür eine Routing-Komponente; alternativ OSMnx für Graph-basiertes\nRouting, siehe entsprechende Skills).\n\nIdentifiziere Routensegmente die durch Flood-prone-Bereiche\n(Hochwasser-Index > 0.5) laufen — das sind „vulnerable\" Segmente.\nReport: Routen-Länge, geschätzte Gehzeit, vulnerable Anteil.\n\nScreenshot der drei Routen mit Hervorhebung der vulnerable\nSegmente.\n\n## Phase 7 — Klimaprojektion (RCP 4.5 und RCP 8.5, Horizont 2050)\n\nWende für jeden Restaurant-Punkt Klima-Skalierungsfaktoren auf die\nbaseline-Gefahren-Werte an. Orientierungswerte für das CORDEX-\nEnsemble bis 2050 (Region Süddeutschland):\n\n| Gefahr | RCP 4.5 Faktor | RCP 8.5 Faktor | Richtung |\n|---|---|---|---|\n| Wind | ~1.00 | ~1.00 | statisch |\n| Frost | ~0.77 | ~0.55 | abnehmend |\n| Hochwasser | ~1.03 | ~1.07 | leicht steigend |\n| Hitze | ~1.80 | ~2.59 | stark steigend |\n| Hangrutsch | ~1.00 | ~1.00 | statisch |\n| Erosion | ~1.03 | ~1.07 | leicht steigend |\n\nDu kannst diese Faktoren direkt nutzen (Quelle: EURO-CORDEX\nEUR-11, MPI-M-MPI-ESM-LR, 2050) oder per `geo_api.ClimateDataApi`\nfeinere Werte holen wenn das mit deinem Workflow passt. Dokumentiere\nin `RESULT.json` welche Faktoren du benutzt hast.\n\nPro Restaurant: skaliere jede Gefahr (gedeckelt auf 1.0), berechne\nden Komposit neu, ordne neue Risikoklasse zu. Speichere die Resultate\nals CSV unter `artifacts/data/climate/`. Berichte die Klassen-\nVerschiebung (% in jeder Klasse pro Szenario).\n\nGeneriere Chart 7 mit den realen Daten. Screenshot: side-by-side\nRestaurants Baseline vs RCP 8.5 in QGIS.\n\n## Phase 8 — Finalisierung\n\nLayer-Baum für die Publikation aufräumen — eine saubere Hierarchie\nmit Analyse-Ergebnissen oben, Gefahren in der Mitte, Rohdaten/\nBasemap unten.\n\nFinaler Komposit-Screenshot: Hillshade + 2-m-Inundationszone\nsemitransparent + Gebäude nach Hochwasser-Risiko + Restaurants\nnach Komposit-Risikoklasse + Evakuierungs-Routen sichtbar.\n\nSchreibe einen Bericht unter `artifacts/RESULTS.md` (deutsch oder\nenglisch, deine Wahl) mit den üblichen Sektionen: Executive\nSummary, Studiengebiet, Methodik, Ergebnisse pro Phase, Klima-\nProjektionen, Empfehlungen. Charts via Markdown einbetten.\n\n## Self-Review-Loop für jeden Screenshot\n\nAus Skill `bench` PROTOCOL §10 (Coverage-Tasks): nach jedem\nScreenshot prüfe das Bild bevor du weiter gehst. Wenn du Claude Code\nbist, öffne das PNG mit deinem `Read`-Tool und prüfe visuell.\nWenn du Codex bist, nutze Bash + Python/PIL um die Pixel-Verteilung\nzu checken (ein `std < 5` deutet auf ein leeres/uniformes Bild hin).\nWenn der Screenshot die Erwartung nicht erfüllt (leer, falsch\nzentriert, falsche Layer sichtbar, identisch zur vorigen Phase),\nkorrigiere und schieße neu. Maximal zwei Retries pro Phase.\nDokumentiere Retries in `RESULT.json` unter `summary.review_notes[]`.\n\n## Screenshot-Regeln (verbindlich)\n\n- Führe nach jedem load_project zuerst eine map_navigation aus\n  (z. B. zoom_to_layer oder set_extent), bevor du den ersten\n  Screenshot machst — der Canvas-Extent ist nach dem Projektladen\n  in dieser Umgebung undefiniert und ergäbe ein leeres Bild.\n- Rufe get_map_screenshot IMMER mit expliziten Maßen auf:\n  `width=1600, height=1000` (dpi Default 96). Die Fenstergeometrie\n  ist in dieser Umgebung nicht verlässlich — verlasse dich nie auf\n  die Canvas-Größe.\n- Nutze NIEMALS `include_overlays=true` — der Widget-Grab-Pfad\n  liefert in dieser Umgebung leere Bilder. Map-Tips sind für diese\n  Aufgabe nicht erforderlich.\n- Prüfe nach jedem Screenshot den `content_hash` der Antwort: ist er\n  identisch zum vorherigen Screenshot, hat sich die Karte nicht\n  geändert — dann stimmt etwas mit Sichtbarkeit/Extent nicht\n  (Self-Review-Loop!).\n\n## RESULT.json — was rein muss\n\nDie RESULT.json muss dem Schema aus dem `bench`-Skill (PROTOCOL.md)\ngenügen — das verlangt auf oberster Ebene zwingend `task_id`,\n`run_index`, `mode`, `summary`, `hard_checks` **und `anti_checks`**.\nFür jede `anti.never:`-Regel dieser Task muss ein\n`anti_checks[]`-Eintrag mit `id`, `violation` und `evidence`\nexistieren — ein fehlender Eintrag wird als Verstoß gewertet.\n\nUnter `summary`:\n\n- `plan`: dein initialer Plan-String (siehe oben);\n- `phases_completed`: Array `[\"1\", \"2\", ..., \"8\"]`;\n- `data_sources_used`: Liste der Datenquellen-Endpunkte mit Versionen\n  (z.B. `{\"copernicus_glo30\": \"dem 1.0\", \"osm_overpass\": \"<date>\"}`);\n- `hazard_formulas`: Dict mit den von dir gewählten Formeln und\n  Gewichten pro Gefahr;\n- `climate_factors_used`: Dict mit den Skalierungsfaktoren je\n  Hazard für RCP 4.5 und RCP 8.5;\n- `composite_weights`: Dict mit deinen Gewichten für den Komposit-\n  Score pro Geometrie-Typ;\n- `screenshots_written`: Liste der relativen Pfade;\n- `charts_written`: Liste der relativen Pfade;\n- `inundation_stats`: Dict pro Szenario `{\"1m\": {\"area_km2\": ...,\n  \"buildings_affected\": ..., \"streets_km_affected\": ...}, \"2m\": {...},\n  \"5m\": {...}}`;\n- `risk_class_distribution`: Dict `{\"baseline\": {\"Niedrig\": <pct>,\n  \"Mittel\": <pct>, \"Hoch\": <pct>, \"Sehr Hoch\": <pct>}, \"rcp45\": {...},\n  \"rcp85\": {...}}`;\n- `top_10_risk_restaurants`: Liste mit Name (oder ID), Bezirk,\n  Komposit-Score, dominanter Gefahr;\n- `evacuation_routes`: Liste mit Start-Restaurant, Ziel-Koordinate,\n  Routen-Länge_m, Gehzeit_min, vulnerable_km;\n- `failures`: Array `{phase, action, error}` für jeden Schritt der\n  nicht durchging;\n- `review_notes`: Self-Review-Loop-Dokumentation;\n- `abort_reason`: String oder null.\n\n## Aufräumen am Schluss\n\nAlle temporären QGIS-Layer, Gruppen, Bookmarks, Layouts gehören in\neinen Tree-Knoten `Benchmark/B08_stuttgart_hazard_climate_risks/run_<N>`,\ndamit der nächste Run aus einem sauberen Zustand starten kann.\nDatei-Outputs in `artifacts/` bleiben erhalten — die sind das\nResultat der Aufgabe.\n",
      "en": "## Assignment\n\nThe **Office for Environmental Protection and Disaster Preparedness of the City\nof Stuttgart** requires an integrated multi-hazard and climate-risk assessment\nfor the urban area. Stuttgart's basin setting, the Neckar valley, the slopes at\nthe edge of the city and the urban heat-island effect make the location\nparticularly informative: six natural hazards have very different spatial\neffects here, and climate change will additionally alter the picture by 2050.\n\nYou are to carry out this analysis end to end—from data acquisition and the\ncalculation of hazard indices to a publication-ready map composition and a\nwritten report. The assessment must answer four central questions:\n\n1. **Topography and hazards**: Which spatial patterns do the six natural\n   hazards show across the urban area?\n2. **Multi-geometry exposure**: Which restaurants (points), buildings\n   (polygons) and road sections (lines) are most exposed to flood risk?\n3. **Statistics and composite assessment**: How do the hazards correlate, how\n   are their values distributed, and what does a weighted composite score look\n   like?\n4. **Climate projection**: How does the risk picture shift under RCP 4.5 and\n   RCP 8.5 by 2050?\n\n## Library recommendation and skill consultation\n\nFor geodata-based calculations, primarily use the **`geo-api` library**. Under\n`GeospatialRaster` and `GeospatialVector`, it brings together precisely the data\nsources (OSM, Microsoft Planetary Computer, DWD/CORDEX, Open-Meteo) and\nalgorithms (terrain derivatives, spectral indices, zonal statistics, routing)\nrequired here. Read the `geo-api` skill **before the first code action**. Where\n`geo-api` does not provide a direct algorithm—for example, specialised vector\noperations or statistical aggregations—choose fallback packages yourself. The\nskills `geopandas-shapely`, `xarray-rioxarray`, `rasterio`, `grass-gis`,\n`gdal-binaries`, `pyproj` and `qgis-styles` are available and should be\nconsulted as needed.\n\nFor QGIS visualisation (layer tree, styling, screenshots, bookmarks, layout),\nuse the **QGIS MCP bridge** through the `spatial-agent-bridge` skill. You **must**\nalso consult the workflow skill `bench` (Coverage Tasks section); it describes\nthe RESULT.json schema and the screenshot self-review loop.\n\nThe choice of tools is explicitly yours—the prompt does not prescribe specific\nfunction or module names. In your initial plan, briefly explain which path you\nwill take and why.\n\n## Procedure\n\nBegin with a **written plan** of three to eight sentences in `RESULT.json` under\n`summary.plan`: which phases you will complete and in what order, which skills\nyou have read and which data sources you will use. Only then begin the\nimplementation.\n\nCreate the directory structure early:\n\n```\nartifacts/\n├── data/\n│   ├── basemaps/\n│   ├── osm/                  (restaurants, buildings, roads, districts)\n│   ├── terrain/              (DEM and derivatives)\n│   ├── hazards/              (6 hazard indices, composite and inundation zones)\n│   ├── analysis/             (sampling results and aggregations)\n│   └── climate/              (RCP-scaled results)\n├── charts/                   (matplotlib PNG files)\n└── screenshots/              (QGIS screenshots)\n```\n\nSave the QGIS project as `artifacts/stuttgart_hazards.qgz`. Set the project CRS\ndeliberately (EPSG:25832 is an appropriate choice for southern Germany).\n\n## Phase 1—Define the study area and acquire base data\n\nDefine the study area: the City of Stuttgart together with the surrounding\nridges (Bopser, Killesberg, Frauenkopf), covering a bounding box of approximately\n10 × 10 km. Obtain for this area:\n\n- a digital elevation model at approximately 30 m resolution (Copernicus GLO-30\n  via Microsoft Planetary Computer is the standard choice);\n- an OSM basemap layer;\n- OSM vector data: all restaurants (POIs), all building polygons, the drivable\n  road network and the city-district boundaries.\n\nDEM acquisition note: download only the area-of-interest subset, not complete\ntile stacks.\n\nOrganise the downloaded layers in QGIS in a meaningful layer tree, using groups\nsuch as “Terrain/Source data”, “Urban/Buildings”, “POI”,\n“Administration/Districts” and “Basemaps”. Style examples from the\n`qgis-styles` skill are welcome.\n\nCreate an overview screenshot at the end of the phase.\n\n## Phase 2—Terrain derivatives\n\nThe principal terrain derivatives must be produced from the DEM. At minimum,\nthese are:\n\n- **slope** in degrees;\n- **aspect** from 0–360°;\n- **topographic position**, for example TPI at an approximately 330 m window\n  radius;\n- **topographic wetness index**, for example TWI;\n- **ruggedness**, for example TRI;\n- **profile curvature**;\n- **height above nearest drainage**, or HAND;\n- **flow accumulation**;\n- **hillshade** for visualisation.\n\nThe library or tool used is open: `geo-api` provides a `terrain` accessor for\nmany of these calculations, GRASS GIS offers specialised modules (see the\n`grass-gis` skill), and the GDAL CLI provides several fundamentals (see the\n`gdal-binaries` skill). HAND is usually the most demanding step, comprising flow\naccumulation, stream extraction and vertical distance.\n\n**Performance note:** Watershed algorithms, particularly HAND and flow\naccumulation, can consume **several tens of gigabytes of RAM** for a 10 × 10 km,\n30 m DEM when implemented naively in Python. If you notice that a process uses\nmore than 20 GB RSS, stop it and change approach. GRASS GIS `r.watershed` is\nconsiderably more memory-efficient on large DEMs than Python alternatives\nbecause it uses time-tested C code. Alternatively, downsample the DEM to about\n60 m before computing HAND; doubling the cell size quarters the pixel count.\nDocument the chosen approach under `summary.hazard_formulas`.\n\nStyle the derivatives so the information is clear: hillshade as a greyscale\nbackground; slope in warm colours; TPI with a diverging valley-to-ridge scale;\nTWI sequentially from dry to wet; and HAND sequentially from near drainage to\nhigh above it.\n\nCreate a screenshot of the derivative overview; hillshade with a semi-transparent\nslope layer is a useful default.\n\n## Phase 3—Six hazard indices and a composite\n\nCalculate six normalised hazard indices from the terrain derivatives, each\nscaled to [0,1], where 1 indicates the greatest hazard, and a weighted\ncomposite. The following indices and physical rationales are expected:\n\n| Index | What it models | Recommended components |\n|---|---|---|\n| **Wind exposure** | Ridges and west-facing slopes are exposed to wind | TPI, west-facing measure, relative elevation, slope |\n| **Frost risk** | Cold air pools in valleys and wet depressions | Valley position (inverse TPI), TWI, low relative elevation |\n| **Flood risk** | Low-lying areas near drainage with large catchments | Inverse HAND, TWI, flow accumulation |\n| **Heat stress** | Low elevation, south-facing slope and urban factor | Inverse elevation, south-facing measure, urban factor (constant) |\n| **Landslide** | Steep, wet and concave terrain | Slope, TWI, concavity |\n| **Erosion (LS factor)** | RUSLE LS factor from flow and slope | Flow accumulation, slope function |\n\nThe exact formulas and weights are at your discretion. Follow standard\nliterature—for example RUSLE for erosion, TPI for wind and HAND for flooding—and\ndocument the selected formulas in `RESULT.json` under\n`summary.hazard_formulas`.\n\nComposite: a weighted sum of the six indices. Choose and justify the weights;\nflood and heat would typically receive greater weight in an urban heat and\nflooding context.\n\nScreenshots: create a separate map over hillshade for each signature hazard\n(wind, flood, heat and landslide), plus a composite overview map.\n\nAlso create **HAND-based inundation zones** for three scenarios: water levels of\n1 m, 2 m and 5 m above the nearest drainage. Export the zones as polygons, for\nexample to a GeoPackage. For each scenario, calculate and report inundated area\nin km², number of affected buildings and total length of affected roads in km.\n\n## Phase 4—Multi-geometry exposure\n\nThree geometry types must be sampled with hazard values. This is deliberate,\nbecause each requires a different raster-to-vector extraction method:\n\n- **Restaurants (points):** extract all six hazard values plus elevation and\n  slope for each point. Calculate a composite score for each restaurant using\n  weights of your choice and document those weights. Assign four risk classes:\n  Low, Medium, High and Very High.\n- **Buildings (polygons):** aggregate the flood index for each polygon using\n  zonal statistics or centroid sampling, choosing the method that is\n  appropriate. Assign four risk classes.\n- **Roads (lines):** similarly aggregate the flood index for each segment.\n  Assign four risk classes and use line width proportional to the score in the\n  visualisation.\n\nExport all three result sets as separate GeoPackages under\n`artifacts/data/analysis/`. Also export the restaurant results as GeoJSON and\nCSV.\n\nDistrict-level aggregation: spatially join restaurants to city districts,\ncalculate the mean, count and percentage at high risk per district, and\nvisualise the result as choropleth polygons in QGIS.\n\nScreenshots: one dedicated screenshot per geometry type—restaurants, buildings\nand roads styled by risk class—plus a district choropleth and the three\ninundation zones.\n\n## Phase 5—Statistics and charts\n\nGenerate at least seven charts as PNG files under `artifacts/charts/`.\nThe minimum inventory is:\n\n1. correlation heatmap for the six hazards across all restaurants (6 × 6,\n   Pearson, diverging colour scale with annotated values);\n2. histogram panel for the six hazards, showing the shape of each distribution;\n3. radar charts for the five restaurants with the highest risk;\n4. bar chart of restaurant count by risk class;\n5. scatter plot of elevation versus flood score, with trend line;\n6. box plots of all six hazards by risk class;\n7. climate-comparison bar chart for baseline, RCP 4.5 and RCP 8.5.\n\nChart 7 will be calculated in Phase 7, but its skeleton may already be prepared\nhere.\n\n## Phase 6—High-risk inspection and evacuation routing\n\nSelect restaurants with a composite score above 0.50. Zoom to the spatial\ncluster with the greatest concentration and to the single restaurant with the\nhighest score, producing a separate screenshot of each.\n\nSelect the three restaurants with the highest composite score and calculate a\npedestrian route from each to a safe point, for example a point with HAND above\n10 m on a ridge. Routing may use OSM: `geo-api` provides a routing component, or\nOSMnx may be used for graph-based routing; consult the corresponding skills.\n\nIdentify route segments that cross flood-prone areas with a flood index above\n0.5; these are vulnerable segments. Report route length, estimated walking time\nand vulnerable share.\n\nCreate a screenshot of the three routes with the vulnerable segments\nhighlighted.\n\n## Phase 7—Climate projection (RCP 4.5 and RCP 8.5, 2050 horizon)\n\nApply climate-scaling factors to each restaurant’s baseline hazard values. The\nfollowing are indicative values for the CORDEX ensemble to 2050 in southern\nGermany:\n\n| Hazard | RCP 4.5 factor | RCP 8.5 factor | Direction |\n|---|---|---|---|\n| Wind | ~1.00 | ~1.00 | static |\n| Frost | ~0.77 | ~0.55 | decreasing |\n| Flood | ~1.03 | ~1.07 | slightly increasing |\n| Heat | ~1.80 | ~2.59 | strongly increasing |\n| Landslide | ~1.00 | ~1.00 | static |\n| Erosion | ~1.03 | ~1.07 | slightly increasing |\n\nYou may use these factors directly (source: EURO-CORDEX EUR-11,\nMPI-M-MPI-ESM-LR, 2050) or retrieve more detailed values through\n`geo_api.ClimateDataApi` if that better suits your workflow. Document the\nfactors used in `RESULT.json`.\n\nFor every restaurant, scale each hazard and cap it at 1.0, recalculate the\ncomposite and assign the new risk class. Save the results as CSV files under\n`artifacts/data/climate/`. Report the class shift as a percentage in each class\nfor each scenario.\n\nGenerate Chart 7 from the actual data. Screenshot: display restaurants at\nbaseline and under RCP 8.5 side by side in QGIS.\n\n## Phase 8—Finalisation\n\nClean up the layer tree for publication, with a clear hierarchy: analysis\nresults at the top, hazards in the middle, and source data and basemap at the\nbottom.\n\nCreate a final composite screenshot with hillshade, a semi-transparent 2 m\ninundation zone, buildings by flood risk, restaurants by composite risk class\nand visible evacuation routes.\n\nWrite a report at `artifacts/RESULTS.md` in German or English with the usual\nsections: executive summary, study area, method, results for each phase,\nclimate projections and recommendations. Embed the charts using Markdown.\n\n## Self-review loop for every screenshot\n\nFollow skill `bench`, PROTOCOL §10 (Coverage Tasks): inspect every screenshot\nbefore proceeding. If you are Claude Code, open the PNG with the Read tool and\ninspect it visually. If you are Codex, use Bash with Python/PIL to check the\npixel distribution; a standard deviation below 5 suggests an empty or uniform\nimage. If a screenshot does not meet the expectation—because it is empty,\nincorrectly centred, shows the wrong visible layers or is identical to the\nprevious phase—correct it and capture it again. Use no more than two retries per\nphase. Document retries in `RESULT.json` under `summary.review_notes[]`.\n\n## Screenshot rules (binding)\n\n- After every `load_project`, first perform a `map_navigation` action such as\n  `zoom_to_layer` or `set_extent` before taking the first screenshot. The canvas\n  extent is undefined after loading a project in this environment and would\n  otherwise produce an empty image.\n- Always call `get_map_screenshot` with explicit dimensions:\n  `width=1600, height=1000` (default 96 dpi). Window geometry is unreliable in\n  this environment; never rely on the canvas size.\n- Never use `include_overlays=true`: the widget-grab path produces empty images\n  in this environment. Map tips are not required for this task.\n- Check the `content_hash` returned after every screenshot. If it is identical\n  to the preceding screenshot, the map has not changed and visibility or extent\n  is incorrect; then apply the self-review loop.\n\n## What RESULT.json must contain\n\nThe RESULT.json must comply with the schema in the `bench` skill\n(PROTOCOL.md). At the top level it requires `task_id`, `run_index`, `mode`,\n`summary`, `hard_checks` **and `anti_checks`**. For every `anti.never:` rule in\nthis task, an `anti_checks[]` entry with `id`, `violation` and `evidence` must\nexist. A missing entry is scored as a violation.\n\nUnder `summary`:\n\n- `plan`: the initial plan string described above;\n- `phases_completed`: array `[\"1\", \"2\", ..., \"8\"]`;\n- `data_sources_used`: list of data-source endpoints with versions, for example\n  `{\"copernicus_glo30\": \"dem 1.0\", \"osm_overpass\": \"<date>\"}`;\n- `hazard_formulas`: dictionary with the selected formulas and weights for each\n  hazard;\n- `climate_factors_used`: dictionary with scaling factors by hazard for RCP 4.5\n  and RCP 8.5;\n- `composite_weights`: dictionary with composite-score weights by geometry type;\n- `screenshots_written`: list of relative paths;\n- `charts_written`: list of relative paths;\n- `inundation_stats`: dictionary for each scenario, for example\n  `{\"1m\": {\"area_km2\": ..., \"buildings_affected\": ...,\n  \"streets_km_affected\": ...}, \"2m\": {...}, \"5m\": {...}}`;\n- `risk_class_distribution`: dictionary\n  `{\"baseline\": {\"Low\": <pct>, \"Medium\": <pct>, \"High\": <pct>,\n  \"Very High\": <pct>}, \"rcp45\": {...}, \"rcp85\": {...}}`;\n- `top_10_risk_restaurants`: list with name or ID, district, composite score and\n  dominant hazard;\n- `evacuation_routes`: list with start restaurant, target coordinate, route\n  length in metres, walking time in minutes and vulnerable kilometres;\n- `failures`: array of `{phase, action, error}` for each unsuccessful step;\n- `review_notes`: documentation of the self-review loop;\n- `abort_reason`: string or null.\n\n## Final cleanup\n\nAll temporary QGIS layers, groups, bookmarks and layouts belong under the tree\nnode `Benchmark/B08_stuttgart_hazard_climate_risks/run_<N>` so that the next run\nstarts from a clean state. File outputs under `artifacts/` remain in place; they\nare the result of the task.\n"
    },
    "questions": [
      {
        "de": "Welche räumlichen Muster zeigen sechs Naturgefahren über Stuttgart?",
        "en": "Which spatial patterns do six natural hazards show across Stuttgart?"
      },
      {
        "de": "Wie sind Restaurants, Gebäude und Straßen dem Hochwasserrisiko ausgesetzt?",
        "en": "How are restaurants, buildings and roads exposed to flood risk?"
      },
      {
        "de": "Wie korrelieren die Gefahren und wie lässt sich ein gewichteter Komposit bilden?",
        "en": "How do the hazards correlate and how can they form a weighted composite?"
      },
      {
        "de": "Wie verschiebt sich das Risikobild unter RCP 4.5 und RCP 8.5 bis 2050?",
        "en": "How does the risk picture shift under RCP 4.5 and RCP 8.5 by 2050?"
      }
    ],
    "phases": [
      {
        "number": 1,
        "de": "Studiengebiet und Daten",
        "en": "Study area and data"
      },
      {
        "number": 2,
        "de": "Terrainableitungen",
        "en": "Terrain derivatives"
      },
      {
        "number": 3,
        "de": "Sechs Gefahren und Komposit",
        "en": "Six hazards and composite"
      },
      {
        "number": 4,
        "de": "Exposition mehrerer Geometrietypen",
        "en": "Multi-geometry exposure"
      },
      {
        "number": 5,
        "de": "Statistik und Diagramme",
        "en": "Statistics and charts"
      },
      {
        "number": 6,
        "de": "Hochrisiko und Evakuierung",
        "en": "High risk and evacuation"
      },
      {
        "number": 7,
        "de": "Klimaszenarien bis 2050",
        "en": "Climate scenarios to 2050"
      },
      {
        "number": 8,
        "de": "QGIS-Projekt und Bericht",
        "en": "QGIS project and report"
      }
    ]
  },
  "maximumScore": 100,
  "scoreFramework": {
    "weights": [
      {
        "key": "hard",
        "points": 25
      },
      {
        "key": "skill",
        "points": 10
      },
      {
        "key": "soft",
        "points": 35
      },
      {
        "key": "visual",
        "points": 20
      },
      {
        "key": "wasted",
        "points": 5
      },
      {
        "key": "redundant",
        "points": 5
      }
    ],
    "labels": {
      "hard": {
        "de": "Harte Artefakt- und Vollständigkeitsprüfungen",
        "en": "Hard artefact and completeness checks"
      },
      "skill": {
        "de": "Erforderliche SpatialAgents-Skills",
        "en": "Required SpatialAgents skills"
      },
      "soft": {
        "de": "Fachliche Rubrik",
        "en": "Domain rubric"
      },
      "visual": {
        "de": "Visuelle Übereinstimmung",
        "en": "Visual agreement"
      },
      "wasted": {
        "de": "Zielgerichtete Werkzeugwahl",
        "en": "Targeted tool selection"
      },
      "redundant": {
        "de": "Vermeidung redundanter Aufrufe",
        "en": "Avoidance of redundant calls"
      }
    },
    "hardChecks": [
      {
        "number": 1,
        "description": {
          "de": "Eine strukturierte Ergebnisdatei ist vorhanden.",
          "en": "A structured result file is present."
        }
      },
      {
        "number": 2,
        "description": {
          "de": "Der vollständige Ergebnisbericht ist vorhanden.",
          "en": "The complete result report is present."
        }
      },
      {
        "number": 3,
        "description": {
          "de": "Das QGIS-Projekt wurde gespeichert.",
          "en": "The QGIS project has been saved."
        }
      },
      {
        "number": 4,
        "description": {
          "de": "Mindestens zwölf QGIS-Screenshots wurden erzeugt.",
          "en": "At least twelve QGIS screenshots were generated."
        }
      },
      {
        "number": 5,
        "description": {
          "de": "Mindestens fünf Diagramme wurden erzeugt.",
          "en": "At least five charts were generated."
        }
      },
      {
        "number": 6,
        "description": {
          "de": "Mindestens drei GeoPackages mit Analyseergebnissen liegen vor.",
          "en": "At least three GeoPackages with analysis results are present."
        }
      },
      {
        "number": 7,
        "description": {
          "de": "Die Inundationszonen liegen als GeoPackage vor.",
          "en": "The inundation zones are available as a GeoPackage."
        }
      },
      {
        "number": 8,
        "description": {
          "de": "Die Klimaszenarien liegen als tabellarische Daten vor.",
          "en": "The climate scenarios are available as tabular data."
        }
      },
      {
        "number": 9,
        "description": {
          "de": "Mindestens sechs Bearbeitungsphasen sind dokumentiert.",
          "en": "At least six work phases are documented."
        }
      },
      {
        "number": 10,
        "description": {
          "de": "Mindestens zwölf Screenshotpfade sind dokumentiert.",
          "en": "At least twelve screenshot paths are documented."
        }
      },
      {
        "number": 11,
        "description": {
          "de": "Mindestens fünf Diagrammpfade sind dokumentiert.",
          "en": "At least five chart paths are documented."
        }
      },
      {
        "number": 12,
        "description": {
          "de": "Die Formeln der Gefahrenindizes sind dokumentiert.",
          "en": "The hazard-index formulas are documented."
        }
      },
      {
        "number": 13,
        "description": {
          "de": "Fläche, Gebäude und Straßenlänge der Inundationsszenarien sind dokumentiert.",
          "en": "Area, buildings and road length for the inundation scenarios are documented."
        }
      },
      {
        "number": 14,
        "description": {
          "de": "Die Risikoklassen für Baseline und Klimaszenarien sind dokumentiert.",
          "en": "Risk classes for the baseline and climate scenarios are documented."
        }
      },
      {
        "number": 15,
        "description": {
          "de": "Drei Evakuierungsrouten mit Kenngrößen sind dokumentiert.",
          "en": "Three evacuation routes with metrics are documented."
        }
      }
    ],
    "rubric": [
      {
        "key": "criterion-01",
        "name": {
          "de": "Initialer Plan vorhanden und nachvollziehbar",
          "en": "Initial plan present and traceable"
        },
        "expectation": {
          "de": "`summary.plan` ist nicht leer, listet die geplanten Phasen\nin nachvollziehbarer Reihenfolge auf und nennt die\nkonsultierten Skills und Datenquellen. Der Plan liest sich\nals Vorab-Entwurf (Absichten, offene Entscheidungen), nicht\nals nachträgliche Zusammenfassung der Ergebnisse.",
          "en": "The initial plan states the phase order, consulted skills and data sources before implementation begins."
        },
        "maximum": 5,
        "referenceScore": 5
      },
      {
        "key": "criterion-02",
        "name": {
          "de": "geo-api konsequent genutzt",
          "en": "Geospatial API used consistently"
        },
        "expectation": {
          "de": "`geo-api` wird tatsächlich für Datenakquise (OSM,\nPlanetaryComputer DEM, ggf. CORDEX-Klimadaten) und für\nmindestens einen Algorithmus-Pfad (Terrain-Derivate via\n`terrain`-Accessor ODER Zonal-Statistics via\n`multi_input.zonal_statistics` ODER OSM-Routing) verwendet,\nnicht nur als formaler Skill-Read. Wo bewusst Fallback auf\nGRASS/GDAL/eigene Implementation: kurz begründet.",
          "en": "The Geospatial API is used for acquisition and at least one analysis path; justified fallbacks remain possible."
        },
        "maximum": 10,
        "referenceScore": 9
      },
      {
        "key": "criterion-03",
        "name": {
          "de": "Sechs Gefahren-Indizes physikalisch plausibel",
          "en": "Six physically plausible hazard indices"
        },
        "expectation": {
          "de": "Alle sechs Indizes berechnet, jeweils auf [0,1] normalisiert,\nmit dokumentierten Formeln in `summary.hazard_formulas`. Die\nräumlichen Muster passen zur Erwartung — Flood am Neckar,\nHeat in der Talsohle, Wind auf Rücken, Hangrutsch an\nTalkanten.",
          "en": "All six indices are normalised, their formulas are documented and their spatial patterns are physically plausible."
        },
        "maximum": 10,
        "referenceScore": 9
      },
      {
        "key": "criterion-04",
        "name": {
          "de": "Multi-Geometrie-Sampling sauber",
          "en": "Clean multi-geometry sampling"
        },
        "expectation": {
          "de": "Restaurants, Gebäude und Straßen alle drei mit Hazard-Werten\nbeprobt und in vier Klassen eingeteilt. GPKGs unter\n`artifacts/data/analysis/` existieren. Visualisierung pro\nGeometrie-Typ vorhanden.",
          "en": "Restaurants, buildings and roads are sampled appropriately and exported with four risk classes."
        },
        "maximum": 8,
        "referenceScore": 8
      },
      {
        "key": "criterion-05",
        "name": {
          "de": "HAND-Inundation und Statistik",
          "en": "HAND inundation and statistics"
        },
        "expectation": {
          "de": "Die drei HAND-Schwellen sind als Polygone exportiert,\nStatistiken pro Szenario (Fläche, betroffene Gebäude,\nbetroffene Straßen-km) sind in `summary.inundation_stats`\ndokumentiert und plausibel (5m > 2m > 1m).",
          "en": "Three threshold zones and monotonic statistics for area, buildings and affected road length are present."
        },
        "maximum": 5,
        "referenceScore": 4
      },
      {
        "key": "criterion-06",
        "name": {
          "de": "Klimaprojektion und Klassen-Shift",
          "en": "Climate projection and class shift"
        },
        "expectation": {
          "de": "RCP 4.5 und 8.5 Komposit-Scores berechnet und in vier\nKlassen eingeteilt. Verschiebung in\n`summary.risk_class_distribution` sichtbar — vor allem\nHitze-getriebener Shift unter RCP 8.5 muss zu mehr High/\nVery High Klassen führen.",
          "en": "RCP 4.5 and RCP 8.5 scores and risk classes show the expected climate-driven shift."
        },
        "maximum": 7,
        "referenceScore": 6
      },
      {
        "key": "criterion-07",
        "name": {
          "de": "Evakuierungs-Routen mit Vulnerabilitäts-Analyse",
          "en": "Evacuation routes with vulnerability analysis"
        },
        "expectation": {
          "de": "Drei Routen tatsächlich berechnet, Routen-Länge und\nGehzeit angegeben, vulnerable Segmente (Flood-Index > 0.5)\nidentifiziert und gemeldet. Routen sind im Karten-Screenshot\nerkennbar.",
          "en": "Three routes include length, walking time, vulnerable segments and a legible QGIS presentation."
        },
        "maximum": 5,
        "referenceScore": 5
      },
      {
        "key": "criterion-08",
        "name": {
          "de": "Charts: Aussage statt nur Plot",
          "en": "Charts communicate findings"
        },
        "expectation": {
          "de": "Mindestens 5 von 7 Charts existieren und tragen erkennbare\nAussagen (Achsen-Beschriftung, Titel, Legenden, sinnvolle\nSkalen). Keine matplotlib-Defaults ohne Anpassung.",
          "en": "The charts use meaningful axes, scales, titles and legends to support an interpretable statement."
        },
        "maximum": 5,
        "referenceScore": 5
      },
      {
        "key": "criterion-09",
        "name": {
          "de": "QGIS-Layer-Baum sauber organisiert",
          "en": "Organised QGIS layer tree"
        },
        "expectation": {
          "de": "Endzustand hat eine klar lesbare Hierarchie (Analyse oben,\nHazards Mitte, Terrain/Rohdaten/Basemap unten),\nLayer-Sichtbarkeit ist plausibel, Styles sind nicht Default.",
          "en": "Analysis, hazards, terrain, source data and basemap form a readable hierarchy with deliberate styles."
        },
        "maximum": 5,
        "referenceScore": 5
      },
      {
        "key": "criterion-10",
        "name": {
          "de": "RESULTS.md als echter Bericht",
          "en": "Complete results report"
        },
        "expectation": {
          "de": "Mindestens 600 Wörter, alle 8 Sektionen vorhanden, Charts\neingebettet, Erkenntnisse interpretiert statt nur Zahlen\naufgelistet, mit Empfehlungen für die Stadt Stuttgart.",
          "en": "The report covers all eight phases, embeds charts, interprets findings and provides recommendations."
        },
        "maximum": 5,
        "referenceScore": 5
      },
      {
        "key": "criterion-11",
        "name": {
          "de": "Self-Review-Loop genutzt",
          "en": "Documented visual self-review"
        },
        "expectation": {
          "de": "`summary.review_notes` dokumentiert pro Phase eine bewusste\nScreenshot-Inspektion (Methode + Befund, z.B. \"PNG per\nRead-Tool geprüft: alle Layer sichtbar\" oder \"PIL-Check:\nstd=42, ok\") und nennt bei Retries die Korrektur. Ein\nleeres `review_notes` ist nur akzeptabel, wenn\n`tool_trace_highlights` die Inspektionen stattdessen\nbelegt.",
          "en": "Each screenshot is inspected and any repeat capture records the correction that was made."
        },
        "maximum": 5,
        "referenceScore": 4
      }
    ]
  },
  "models": [
    {
      "key": "claude-opus-5",
      "name": "Claude Opus 5",
      "agent": "Claude Code",
      "execution": {
        "de": "Cloud",
        "en": "Cloud"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 1,
          "score": 92,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 35.0,
            "visual": 18.248,
            "wasted": 3.3333,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 10
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 5
            },
            {
              "key": "criterion-09",
              "points": 5
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 2,
          "score": 91,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 35.0,
            "visual": 16.258,
            "wasted": 5.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 10
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 5
            },
            {
              "key": "criterion-09",
              "points": 5
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 3,
          "score": 90,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 33.4985,
            "visual": 17.682,
            "wasted": 3.3333,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 10
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 6
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 4
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        }
      ],
      "statistics": {
        "mean": 91,
        "median": 91,
        "minimum": 90,
        "maximum": 92,
        "standardDeviation": 0.8
      },
      "classification": {
        "de": "Gold",
        "en": "Gold"
      },
      "componentMeans": {
        "hard": 25.0,
        "skill": 10.0,
        "soft": 34.4995,
        "visual": 17.396,
        "wasted": 3.8889,
        "redundant": 0.0
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-02",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-03",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-04",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-05",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-06",
          "runValues": [
            7,
            7,
            6
          ],
          "mean": 6.67,
          "meanPercent": 95.2
        },
        {
          "key": "criterion-07",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-08",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-09",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-10",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-11",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        }
      ]
    },
    {
      "key": "claude-sonnet-5",
      "name": "Claude Sonnet 5",
      "agent": "Claude Code",
      "execution": {
        "de": "Cloud",
        "en": "Cloud"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 2,
          "score": 85,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 31.5,
            "visual": 15.012,
            "wasted": 3.3333,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 4
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 4
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 4
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 3
            }
          ]
        },
        {
          "number": 3,
          "score": 85,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 32.501,
            "visual": 13.706,
            "wasted": 3.3333,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 9
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 4
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 5
            },
            {
              "key": "criterion-09",
              "points": 5
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 4
            }
          ]
        },
        {
          "number": 4,
          "score": 86,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 30.9995,
            "visual": 14.682,
            "wasted": 5.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 10
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 6
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 3
            },
            {
              "key": "criterion-10",
              "points": 4
            },
            {
              "key": "criterion-11",
              "points": 3
            }
          ]
        }
      ],
      "statistics": {
        "mean": 85.3,
        "median": 85,
        "minimum": 85,
        "maximum": 86,
        "standardDeviation": 0.5
      },
      "classification": {
        "de": "Gold",
        "en": "Gold"
      },
      "componentMeans": {
        "hard": 25.0,
        "skill": 10.0,
        "soft": 31.6668,
        "visual": 14.4667,
        "wasted": 3.8889,
        "redundant": 0.0
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            4,
            5,
            5
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-02",
          "runValues": [
            10,
            9,
            10
          ],
          "mean": 9.67,
          "meanPercent": 96.7
        },
        {
          "key": "criterion-03",
          "runValues": [
            9,
            9,
            10
          ],
          "mean": 9.33,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-04",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-05",
          "runValues": [
            4,
            4,
            5
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-06",
          "runValues": [
            7,
            7,
            6
          ],
          "mean": 6.67,
          "meanPercent": 95.2
        },
        {
          "key": "criterion-07",
          "runValues": [
            5,
            4,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-08",
          "runValues": [
            4,
            5,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-09",
          "runValues": [
            4,
            5,
            3
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "key": "criterion-10",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-11",
          "runValues": [
            3,
            4,
            3
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        }
      ]
    },
    {
      "key": "qwen3-8-flash-next",
      "name": "Qwen3.8-Flash-Next",
      "agent": "OpenCode",
      "execution": {
        "de": "lokal · HP ZBook",
        "en": "local · HP ZBook"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 1,
          "score": 81,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 29.5015,
            "visual": 11.8,
            "wasted": 5.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 5
            },
            {
              "key": "criterion-03",
              "points": 8
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 3
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 4
            }
          ]
        },
        {
          "number": 2,
          "score": 83,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 30.9995,
            "visual": 13.6,
            "wasted": 3.3333,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 9
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 4
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 2
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 3,
          "score": 87,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 32.501,
            "visual": 14.588,
            "wasted": 5.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 9
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 4
            },
            {
              "key": "criterion-06",
              "points": 6
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 5
            },
            {
              "key": "criterion-09",
              "points": 5
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 4
            }
          ]
        }
      ],
      "statistics": {
        "mean": 83.7,
        "median": 83,
        "minimum": 81,
        "maximum": 87,
        "standardDeviation": 2.5
      },
      "classification": {
        "de": "Silber",
        "en": "Silver"
      },
      "componentMeans": {
        "hard": 25.0,
        "skill": 10.0,
        "soft": 31.0007,
        "visual": 13.3293,
        "wasted": 4.4444,
        "redundant": 0.0
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-02",
          "runValues": [
            5,
            9,
            9
          ],
          "mean": 7.67,
          "meanPercent": 76.7
        },
        {
          "key": "criterion-03",
          "runValues": [
            8,
            9,
            9
          ],
          "mean": 8.67,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-04",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-05",
          "runValues": [
            5,
            4,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-06",
          "runValues": [
            7,
            7,
            6
          ],
          "mean": 6.67,
          "meanPercent": 95.2
        },
        {
          "key": "criterion-07",
          "runValues": [
            5,
            4,
            5
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-08",
          "runValues": [
            4,
            4,
            5
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-09",
          "runValues": [
            3,
            2,
            5
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "key": "criterion-10",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-11",
          "runValues": [
            4,
            5,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        }
      ]
    },
    {
      "key": "gpt-5-6-sol",
      "name": "GPT-5.6 Sol",
      "agent": "Codex CLI",
      "execution": {
        "de": "Cloud",
        "en": "Cloud"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 1,
          "score": 78,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 33.0015,
            "visual": 9.742,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 4
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 2,
          "score": 83,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 33.0015,
            "visual": 15.13,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 4
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 4
            }
          ]
        },
        {
          "number": 3,
          "score": 83,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 32.0005,
            "visual": 15.552,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 3
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 4
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        }
      ],
      "statistics": {
        "mean": 81.3,
        "median": 83,
        "minimum": 78,
        "maximum": 83,
        "standardDeviation": 2.4
      },
      "classification": {
        "de": "Silber",
        "en": "Silver"
      },
      "componentMeans": {
        "hard": 25.0,
        "skill": 10.0,
        "soft": 32.6678,
        "visual": 13.4747,
        "wasted": 0.0,
        "redundant": 0.0
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-02",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-03",
          "runValues": [
            9,
            9,
            9
          ],
          "mean": 9,
          "meanPercent": 90.0
        },
        {
          "key": "criterion-04",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-05",
          "runValues": [
            5,
            5,
            3
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-06",
          "runValues": [
            7,
            7,
            7
          ],
          "mean": 7,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-07",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "key": "criterion-08",
          "runValues": [
            3,
            4,
            4
          ],
          "mean": 3.67,
          "meanPercent": 73.3
        },
        {
          "key": "criterion-09",
          "runValues": [
            4,
            4,
            4
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "key": "criterion-10",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-11",
          "runValues": [
            5,
            4,
            5
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        }
      ]
    },
    {
      "key": "gpt-5-6-terra",
      "name": "GPT-5.6 Terra",
      "agent": "Codex CLI",
      "execution": {
        "de": "Cloud",
        "en": "Cloud"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 1,
          "score": 78,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 32.0005,
            "visual": 10.8,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 6
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 3
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 2,
          "score": 75,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 30.9995,
            "visual": 9.236,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 7
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 2
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 3,
          "score": 79,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 31.5,
            "visual": 12.776,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 9
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 6
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 3
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        }
      ],
      "statistics": {
        "mean": 77.3,
        "median": 78,
        "minimum": 75,
        "maximum": 79,
        "standardDeviation": 1.7
      },
      "classification": {
        "de": "Silber",
        "en": "Silver"
      },
      "componentMeans": {
        "hard": 25.0,
        "skill": 10.0,
        "soft": 31.5,
        "visual": 10.9373,
        "wasted": 0.0,
        "redundant": 0.0
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-02",
          "runValues": [
            10,
            10,
            9
          ],
          "mean": 9.67,
          "meanPercent": 96.7
        },
        {
          "key": "criterion-03",
          "runValues": [
            9,
            9,
            9
          ],
          "mean": 9,
          "meanPercent": 90.0
        },
        {
          "key": "criterion-04",
          "runValues": [
            8,
            7,
            8
          ],
          "mean": 7.67,
          "meanPercent": 95.8
        },
        {
          "key": "criterion-05",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-06",
          "runValues": [
            6,
            7,
            6
          ],
          "mean": 6.33,
          "meanPercent": 90.5
        },
        {
          "key": "criterion-07",
          "runValues": [
            5,
            4,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-08",
          "runValues": [
            3,
            3,
            4
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "key": "criterion-09",
          "runValues": [
            3,
            2,
            3
          ],
          "mean": 2.67,
          "meanPercent": 53.3
        },
        {
          "key": "criterion-10",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-11",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        }
      ]
    },
    {
      "key": "gpt-5-6-luna",
      "name": "GPT-5.6 Luna",
      "agent": "Codex CLI",
      "execution": {
        "de": "Cloud",
        "en": "Cloud"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 1,
          "score": 71,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 29.5015,
            "visual": 6.33,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 4
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 8
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 3
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 3
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 2
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 2,
          "score": 72,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 33.0015,
            "visual": 3.752,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 4
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 9
            },
            {
              "key": "criterion-04",
              "points": 8
            },
            {
              "key": "criterion-05",
              "points": 5
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 4
            },
            {
              "key": "criterion-08",
              "points": 4
            },
            {
              "key": "criterion-09",
              "points": 5
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        },
        {
          "number": 3,
          "score": 75,
          "components": {
            "hard": 25.0,
            "skill": 10.0,
            "soft": 30.499,
            "visual": 9.224,
            "wasted": 0.0,
            "redundant": 0.0
          },
          "hardChecks": {
            "passed": 15,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 5
            },
            {
              "key": "criterion-02",
              "points": 10
            },
            {
              "key": "criterion-03",
              "points": 8
            },
            {
              "key": "criterion-04",
              "points": 6
            },
            {
              "key": "criterion-05",
              "points": 4
            },
            {
              "key": "criterion-06",
              "points": 7
            },
            {
              "key": "criterion-07",
              "points": 5
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 3
            },
            {
              "key": "criterion-10",
              "points": 5
            },
            {
              "key": "criterion-11",
              "points": 5
            }
          ]
        }
      ],
      "statistics": {
        "mean": 72.7,
        "median": 72,
        "minimum": 71,
        "maximum": 75,
        "standardDeviation": 1.7
      },
      "classification": {
        "de": "Silber",
        "en": "Silver"
      },
      "componentMeans": {
        "hard": 25.0,
        "skill": 10.0,
        "soft": 31.0007,
        "visual": 6.4353,
        "wasted": 0.0,
        "redundant": 0.0
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            4,
            4,
            5
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "key": "criterion-02",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-03",
          "runValues": [
            8,
            9,
            8
          ],
          "mean": 8.33,
          "meanPercent": 83.3
        },
        {
          "key": "criterion-04",
          "runValues": [
            8,
            8,
            6
          ],
          "mean": 7.33,
          "meanPercent": 91.7
        },
        {
          "key": "criterion-05",
          "runValues": [
            3,
            5,
            4
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "key": "criterion-06",
          "runValues": [
            7,
            7,
            7
          ],
          "mean": 7,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-07",
          "runValues": [
            3,
            4,
            5
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "key": "criterion-08",
          "runValues": [
            4,
            4,
            3
          ],
          "mean": 3.67,
          "meanPercent": 73.3
        },
        {
          "key": "criterion-09",
          "runValues": [
            2,
            5,
            3
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "key": "criterion-10",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "key": "criterion-11",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        }
      ]
    },
    {
      "key": "claude-haiku-4-5",
      "name": "Claude Haiku 4.5",
      "agent": "Claude Code",
      "execution": {
        "de": "Cloud",
        "en": "Cloud"
      },
      "runCount": 3,
      "runs": [
        {
          "number": 1,
          "score": 53,
          "components": {
            "hard": 21.6667,
            "skill": 10.0,
            "soft": 15.001,
            "visual": 0.106,
            "wasted": 5.0,
            "redundant": 1.0
          },
          "hardChecks": {
            "passed": 13,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 4
            },
            {
              "key": "criterion-02",
              "points": 3
            },
            {
              "key": "criterion-03",
              "points": 5
            },
            {
              "key": "criterion-04",
              "points": 2
            },
            {
              "key": "criterion-05",
              "points": 1
            },
            {
              "key": "criterion-06",
              "points": 5
            },
            {
              "key": "criterion-07",
              "points": 1
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 3
            },
            {
              "key": "criterion-10",
              "points": 3
            },
            {
              "key": "criterion-11",
              "points": 0
            }
          ]
        },
        {
          "number": 2,
          "score": 59,
          "components": {
            "hard": 23.3333,
            "skill": 10.0,
            "soft": 16.499,
            "visual": 0.212,
            "wasted": 5.0,
            "redundant": 4.0
          },
          "hardChecks": {
            "passed": 14,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 2
            },
            {
              "key": "criterion-02",
              "points": 3
            },
            {
              "key": "criterion-03",
              "points": 7
            },
            {
              "key": "criterion-04",
              "points": 5
            },
            {
              "key": "criterion-05",
              "points": 2
            },
            {
              "key": "criterion-06",
              "points": 5
            },
            {
              "key": "criterion-07",
              "points": 1
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 2
            },
            {
              "key": "criterion-10",
              "points": 3
            },
            {
              "key": "criterion-11",
              "points": 0
            }
          ]
        },
        {
          "number": 3,
          "score": 52,
          "components": {
            "hard": 20.0,
            "skill": 10.0,
            "soft": 11.501,
            "visual": 0.552,
            "wasted": 5.0,
            "redundant": 5.0
          },
          "hardChecks": {
            "passed": 12,
            "total": 15
          },
          "criteria": [
            {
              "key": "criterion-01",
              "points": 4
            },
            {
              "key": "criterion-02",
              "points": 1
            },
            {
              "key": "criterion-03",
              "points": 4
            },
            {
              "key": "criterion-04",
              "points": 3
            },
            {
              "key": "criterion-05",
              "points": 0
            },
            {
              "key": "criterion-06",
              "points": 3
            },
            {
              "key": "criterion-07",
              "points": 1
            },
            {
              "key": "criterion-08",
              "points": 3
            },
            {
              "key": "criterion-09",
              "points": 1
            },
            {
              "key": "criterion-10",
              "points": 3
            },
            {
              "key": "criterion-11",
              "points": 0
            }
          ]
        }
      ],
      "statistics": {
        "mean": 54.7,
        "median": 53,
        "minimum": 52,
        "maximum": 59,
        "standardDeviation": 3.1
      },
      "classification": {
        "de": "Bestanden",
        "en": "Passed"
      },
      "componentMeans": {
        "hard": 21.6667,
        "skill": 10.0,
        "soft": 14.3337,
        "visual": 0.29,
        "wasted": 5.0,
        "redundant": 3.3333
      },
      "criterionMeans": [
        {
          "key": "criterion-01",
          "runValues": [
            4,
            2,
            4
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "key": "criterion-02",
          "runValues": [
            3,
            3,
            1
          ],
          "mean": 2.33,
          "meanPercent": 23.3
        },
        {
          "key": "criterion-03",
          "runValues": [
            5,
            7,
            4
          ],
          "mean": 5.33,
          "meanPercent": 53.3
        },
        {
          "key": "criterion-04",
          "runValues": [
            2,
            5,
            3
          ],
          "mean": 3.33,
          "meanPercent": 41.7
        },
        {
          "key": "criterion-05",
          "runValues": [
            1,
            2,
            0
          ],
          "mean": 1,
          "meanPercent": 20.0
        },
        {
          "key": "criterion-06",
          "runValues": [
            5,
            5,
            3
          ],
          "mean": 4.33,
          "meanPercent": 61.9
        },
        {
          "key": "criterion-07",
          "runValues": [
            1,
            1,
            1
          ],
          "mean": 1,
          "meanPercent": 20.0
        },
        {
          "key": "criterion-08",
          "runValues": [
            3,
            3,
            3
          ],
          "mean": 3,
          "meanPercent": 60.0
        },
        {
          "key": "criterion-09",
          "runValues": [
            3,
            2,
            1
          ],
          "mean": 2,
          "meanPercent": 40.0
        },
        {
          "key": "criterion-10",
          "runValues": [
            3,
            3,
            3
          ],
          "mean": 3,
          "meanPercent": 60.0
        },
        {
          "key": "criterion-11",
          "runValues": [
            0,
            0,
            0
          ],
          "mean": 0,
          "meanPercent": 0.0
        }
      ]
    }
  ],
  "criterionComparison": [
    {
      "key": "criterion-01",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            4,
            5,
            5
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            4,
            4,
            5
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            4,
            2,
            4
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        }
      ]
    },
    {
      "key": "criterion-02",
      "maximum": 10,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            10,
            9,
            10
          ],
          "mean": 9.67,
          "meanPercent": 96.7
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            5,
            9,
            9
          ],
          "mean": 7.67,
          "meanPercent": 76.7
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            10,
            10,
            9
          ],
          "mean": 9.67,
          "meanPercent": 96.7
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            3,
            3,
            1
          ],
          "mean": 2.33,
          "meanPercent": 23.3
        }
      ]
    },
    {
      "key": "criterion-03",
      "maximum": 10,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            10,
            10,
            10
          ],
          "mean": 10,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            9,
            9,
            10
          ],
          "mean": 9.33,
          "meanPercent": 93.3
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            8,
            9,
            9
          ],
          "mean": 8.67,
          "meanPercent": 86.7
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            9,
            9,
            9
          ],
          "mean": 9,
          "meanPercent": 90.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            9,
            9,
            9
          ],
          "mean": 9,
          "meanPercent": 90.0
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            8,
            9,
            8
          ],
          "mean": 8.33,
          "meanPercent": 83.3
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            5,
            7,
            4
          ],
          "mean": 5.33,
          "meanPercent": 53.3
        }
      ]
    },
    {
      "key": "criterion-04",
      "maximum": 8,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            8,
            8,
            8
          ],
          "mean": 8,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            8,
            7,
            8
          ],
          "mean": 7.67,
          "meanPercent": 95.8
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            8,
            8,
            6
          ],
          "mean": 7.33,
          "meanPercent": 91.7
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            2,
            5,
            3
          ],
          "mean": 3.33,
          "meanPercent": 41.7
        }
      ]
    },
    {
      "key": "criterion-05",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            4,
            4,
            5
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            5,
            4,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            5,
            5,
            3
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            3,
            5,
            4
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            1,
            2,
            0
          ],
          "mean": 1,
          "meanPercent": 20.0
        }
      ]
    },
    {
      "key": "criterion-06",
      "maximum": 7,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            7,
            7,
            6
          ],
          "mean": 6.67,
          "meanPercent": 95.2
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            7,
            7,
            6
          ],
          "mean": 6.67,
          "meanPercent": 95.2
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            7,
            7,
            6
          ],
          "mean": 6.67,
          "meanPercent": 95.2
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            7,
            7,
            7
          ],
          "mean": 7,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            6,
            7,
            6
          ],
          "mean": 6.33,
          "meanPercent": 90.5
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            7,
            7,
            7
          ],
          "mean": 7,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            5,
            5,
            3
          ],
          "mean": 4.33,
          "meanPercent": 61.9
        }
      ]
    },
    {
      "key": "criterion-07",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            5,
            4,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            5,
            4,
            5
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            5,
            4,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            3,
            4,
            5
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            1,
            1,
            1
          ],
          "mean": 1,
          "meanPercent": 20.0
        }
      ]
    },
    {
      "key": "criterion-08",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            4,
            5,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            4,
            4,
            5
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            3,
            4,
            4
          ],
          "mean": 3.67,
          "meanPercent": 73.3
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            3,
            3,
            4
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            4,
            4,
            3
          ],
          "mean": 3.67,
          "meanPercent": 73.3
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            3,
            3,
            3
          ],
          "mean": 3,
          "meanPercent": 60.0
        }
      ]
    },
    {
      "key": "criterion-09",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            4,
            5,
            3
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            3,
            2,
            5
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            4,
            4,
            4
          ],
          "mean": 4,
          "meanPercent": 80.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            3,
            2,
            3
          ],
          "mean": 2.67,
          "meanPercent": 53.3
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            2,
            5,
            3
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            3,
            2,
            1
          ],
          "mean": 2,
          "meanPercent": 40.0
        }
      ]
    },
    {
      "key": "criterion-10",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            5,
            5,
            4
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            3,
            3,
            3
          ],
          "mean": 3,
          "meanPercent": 60.0
        }
      ]
    },
    {
      "key": "criterion-11",
      "maximum": 5,
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "runValues": [
            3,
            4,
            3
          ],
          "mean": 3.33,
          "meanPercent": 66.7
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runValues": [
            4,
            5,
            4
          ],
          "mean": 4.33,
          "meanPercent": 86.7
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runValues": [
            5,
            4,
            5
          ],
          "mean": 4.67,
          "meanPercent": 93.3
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runValues": [
            5,
            5,
            5
          ],
          "mean": 5,
          "meanPercent": 100.0
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runValues": [
            0,
            0,
            0
          ],
          "mean": 0,
          "meanPercent": 0.0
        }
      ]
    }
  ],
  "timeBalance": {
    "determinedAt": "2026-09-18",
    "note": {
      "de": "Nur Claude- und OpenCode-Läufe. Die Codex-Protokolle halten weder Zeitpunkte je Schritt noch Token je Antwort fest; das ist ein Mangel der Ablage, kein Befund über die Modelle.",
      "en": "Claude and OpenCode runs only. The Codex transcripts record neither per-step timestamps nor tokens per response; this is a gap in the archive, not a finding about the models."
    },
    "models": [
      {
        "modelKey": "claude-opus-5",
        "wallSeconds": 2475.7,
        "modelSeconds": 1698.2,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 750.8,
        "qgisSeconds": 15.3,
        "filesSeconds": 7.3,
        "restSeconds": 4.2,
        "outputTokens": 146130,
        "tokensPerSecond": 86.3,
        "runCount": 3
      },
      {
        "modelKey": "claude-sonnet-5",
        "wallSeconds": 3379.4,
        "modelSeconds": 2434.0,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 372.7,
        "qgisSeconds": 13.1,
        "filesSeconds": 278.9,
        "restSeconds": 280.8,
        "outputTokens": 211957,
        "tokensPerSecond": 88.3,
        "runCount": 3
      },
      {
        "modelKey": "qwen3-8-flash-next",
        "wallSeconds": 7831.3,
        "modelSeconds": 5443.9,
        "prefillSeconds": 1832.0,
        "geoprocessingSeconds": 494.4,
        "qgisSeconds": 12.6,
        "filesSeconds": 1.0,
        "restSeconds": 47.4,
        "outputTokens": 231236,
        "tokensPerSecond": 31.7,
        "runCount": 3
      },
      {
        "modelKey": "claude-haiku-4-5",
        "wallSeconds": 564.3,
        "modelSeconds": 445.0,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 114.8,
        "qgisSeconds": 1.7,
        "filesSeconds": 0.4,
        "restSeconds": 2.4,
        "outputTokens": 45721,
        "tokensPerSecond": 102.7,
        "runCount": 3
      }
    ],
    "runs": [
      {
        "modelKey": "claude-opus-5",
        "wallSeconds": 2040.4,
        "modelSeconds": 1733.3,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 286.0,
        "qgisSeconds": 15.1,
        "filesSeconds": 2.6,
        "restSeconds": 3.4,
        "outputTokens": 140310,
        "run": 1
      },
      {
        "modelKey": "claude-opus-5",
        "wallSeconds": 2221.7,
        "modelSeconds": 1786.0,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 412.5,
        "qgisSeconds": 14.1,
        "filesSeconds": 2.7,
        "restSeconds": 6.4,
        "outputTokens": 150951,
        "run": 2
      },
      {
        "modelKey": "claude-opus-5",
        "wallSeconds": 3165.0,
        "modelSeconds": 1575.2,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 1553.8,
        "qgisSeconds": 16.7,
        "filesSeconds": 16.6,
        "restSeconds": 2.7,
        "outputTokens": 147129,
        "run": 3
      },
      {
        "modelKey": "claude-sonnet-5",
        "wallSeconds": 3513.8,
        "modelSeconds": 3205.8,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 278.5,
        "qgisSeconds": 17.1,
        "filesSeconds": 2.2,
        "restSeconds": 10.2,
        "outputTokens": 251690,
        "run": 2
      },
      {
        "modelKey": "claude-sonnet-5",
        "wallSeconds": 3393.8,
        "modelSeconds": 2228.0,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 464.4,
        "qgisSeconds": 11.8,
        "filesSeconds": 682.6,
        "restSeconds": 7.0,
        "outputTokens": 223415,
        "run": 3
      },
      {
        "modelKey": "claude-sonnet-5",
        "wallSeconds": 3230.6,
        "modelSeconds": 1868.1,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 375.2,
        "qgisSeconds": 10.4,
        "filesSeconds": 151.8,
        "restSeconds": 825.1,
        "outputTokens": 160765,
        "run": 4
      },
      {
        "modelKey": "qwen3-8-flash-next",
        "wallSeconds": 9770.8,
        "modelSeconds": 6850.7,
        "prefillSeconds": 1926.8,
        "geoprocessingSeconds": 932.5,
        "qgisSeconds": 11.3,
        "filesSeconds": 1.3,
        "restSeconds": 48.2,
        "outputTokens": 290034,
        "run": 1
      },
      {
        "modelKey": "qwen3-8-flash-next",
        "wallSeconds": 5141.2,
        "modelSeconds": 3610.0,
        "prefillSeconds": 1242.6,
        "geoprocessingSeconds": 230.1,
        "qgisSeconds": 11.0,
        "filesSeconds": 0.5,
        "restSeconds": 46.9,
        "outputTokens": 154116,
        "run": 2
      },
      {
        "modelKey": "qwen3-8-flash-next",
        "wallSeconds": 8581.8,
        "modelSeconds": 5871.1,
        "prefillSeconds": 2326.6,
        "geoprocessingSeconds": 320.5,
        "qgisSeconds": 15.4,
        "filesSeconds": 1.1,
        "restSeconds": 47.1,
        "outputTokens": 249558,
        "run": 3
      },
      {
        "modelKey": "claude-haiku-4-5",
        "wallSeconds": 482.7,
        "modelSeconds": 429.7,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 47.9,
        "qgisSeconds": 2.9,
        "filesSeconds": 0.3,
        "restSeconds": 1.8,
        "outputTokens": 43409,
        "run": 1
      },
      {
        "modelKey": "claude-haiku-4-5",
        "wallSeconds": 620.3,
        "modelSeconds": 456.0,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 159.5,
        "qgisSeconds": 2.3,
        "filesSeconds": 0.6,
        "restSeconds": 1.9,
        "outputTokens": 46761,
        "run": 2
      },
      {
        "modelKey": "claude-haiku-4-5",
        "wallSeconds": 590.0,
        "modelSeconds": 449.3,
        "prefillSeconds": 0.0,
        "geoprocessingSeconds": 136.9,
        "qgisSeconds": 0.0,
        "filesSeconds": 0.4,
        "restSeconds": 3.4,
        "outputTokens": 46994,
        "run": 3
      }
    ],
    "toolCalls": {
      "method": {
        "de": "Werkzeugaufrufe je Lauf aus dem Score-Export, gezählt am 18.09.2026; die Läufe liefen nicht-interaktiv, eine Rückfrage an den Nutzer war technisch nicht möglich.",
        "en": "Tool calls per run from the score export, counted on 18 September 2026; the runs were non-interactive, so a question back to the user was technically impossible."
      },
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runCount": 3,
          "toolCallsMin": 280,
          "toolCallsMax": 288,
          "toolCallsMean": 284
        },
        {
          "modelKey": "claude-sonnet-5",
          "runCount": 3,
          "toolCallsMin": 307,
          "toolCallsMax": 403,
          "toolCallsMean": 358.7
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runCount": 3,
          "toolCallsMin": 341,
          "toolCallsMax": 471,
          "toolCallsMean": 392
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runCount": 3,
          "toolCallsMin": 209,
          "toolCallsMax": 264,
          "toolCallsMean": 232.7
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runCount": 3,
          "toolCallsMin": 201,
          "toolCallsMax": 249,
          "toolCallsMean": 218.7
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runCount": 3,
          "toolCallsMin": 177,
          "toolCallsMax": 256,
          "toolCallsMean": 223.3
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runCount": 3,
          "toolCallsMin": 31,
          "toolCallsMax": 92,
          "toolCallsMean": 60.7
        }
      ],
      "runs": [
        {
          "modelKey": "claude-opus-5",
          "run": 1,
          "toolCalls": 288
        },
        {
          "modelKey": "claude-opus-5",
          "run": 2,
          "toolCalls": 280
        },
        {
          "modelKey": "claude-opus-5",
          "run": 3,
          "toolCalls": 284
        },
        {
          "modelKey": "claude-sonnet-5",
          "run": 2,
          "toolCalls": 403
        },
        {
          "modelKey": "claude-sonnet-5",
          "run": 3,
          "toolCalls": 366
        },
        {
          "modelKey": "claude-sonnet-5",
          "run": 4,
          "toolCalls": 307
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "run": 1,
          "toolCalls": 341
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "run": 2,
          "toolCalls": 364
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "run": 3,
          "toolCalls": 471
        },
        {
          "modelKey": "gpt-5-6-sol",
          "run": 1,
          "toolCalls": 225
        },
        {
          "modelKey": "gpt-5-6-sol",
          "run": 2,
          "toolCalls": 209
        },
        {
          "modelKey": "gpt-5-6-sol",
          "run": 3,
          "toolCalls": 264
        },
        {
          "modelKey": "gpt-5-6-terra",
          "run": 1,
          "toolCalls": 201
        },
        {
          "modelKey": "gpt-5-6-terra",
          "run": 2,
          "toolCalls": 206
        },
        {
          "modelKey": "gpt-5-6-terra",
          "run": 3,
          "toolCalls": 249
        },
        {
          "modelKey": "gpt-5-6-luna",
          "run": 1,
          "toolCalls": 177
        },
        {
          "modelKey": "gpt-5-6-luna",
          "run": 2,
          "toolCalls": 237
        },
        {
          "modelKey": "gpt-5-6-luna",
          "run": 3,
          "toolCalls": 256
        },
        {
          "modelKey": "claude-haiku-4-5",
          "run": 1,
          "toolCalls": 92
        },
        {
          "modelKey": "claude-haiku-4-5",
          "run": 2,
          "toolCalls": 59
        },
        {
          "modelKey": "claude-haiku-4-5",
          "run": 3,
          "toolCalls": 31
        }
      ]
    },
    "wallClock": {
      "method": {
        "de": "Wanduhrzeit je Lauf aus dem Score-Export, gelesen am 19.09.2026; für alle sieben Systeme, ohne Aufschlüsselung nach Modell- und Geoverarbeitungszeit.",
        "en": "Wall-clock time per run from the score export, read on 19 September 2026; for all seven systems, without the split into model and geoprocessing time."
      },
      "models": [
        {
          "modelKey": "claude-opus-5",
          "runCount": 3,
          "wallSecondsMin": 2040.4,
          "wallSecondsMax": 3165.0,
          "wallSecondsMean": 2475.7
        },
        {
          "modelKey": "claude-sonnet-5",
          "runCount": 3,
          "wallSecondsMin": 3230.6,
          "wallSecondsMax": 3513.8,
          "wallSecondsMean": 3379.4
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "runCount": 3,
          "wallSecondsMin": 5141.2,
          "wallSecondsMax": 9770.8,
          "wallSecondsMean": 7831.3
        },
        {
          "modelKey": "gpt-5-6-sol",
          "runCount": 3,
          "wallSecondsMin": 1750.8,
          "wallSecondsMax": 3698.4,
          "wallSecondsMean": 2517.0
        },
        {
          "modelKey": "gpt-5-6-terra",
          "runCount": 3,
          "wallSecondsMin": 1931.8,
          "wallSecondsMax": 2156.1,
          "wallSecondsMean": 2029.6
        },
        {
          "modelKey": "gpt-5-6-luna",
          "runCount": 3,
          "wallSecondsMin": 1692.4,
          "wallSecondsMax": 2179.9,
          "wallSecondsMean": 2005.2
        },
        {
          "modelKey": "claude-haiku-4-5",
          "runCount": 3,
          "wallSecondsMin": 482.7,
          "wallSecondsMax": 620.3,
          "wallSecondsMean": 564.3
        }
      ],
      "runs": [
        {
          "modelKey": "claude-opus-5",
          "run": 1,
          "wallSeconds": 2040.4
        },
        {
          "modelKey": "claude-opus-5",
          "run": 2,
          "wallSeconds": 2221.7
        },
        {
          "modelKey": "claude-opus-5",
          "run": 3,
          "wallSeconds": 3165.0
        },
        {
          "modelKey": "claude-sonnet-5",
          "run": 2,
          "wallSeconds": 3513.8
        },
        {
          "modelKey": "claude-sonnet-5",
          "run": 3,
          "wallSeconds": 3393.8
        },
        {
          "modelKey": "claude-sonnet-5",
          "run": 4,
          "wallSeconds": 3230.6
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "run": 1,
          "wallSeconds": 9770.8
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "run": 2,
          "wallSeconds": 5141.2
        },
        {
          "modelKey": "qwen3-8-flash-next",
          "run": 3,
          "wallSeconds": 8581.8
        },
        {
          "modelKey": "gpt-5-6-sol",
          "run": 1,
          "wallSeconds": 3698.4
        },
        {
          "modelKey": "gpt-5-6-sol",
          "run": 2,
          "wallSeconds": 1750.8
        },
        {
          "modelKey": "gpt-5-6-sol",
          "run": 3,
          "wallSeconds": 2101.9
        },
        {
          "modelKey": "gpt-5-6-terra",
          "run": 1,
          "wallSeconds": 2000.8
        },
        {
          "modelKey": "gpt-5-6-terra",
          "run": 2,
          "wallSeconds": 1931.8
        },
        {
          "modelKey": "gpt-5-6-terra",
          "run": 3,
          "wallSeconds": 2156.1
        },
        {
          "modelKey": "gpt-5-6-luna",
          "run": 1,
          "wallSeconds": 1692.4
        },
        {
          "modelKey": "gpt-5-6-luna",
          "run": 2,
          "wallSeconds": 2143.4
        },
        {
          "modelKey": "gpt-5-6-luna",
          "run": 3,
          "wallSeconds": 2179.9
        },
        {
          "modelKey": "claude-haiku-4-5",
          "run": 1,
          "wallSeconds": 482.7
        },
        {
          "modelKey": "claude-haiku-4-5",
          "run": 2,
          "wallSeconds": 620.3
        },
        {
          "modelKey": "claude-haiku-4-5",
          "run": 3,
          "wallSeconds": 590.0
        }
      ]
    }
  },
  "tokenUsage": {
    "method": {
      "de": "Token aus den Sitzungsprotokollen, je API-Antwort einmal gezählt und je Lauf normalisiert ausgewiesen; Stand 18.09.2026. Reasoning-Token zählen zur Ausgabe.",
      "en": "Tokens counted once per API response from the session transcripts, normalised per run; as of 18 September 2026. Reasoning tokens count towards output."
    },
    "models": [
      {
        "modelKey": "claude-opus-5",
        "meanTokensPerRunMillions": 35.6,
        "totalMillions": 106.8,
        "cacheReadMillions": 105.1,
        "outputThousands": 438,
        "compactions": 0,
        "approximate": false
      },
      {
        "modelKey": "claude-sonnet-5",
        "meanTokensPerRunMillions": 94.5,
        "totalMillions": 283.5,
        "cacheReadMillions": 281.1,
        "outputThousands": 636,
        "compactions": 0,
        "approximate": false
      },
      {
        "modelKey": "qwen3-8-flash-next",
        "meanTokensPerRunMillions": 40.8,
        "totalMillions": 122.4,
        "cacheReadMillions": 119.4,
        "outputThousands": 694,
        "compactions": 10,
        "approximate": false
      },
      {
        "modelKey": "gpt-5-6-sol",
        "meanTokensPerRunMillions": 17.7,
        "totalMillions": 53.1,
        "cacheReadMillions": 51.8,
        "outputThousands": 223,
        "compactions": 0,
        "approximate": false
      },
      {
        "modelKey": "gpt-5-6-terra",
        "meanTokensPerRunMillions": 18.1,
        "totalMillions": 54.3,
        "cacheReadMillions": 52.9,
        "outputThousands": 215,
        "compactions": 0,
        "approximate": false
      },
      {
        "modelKey": "gpt-5-6-luna",
        "meanTokensPerRunMillions": 19.1,
        "totalMillions": 57.3,
        "cacheReadMillions": 55.4,
        "outputThousands": 234,
        "compactions": 0,
        "approximate": false
      },
      {
        "modelKey": "claude-haiku-4-5",
        "meanTokensPerRunMillions": 3.0,
        "totalMillions": 9.1,
        "cacheReadMillions": 8.6,
        "outputThousands": 137,
        "compactions": 0,
        "approximate": false
      }
    ]
  },
  "runCosts": {
    "determinedAt": "2026-09-18",
    "currency": "USD",
    "note": {
      "de": "Errechnet aus den Tokenzahlen je Lauf; Anthropic-Tarife laut Herstellerdokumentation, GPT-5.6-Tarife aus öffentlich zugänglichen Tarifübersichten (zwei Quellen abgeglichen), Stand 18.09.2026. Ohne Rabatte und ohne die Kosten der Bewertung selbst. Der lokale Lauf ist mit 0,35 EUR je kWh und 70 Watt angesetzt; die Wattzahl stammt aus dem Maschinenvergleich und ist nicht am Netzteil gemessen.",
      "en": "Calculated from per-run token counts; Anthropic rates from the vendor documentation, GPT-5.6 rates from publicly accessible rate overviews (two sources cross-checked), as of 2026-09-18. Without discounts and without the cost of the assessment itself. The local run is based on 0.35 EUR per kWh and 70 watts; the wattage comes from the machine comparison and was not measured at the power adapter."
    },
    "models": [
      {
        "modelKey": "claude-opus-5",
        "operation": "cloud",
        "score": 91.0,
        "costPerRunUsd": 25.3166,
        "costPerPointUsd": 0.2782,
        "itemsUsd": {
          "freshInput": 0.0015,
          "cacheWrite": 4.1434,
          "cacheRead": 17.5184,
          "output": 3.6532
        },
        "sharesPercent": {
          "freshInput": 0.0,
          "cacheWrite": 16.4,
          "cacheRead": 69.2,
          "output": 14.4
        }
      },
      {
        "modelKey": "claude-sonnet-5",
        "operation": "cloud",
        "score": 85.3,
        "costPerRunUsd": 23.1689,
        "costPerPointUsd": 0.27162,
        "itemsUsd": {
          "freshInput": 0.0011,
          "cacheWrite": 2.3063,
          "cacheRead": 18.742,
          "output": 2.1196
        },
        "sharesPercent": {
          "freshInput": 0.0,
          "cacheWrite": 10.0,
          "cacheRead": 80.9,
          "output": 9.1
        }
      },
      {
        "modelKey": "gpt-5-6-sol",
        "operation": "cloud",
        "score": 81.3,
        "costPerRunUsd": 12.7545,
        "costPerPointUsd": 0.15688,
        "itemsUsd": {
          "freshInput": 1.8974,
          "cacheWrite": 0.0,
          "cacheRead": 8.6314,
          "output": 2.2257
        },
        "sharesPercent": {
          "freshInput": 14.9,
          "cacheWrite": 0.0,
          "cacheRead": 67.7,
          "output": 17.5
        }
      },
      {
        "modelKey": "gpt-5-6-terra",
        "operation": "cloud",
        "score": 77.3,
        "costPerRunUsd": 5.1999,
        "costPerPointUsd": 0.06727,
        "itemsUsd": {
          "freshInput": 0.8139,
          "cacheWrite": 0.0,
          "cacheRead": 3.5267,
          "output": 0.8593
        },
        "sharesPercent": {
          "freshInput": 15.7,
          "cacheWrite": 0.0,
          "cacheRead": 67.8,
          "output": 16.5
        }
      },
      {
        "modelKey": "claude-haiku-4-5",
        "operation": "cloud",
        "score": 54.7,
        "costPerRunUsd": 0.7455,
        "costPerPointUsd": 0.01363,
        "itemsUsd": {
          "freshInput": 0.0003,
          "cacheWrite": 0.2294,
          "cacheRead": 0.2872,
          "output": 0.2286
        },
        "sharesPercent": {
          "freshInput": 0.0,
          "cacheWrite": 30.8,
          "cacheRead": 38.5,
          "output": 30.7
        }
      },
      {
        "modelKey": "gpt-5-6-luna",
        "operation": "cloud",
        "score": 72.7,
        "costPerRunUsd": 0.5729,
        "costPerPointUsd": 0.00788,
        "itemsUsd": {
          "freshInput": 0.11,
          "cacheWrite": 0.0,
          "cacheRead": 0.3693,
          "output": 0.0936
        },
        "sharesPercent": {
          "freshInput": 19.2,
          "cacheWrite": 0.0,
          "cacheRead": 64.5,
          "output": 16.3
        }
      },
      {
        "modelKey": "qwen3-8-flash-next",
        "operation": "local",
        "score": 83.7,
        "costPerRunUsd": 0.0576,
        "costPerPointUsd": 0.000688,
        "itemsUsd": {
          "power": 0.0576
        },
        "sharesPercent": {
          "power": 100.0
        },
        "rangeUsd": [
          0.0329,
          0.074
        ]
      }
    ]
  },
  "computeComparison": {
    "intro": {
      "de": "Sechs der sieben Modelle sind nur über das Netz erreichbar und rechnen auf Beschleunigern, die ihre Betreiber in Gigawatt-Anlagen stellen. Das siebte lag während der Messung auf dem Schreibtisch und zog aus einem 140-Watt-Netzteil.",
      "en": "Six of the seven models are reachable only over the network and run on accelerators their operators house in gigawatt facilities. The seventh sat on a desk during the measurement, powered by a 140-watt adapter."
    },
    "columns": [
      {
        "key": "local",
        "title": {
          "de": "Lokal · vollständig im Haus",
          "en": "Local · entirely on premises"
        },
        "subtitle": {
          "de": "HP ZBook Ultra G1a",
          "en": "HP ZBook Ultra G1a"
        },
        "rows": [
          {
            "term": {
              "de": "Rechenwerk",
              "en": "Compute"
            },
            "description": {
              "de": "Ryzen AI Max+ PRO 395 mit Radeon 8060S, 70 W GPU-Budget, 140-W-Netzteil",
              "en": "Ryzen AI Max+ PRO 395 with Radeon 8060S, 70 W GPU budget, 140 W power adapter"
            }
          },
          {
            "term": {
              "de": "Speicher",
              "en": "Memory"
            },
            "description": {
              "de": "128 GiB LPDDR5X, von CPU und GPU gemeinsam genutzt — dedizierter Grafikspeicher: 0,5 GiB",
              "en": "128 GiB LPDDR5X shared between CPU and GPU — dedicated graphics memory: 0.5 GiB"
            }
          },
          {
            "term": {
              "de": "Modell",
              "en": "Model"
            },
            "description": {
              "de": "Qwen3.8-Flash-Next, 176,9 Mrd. Parameter, davon 10 von 512 Experten je Token aktiv",
              "en": "Qwen3.8-Flash-Next, 176.9 billion parameters, 10 of 512 experts active per token"
            }
          },
          {
            "term": {
              "de": "Betrieb",
              "en": "Operation"
            },
            "description": {
              "de": "halogen-Server im eigenen Netz, Kontext 262.144 Token; 886 Token/s beim Lesen, 39,9 Token/s beim Schreiben",
              "en": "halogen server on the local network, 262,144-token context; 886 tokens/s reading, 39.9 tokens/s writing"
            }
          },
          {
            "term": {
              "de": "Herkunft",
              "en": "Provenance"
            },
            "description": {
              "de": "eigene Messung am 08.09.2026 auf dem Gerät, das die Läufe gerechnet hat",
              "en": "own measurement on 8 September 2026 on the device that computed the runs"
            }
          }
        ]
      },
      {
        "key": "anthropic",
        "title": {
          "de": "Rechenzentrum · Anthropic",
          "en": "Data centre · Anthropic"
        },
        "subtitle": {
          "de": "Claude Opus 5, Sonnet 5, Haiku 4.5",
          "en": "Claude Opus 5, Sonnet 5, Haiku 4.5"
        },
        "rows": [
          {
            "term": {
              "de": "Rechenwerk",
              "en": "Compute"
            },
            "description": {
              "de": "AWS Trainium2 und Google-TPU im Verbund",
              "en": "AWS Trainium2 and Google TPUs in combination"
            }
          },
          {
            "term": {
              "de": "Anlage",
              "en": "Facility"
            },
            "description": {
              "de": "Project Rainier, rund 500.000 Trainium2-Beschleuniger, von AWS am 29.10.2025 in Betrieb gemeldet",
              "en": "Project Rainier, around 500,000 Trainium2 accelerators, reported operational by AWS on 29 October 2025"
            }
          },
          {
            "term": {
              "de": "Ausbau",
              "en": "Expansion"
            },
            "description": {
              "de": "bis zu 1 Mio. Google-TPU „Ironwood“ zugesagt (Google, April 2026); ein Verbund dieser Bauart fasst 9.216 Chips mit je 192 GB Speicher",
              "en": "up to 1 million Google “Ironwood” TPUs committed (Google, April 2026); one pod of this design holds 9,216 chips with 192 GB memory each"
            }
          },
          {
            "term": {
              "de": "Aufwand",
              "en": "Consumption"
            },
            "description": {
              "de": "35,6 bis 94,5 Mio. Token je Lauf, jede Anfrage über das Netz",
              "en": "35.6 to 94.5 million tokens per run, every request over the network"
            }
          },
          {
            "term": {
              "de": "Herkunft",
              "en": "Provenance"
            },
            "description": {
              "de": "Mitteilungen von AWS und Google; die Leistungsaufnahme je Chip nennt keiner der Beteiligten",
              "en": "announcements by AWS and Google; none of the parties states per-chip power draw"
            }
          }
        ]
      },
      {
        "key": "openai",
        "title": {
          "de": "Rechenzentrum · OpenAI",
          "en": "Data centre · OpenAI"
        },
        "subtitle": {
          "de": "GPT-5.6 Sol, Terra, Luna",
          "en": "GPT-5.6 Sol, Terra, Luna"
        },
        "rows": [
          {
            "term": {
              "de": "Rechenwerk",
              "en": "Compute"
            },
            "description": {
              "de": "NVIDIA-Beschleuniger, betrieben über Azure und das Programm Stargate",
              "en": "NVIDIA accelerators, operated through Azure and the Stargate programme"
            }
          },
          {
            "term": {
              "de": "Anlage",
              "en": "Facility"
            },
            "description": {
              "de": "Stargate: 500 Mrd. US-Dollar, Ziel 10 GW Anschlussleistung (OpenAI, Januar 2025)",
              "en": "Stargate: 500 billion US dollars, targeting 10 GW of grid connection (OpenAI, January 2025)"
            }
          },
          {
            "term": {
              "de": "Ausbau",
              "en": "Expansion"
            },
            "description": {
              "de": "Standort Abilene, Texas: über 450.000 GB200-Beschleuniger bei 1,2 GW — Presseangabe, vom Betreiber nicht bestätigt",
              "en": "Abilene, Texas site: over 450,000 GB200 accelerators at 1.2 GW — press figure, not confirmed by the operator"
            }
          },
          {
            "term": {
              "de": "Aufwand",
              "en": "Consumption"
            },
            "description": {
              "de": "17,7 bis 19,1 Mio. Token je Lauf, jede Anfrage über das Netz",
              "en": "17.7 to 19.1 million tokens per run, every request over the network"
            }
          },
          {
            "term": {
              "de": "Herkunft",
              "en": "Provenance"
            },
            "description": {
              "de": "Mitteilung von OpenAI; Bestückung und Leistungsaufnahme je Standort sind nicht veröffentlicht",
              "en": "announcement by OpenAI; per-site equipment and power draw are not published"
            }
          }
        ]
      }
    ],
    "chipComparison": {
      "intro": {
        "de": "Der Blackwell B200 ist der Baustein, aus dem die Anlagen oben bestehen — im Rack-Verbund GB200 NVL72 stecken 72 davon. Verglichen wird hier ein einzelner Beschleuniger mit dem ganzen Notebook.",
        "en": "The Blackwell B200 is the building block of the facilities above — a GB200 NVL72 rack holds 72 of them. The comparison here is one single accelerator against the whole notebook."
      },
      "rows": [
        {
          "metric": {
            "de": "Speicher für das Modell",
            "en": "Memory for the model"
          },
          "local": {
            "de": "128 GB LPDDR5X, von CPU und GPU gemeinsam genutzt",
            "en": "128 GB LPDDR5X, shared between CPU and GPU"
          },
          "accelerator": {
            "de": "186 GB HBM3e",
            "en": "186 GB HBM3e"
          },
          "factor": "1,5 ×"
        },
        {
          "metric": {
            "de": "Speicherbandbreite",
            "en": "Memory bandwidth"
          },
          "local": {
            "de": "256 GB/s, gemessen rund 215 GB/s",
            "en": "256 GB/s, measured around 215 GB/s"
          },
          "accelerator": {
            "de": "8.000 GB/s",
            "en": "8,000 GB/s"
          },
          "factor": "31 ×"
        },
        {
          "metric": {
            "de": "Rechenleistung FP16",
            "en": "FP16 compute"
          },
          "local": {
            "de": "rund 30 TFLOPS (Radeon 8060S, 40 Recheneinheiten)",
            "en": "around 30 TFLOPS (Radeon 8060S, 40 compute units)"
          },
          "accelerator": {
            "de": "2.500 TFLOPS, ohne Sparsity gerechnet",
            "en": "2,500 TFLOPS, stated without sparsity"
          },
          "factor": "84 ×"
        },
        {
          "metric": {
            "de": "Leistungsaufnahme",
            "en": "Power draw"
          },
          "local": {
            "de": "70 W GPU-Budget, 140-W-Netzteil für das ganze Gerät",
            "en": "70 W GPU budget, 140 W adapter for the whole device"
          },
          "accelerator": {
            "de": "bis 1.200 W, nur der Beschleuniger",
            "en": "up to 1,200 W, the accelerator alone"
          },
          "factor": "17 ×"
        },
        {
          "metric": {
            "de": "Anschaffung",
            "en": "Acquisition cost"
          },
          "local": {
            "de": "rund 4.000 $, vollständiges Gerät mit Display und 2-TB-SSD",
            "en": "around $4,000, complete device with display and 2 TB SSD"
          },
          "accelerator": {
            "de": "30.000 bis 55.000 $, Bauteil ohne Preisliste der Hersteller",
            "en": "$30,000 to $55,000, a component for which vendors publish no list figures"
          },
          "factor": "8 – 14 ×"
        }
      ],
      "interpretation": {
        "de": "Die erste Zeile entscheidet darüber, ob ein Modell überhaupt läuft: Ein Modell mit 177 Milliarden Parametern muss in den Speicher passen. Das Notebook hält dieselbe Größenordnung bereit wie der Beschleuniger — es liest sie nur 31-mal langsamer, und daher kommen die 39,9 Token pro Sekunde. Der Aufgabe hat das nicht geschadet: 87 Punkte im besten Lauf, einer mehr als der beste Lauf von Sonnet 5.",
        "en": "The first row decides whether a model runs at all: a 177-billion-parameter model has to fit into memory. The notebook provides the same order of magnitude as the accelerator — it just reads it 31 times more slowly, which is where the 39.9 tokens per second come from. The task did not suffer: 87 points in the best run, one more than the best Sonnet 5 run."
      },
      "sources": {
        "de": "B200: NVIDIA-Datenblatt „Blackwell“ (Dezember 2024), Variante mit 1.200 W wie im GB200 NVL72; die dortigen Rechenwerte gelten mit Sparsity, der FP16-Wert oben ist davon die Hälfte. ZBook: eigene Messung am 08.09.2026.",
        "en": "B200: NVIDIA “Blackwell” datasheet (December 2024), 1,200 W variant as in the GB200 NVL72; its compute figures include sparsity, the FP16 value above is half of that. ZBook: own measurement on 8 September 2026."
      }
    }
  },
  "referenceRun": {
    "modelKey": "qwen3-8-flash-next",
    "agentModelSystem": {
      "de": "Qwen3.8-Flash-Next mit OpenCode",
      "en": "Qwen3.8-Flash-Next with OpenCode"
    },
    "runNumber": 3,
    "score": 87,
    "hardChecksPassed": 15,
    "hardChecksTotal": 15,
    "rubricPoints": 65,
    "rubricMaximum": 70,
    "requiredScreenshots": 17,
    "presentScreenshots": 17,
    "charts": 7,
    "visualAgreement": 0.729,
    "featureCounts": {
      "restaurants": 656,
      "buildings": 77302,
      "streets": 11992,
      "inundationScenarios": 3,
      "evacuationRoutes": 3,
      "riskStates": 3
    }
  },
  "geodataInventory": [
    {
      "stage": {
        "de": "Eingang und Kontext",
        "en": "Input and context"
      },
      "items": [
        {
          "name": {
            "de": "Untersuchungsraum",
            "en": "Study area"
          },
          "type": {
            "de": "Ausdehnung",
            "en": "extent"
          },
          "format": "QGIS / GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "1",
          "source": "OpenStreetMap Nominatim",
          "role": {
            "de": "gemeinsamer Analyseausschnitt",
            "en": "shared analysis extent"
          }
        },
        {
          "name": {
            "de": "Höhenmodell",
            "en": "Elevation model"
          },
          "type": {
            "de": "Raster",
            "en": "raster"
          },
          "format": "GeoTIFF",
          "crs": "EPSG:25832",
          "extent": "342 × 345 cells",
          "count": "117,990",
          "source": "Copernicus DEM GLO-30",
          "role": {
            "de": "30-m-Grundlage der Terrain- und Gefahrenanalyse",
            "en": "30 m basis for terrain and hazard analysis"
          }
        },
        {
          "name": {
            "de": "Restaurants",
            "en": "Restaurants"
          },
          "type": {
            "de": "Punkte",
            "en": "points"
          },
          "format": "GeoPackage / GeoJSON / CSV",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "656",
          "source": "OpenStreetMap",
          "role": {
            "de": "punktbezogene Expositionsanalyse",
            "en": "point exposure analysis"
          }
        },
        {
          "name": {
            "de": "Gebäude",
            "en": "Buildings"
          },
          "type": {
            "de": "Polygone",
            "en": "polygons"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "77,302",
          "source": "OpenStreetMap",
          "role": {
            "de": "flächenbezogene Hochwasserexposition",
            "en": "polygon flood exposure"
          }
        },
        {
          "name": {
            "de": "Fahrbare Straßen",
            "en": "Drivable roads"
          },
          "type": {
            "de": "Linien",
            "en": "lines"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "11,992",
          "source": "OpenStreetMap",
          "role": {
            "de": "linienbezogene Hochwasserexposition",
            "en": "line flood exposure"
          }
        },
        {
          "name": {
            "de": "Fußwegenetz",
            "en": "Pedestrian network"
          },
          "type": {
            "de": "Kanten",
            "en": "edges"
          },
          "format": "OpenStreetMap graph",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "94,304",
          "source": "OpenStreetMap",
          "role": {
            "de": "Berechnung der Evakuierungsrouten",
            "en": "evacuation-route calculation"
          }
        },
        {
          "name": {
            "de": "Stadtbezirke",
            "en": "City districts"
          },
          "type": {
            "de": "Polygone",
            "en": "polygons"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "Stuttgart",
          "count": "19",
          "source": "OpenStreetMap",
          "role": {
            "de": "räumliche Aggregation",
            "en": "spatial aggregation"
          }
        }
      ]
    },
    {
      "stage": {
        "de": "Terrainableitungen",
        "en": "Terrain derivatives"
      },
      "items": [
        {
          "name": {
            "de": "Terrainraster",
            "en": "Terrain rasters"
          },
          "type": {
            "de": "Raster",
            "en": "rasters"
          },
          "format": "GeoTIFF",
          "crs": "EPSG:25832",
          "extent": "342 × 345 cells each",
          "count": "9",
          "source": "Copernicus DEM derived",
          "role": {
            "de": "Slope, Aspect, TPI, TWI, TRI, Profilkrümmung, Flussakkumulation, HAND und Hillshade",
            "en": "slope, aspect, TPI, TWI, TRI, profile curvature, flow accumulation, HAND and hillshade"
          }
        }
      ]
    },
    {
      "stage": {
        "de": "Gefahren und Klima",
        "en": "Hazards and climate"
      },
      "items": [
        {
          "name": {
            "de": "Sechs Gefahrenindizes",
            "en": "Six hazard indices"
          },
          "type": {
            "de": "Raster",
            "en": "rasters"
          },
          "format": "GeoTIFF",
          "crs": "EPSG:25832",
          "extent": "342 × 345 cells each",
          "count": "6",
          "source": "terrain and urban derivatives",
          "role": {
            "de": "Wind, Frost, Hochwasser, Hitze, Hangrutschung und Erosion auf [0,1]",
            "en": "wind, frost, flood, heat, landslide and erosion on [0,1]"
          }
        },
        {
          "name": {
            "de": "Multi-Hazard-Komposit",
            "en": "Multi-hazard composite"
          },
          "type": {
            "de": "Raster",
            "en": "raster"
          },
          "format": "GeoTIFF",
          "crs": "EPSG:25832",
          "extent": "342 × 345 cells",
          "count": "1",
          "source": "weighted hazard indices",
          "role": {
            "de": "gemeinsame räumliche Risikodarstellung",
            "en": "combined spatial risk representation"
          }
        },
        {
          "name": {
            "de": "Inundationszonen",
            "en": "Inundation zones"
          },
          "type": {
            "de": "Polygone",
            "en": "polygons"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "3 scenarios",
          "source": "DEM-based HAND approximation",
          "role": {
            "de": "Screening für 1 m, 2 m und 5 m",
            "en": "screening for 1 m, 2 m and 5 m"
          }
        },
        {
          "name": {
            "de": "Klimaszenarien",
            "en": "Climate scenarios"
          },
          "type": {
            "de": "Punkte und Tabellen",
            "en": "points and tables"
          },
          "format": "GeoPackage / CSV",
          "crs": "EPSG:25832",
          "extent": "656 restaurants",
          "count": "3 × 656",
          "source": "EURO-CORDEX orientation factors in the task",
          "role": {
            "de": "Baseline, RCP 4.5 und RCP 8.5 bis 2050",
            "en": "baseline, RCP 4.5 and RCP 8.5 to 2050"
          }
        }
      ]
    },
    {
      "stage": {
        "de": "Ergebnisvektoren",
        "en": "Result vectors"
      },
      "items": [
        {
          "name": {
            "de": "Restaurants mit Risikoattributen",
            "en": "Restaurants with risk attributes"
          },
          "type": {
            "de": "Punkte",
            "en": "points"
          },
          "format": "GeoPackage / GeoJSON / CSV",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "656",
          "source": "sampled hazard rasters",
          "role": {
            "de": "sechs Gefahren, Komposit und Risikoklasse",
            "en": "six hazards, composite and risk class"
          }
        },
        {
          "name": {
            "de": "Gebäude mit Hochwasserrisiko",
            "en": "Buildings with flood risk"
          },
          "type": {
            "de": "Polygone",
            "en": "polygons"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "77,257",
          "source": "sampled flood raster",
          "role": {
            "de": "Gebäudeexposition in vier Klassen",
            "en": "building exposure in four classes"
          }
        },
        {
          "name": {
            "de": "Straßen mit Hochwasserrisiko",
            "en": "Roads with flood risk"
          },
          "type": {
            "de": "Linien",
            "en": "lines"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "11,992",
          "source": "sampled flood raster",
          "role": {
            "de": "Straßenexposition in vier Klassen",
            "en": "road exposure in four classes"
          }
        },
        {
          "name": {
            "de": "Hochrisikoauswahl",
            "en": "High-risk selection"
          },
          "type": {
            "de": "Punkte",
            "en": "points"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "10 × 10 km",
          "count": "33",
          "source": "restaurant composite",
          "role": {
            "de": "Restaurants mit Komposit über 0,50",
            "en": "restaurants with composite above 0.50"
          }
        },
        {
          "name": {
            "de": "Evakuierungsrouten",
            "en": "Evacuation routes"
          },
          "type": {
            "de": "Linien und Punkte",
            "en": "lines and points"
          },
          "format": "GeoPackage",
          "crs": "EPSG:25832",
          "extent": "central Stuttgart",
          "count": "3",
          "source": "OpenStreetMap pedestrian network",
          "role": {
            "de": "Routen, Start- und Zielpunkte mit vulnerablen Teilstrecken",
            "en": "routes, starts and targets with vulnerable segments"
          }
        }
      ]
    }
  ],
  "findings": {
    "inundation": {
      "1m": {
        "area_km2": 11.238,
        "buildings_affected": 5741,
        "streets_km_affected": 121.676
      },
      "2m": {
        "area_km2": 13.606,
        "buildings_affected": 7914,
        "streets_km_affected": 164.45
      },
      "5m": {
        "area_km2": 20.012,
        "buildings_affected": 13394,
        "streets_km_affected": 279.616
      }
    },
    "riskClasses": {
      "baseline": {
        "Niedrig": 2.6,
        "Mittel": 75.9,
        "Hoch": 21.3,
        "Sehr Hoch": 0.2
      },
      "rcp45": {
        "Niedrig": 0.3,
        "Mittel": 13.7,
        "Hoch": 84.5,
        "Sehr Hoch": 1.5
      },
      "rcp85": {
        "Niedrig": 0.0,
        "Mittel": 15.7,
        "Hoch": 83.1,
        "Sehr Hoch": 1.2
      }
    },
    "routes": [
      {
        "name": "Santini",
        "lengthMetres": 1975.7,
        "walkingMinutes": 23.7,
        "vulnerableKilometres": 0.001,
        "vulnerablePercent": 0.1
      },
      {
        "name": "Restaurant Spvgg Cannstatt",
        "lengthMetres": 1933.1,
        "walkingMinutes": 23.2,
        "vulnerableKilometres": 0.001,
        "vulnerablePercent": 0.1
      },
      {
        "name": "Köfteci Tuncay",
        "lengthMetres": 1975.1,
        "walkingMinutes": 23.7,
        "vulnerableKilometres": 0.001,
        "vulnerablePercent": 0.1
      }
    ]
  },
  "media": {
    "charts": [
      {
        "title": {
          "de": "Korrelationsmatrix",
          "en": "Correlation matrix"
        },
        "alt": {
          "de": "Korrelationsmatrix der sechs Gefahrenindizes mit beschrifteten Pearson-Koeffizienten.",
          "en": "Correlation matrix for the six hazard indices with annotated Pearson coefficients."
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/charts/01_correlation_heatmap.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/01_correlation_heatmap-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/01_correlation_heatmap-960.webp",
        "width": 1050,
        "height": 900,
        "textAlternative": {
          "de": "Die Matrix zeigt, welche Gefahren räumlich zusammenfallen und welche gegenläufig sind — die Grundlage für die Gewichtung des Komposits.",
          "en": "The matrix shows which hazards coincide spatially and which run opposite — the basis for weighting the composite."
        }
      },
      {
        "title": {
          "de": "Gefahrenverteilungen",
          "en": "Hazard distributions"
        },
        "alt": {
          "de": "Sechs Histogramme zeigen die Werteverteilung von Wind, Frost, Hochwasser, Hitze, Hangrutschung und Erosion.",
          "en": "Six histograms show the distributions of wind, frost, flood, heat, landslide and erosion values."
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/charts/02_hazard_histograms.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/02_hazard_histograms-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/02_hazard_histograms-960.webp",
        "width": 1950,
        "height": 1050,
        "textAlternative": {
          "de": "Die Verteilungen machen sichtbar, welche Indizes breit streuen und welche sich auf bestimmte Wertebereiche konzentrieren.",
          "en": "The distributions show which indices vary broadly and which concentrate in particular value ranges."
        }
      },
      {
        "title": {
          "de": "Profile der fünf höchsten Restaurantwerte",
          "en": "Profiles of the five highest restaurant scores"
        },
        "alt": {
          "de": "Radarprofile vergleichen die sechs Gefahrenanteile der fünf höchstbewerteten Restaurants.",
          "en": "Radar profiles compare the six hazard components of the five highest-scoring restaurants."
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/charts/03_radar_top5.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/03_radar_top5-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/03_radar_top5-960.webp",
        "width": 1200,
        "height": 1200,
        "textAlternative": {
          "de": "Die Profile zeigen, dass ähnlich hohe Kompositwerte aus unterschiedlichen Kombinationen von Hochwasser, Erosion, Hitze und weiteren Gefahren entstehen.",
          "en": "The profiles show that similarly high composite scores can arise from different combinations of flood, erosion, heat and other hazards."
        }
      },
      {
        "title": {
          "de": "Restaurants je Risikoklasse",
          "en": "Restaurants by risk class"
        },
        "alt": {
          "de": "Balkendiagramm mit der Zahl der Restaurants in vier Risikoklassen.",
          "en": "Bar chart showing restaurant counts in four risk classes."
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/charts/04_risk_class_counts.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/04_risk_class_counts-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/04_risk_class_counts-960.webp",
        "width": 1050,
        "height": 750,
        "textAlternative": {
          "de": "In der Baseline liegen 2,6 % niedrig, 75,9 % mittel, 21,3 % hoch und 0,2 % sehr hoch.",
          "en": "At baseline, 2.6% are low, 75.9% medium, 21.3% high and 0.2% very high."
        }
      },
      {
        "title": {
          "de": "Höhe und Hochwasserwert",
          "en": "Elevation and flood score"
        },
        "alt": {
          "de": "Streudiagramm von Geländehöhe und Hochwasserindex mit Trendlinie.",
          "en": "Scatter plot of terrain elevation and flood index with a trend line."
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/charts/05_elevation_vs_flood.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/05_elevation_vs_flood-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/05_elevation_vs_flood-960.webp",
        "width": 1050,
        "height": 750,
        "textAlternative": {
          "de": "Das Diagramm prüft den erwarteten Zusammenhang zwischen tiefer Lage und höherem Hochwasserwert, zeigt aber zugleich die Streuung durch weitere Komponenten.",
          "en": "The chart tests the expected relationship between low elevation and higher flood score while showing the variation introduced by other components."
        }
      },
      {
        "title": {
          "de": "Gefahren nach Risikoklasse",
          "en": "Hazards by risk class"
        },
        "alt": {
          "de": "Boxplots vergleichen alle sechs Gefahrenindizes über die vier Restaurant-Risikoklassen.",
          "en": "Box plots compare all six hazard indices across the four restaurant risk classes."
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/charts/06_boxplots_by_class.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/06_boxplots_by_class-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/06_boxplots_by_class-960.webp",
        "width": 1800,
        "height": 900,
        "textAlternative": {
          "de": "Die Verteilungen zeigen, welche Gefahren mit zunehmender Kompositklasse ansteigen und wie stark sich die Klassen überlappen.",
          "en": "The distributions show which hazards rise with the composite class and how strongly the classes overlap."
        }
      },
      {
        "title": {
          "de": "Klimabedingte Klassenverschiebung",
          "en": "Climate-driven class shift"
        },
        "alt": {
          "de": "Balkendiagramm vergleicht die Restaurant-Risikoklassen für Baseline, RCP 4.5 und RCP 8.5.",
          "en": "Bar chart comparing restaurant risk classes for baseline, RCP 4.5 and RCP 8.5."
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/charts/07_climate_comparison.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/charts/07_climate_comparison-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/charts/07_climate_comparison-960.webp",
        "width": 1350,
        "height": 825,
        "textAlternative": {
          "de": "Der Anteil Hoch und Sehr hoch steigt von 21,5 % in der Baseline auf 86,0 % unter RCP 4.5; unter RCP 8.5 liegt er bei 84,3 %.",
          "en": "The combined High and Very High share rises from 21.5% at baseline to 86.0% under RCP 4.5; under RCP 8.5 it stands at 84.3%."
        }
      }
    ],
    "screenshots": [
      {
        "title": {
          "de": "Projektübersicht und Datenbasis",
          "en": "Project overview and data basis"
        },
        "alt": {
          "de": "DEM, lokale OSM-Basemap, Restaurants, Gebäude und Bezirke im Stuttgarter Untersuchungsraum.",
          "en": "DEM, local OSM basemap, restaurants, buildings and districts in the Stuttgart study area"
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/01_project_setup.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/01_project_setup-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/01_project_setup-960.webp",
        "width": 1446,
        "height": 1000
      },
      {
        "title": {
          "de": "Terrainableitungen",
          "en": "Terrain derivatives"
        },
        "alt": {
          "de": "Hillshade und Hangneigung machen Talsohle, Hänge und Höhenrücken sichtbar.",
          "en": "Hillshade and slope reveal the valley floor, slopes and ridges"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/02_terrain_derivatives.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/02_terrain_derivatives-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/02_terrain_derivatives-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Wind-Exposition",
          "en": "Wind exposure"
        },
        "alt": {
          "de": "Der Windindex hebt Rücken und exponierte Hänge gegenüber der Tallage hervor.",
          "en": "The wind index highlights ridges and exposed slopes relative to the valley"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/03_wind_exposure.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/03_wind_exposure-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/03_wind_exposure-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Hochwasserindex",
          "en": "Flood index"
        },
        "alt": {
          "de": "Gewässerkorridore erscheinen als räumlich zusammenhängende Bänder erhöhter Werte.",
          "en": "Water corridors appear as spatially connected bands of elevated values"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/04_river_flood.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/04_river_flood-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/04_river_flood-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Hitzestress",
          "en": "Heat stress"
        },
        "alt": {
          "de": "Hohe Werte konzentrieren sich auf tiefe, verdichtete Tallagen und südexponierte Bereiche.",
          "en": "High values concentrate in low, dense valley locations and south-facing areas"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/05_heat_stress.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/05_heat_stress-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/05_heat_stress-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Hangrutschung",
          "en": "Landslide"
        },
        "alt": {
          "de": "Steile, feuchte Talkanten treten gegenüber flacheren Bereichen hervor.",
          "en": "Steep, wet valley edges stand out from flatter areas"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/06_landslide.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/06_landslide-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/06_landslide-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Komposit-Gefahrenkarte",
          "en": "Composite hazard map"
        },
        "alt": {
          "de": "Der gewichtete Komposit verbindet Tal-, Gewässer-, Hitze- und Hangmuster mit Restaurantpunkten.",
          "en": "The weighted composite combines valley, water, heat and slope patterns with restaurant points"
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/07_composite_hazard.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/07_composite_hazard-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/07_composite_hazard-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Restaurant-Risiko",
          "en": "Restaurant risk"
        },
        "alt": {
          "de": "656 Restaurants sind anhand der sechs Gefahrenwerte in vier Kompositklassen dargestellt.",
          "en": "656 restaurants are displayed in four composite classes based on six hazard values"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/08_restaurant_risk.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/08_restaurant_risk-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/08_restaurant_risk-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Gebäude nach Hochwasserrisiko",
          "en": "Buildings by flood risk"
        },
        "alt": {
          "de": "77.257 Gebäudepolygone zeigen erhöhte Klassen vor allem in tieferen Korridoren.",
          "en": "77,257 building polygons show elevated classes mainly in lower corridors"
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/09_building_flood.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/09_building_flood-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/09_building_flood-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Straßen nach Hochwasserrisiko",
          "en": "Roads by flood risk"
        },
        "alt": {
          "de": "11.992 Straßenobjekte sind über Klasse und Linienbreite nach Hochwasserwert differenziert.",
          "en": "11,992 road objects are differentiated by flood class and line width"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/10_street_flood.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/10_street_flood-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/10_street_flood-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Inundationszonen",
          "en": "Inundation zones"
        },
        "alt": {
          "de": "Gestaffelte 1-m-, 2-m- und 5-m-Zonen folgen Gewässern und tieferen Geländebereichen.",
          "en": "Nested 1 m, 2 m and 5 m zones follow waterways and lower terrain"
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/11_inundation_zones.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/11_inundation_zones-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/11_inundation_zones-960.webp",
        "width": 822,
        "height": 828
      },
      {
        "title": {
          "de": "Risiko nach Stadtbezirk",
          "en": "Risk by city district"
        },
        "alt": {
          "de": "Die Bezirksaggregation fasst mittleres Restaurantrisiko, Anzahl und Hochrisikoanteil räumlich zusammen.",
          "en": "The district aggregation summarises mean restaurant risk, count and high-risk share spatially"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/12_quartier_risk.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/12_quartier_risk-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/12_quartier_risk-960.webp",
        "width": 1254,
        "height": 1000
      },
      {
        "title": {
          "de": "Hochrisikoauswahl",
          "en": "High-risk selection"
        },
        "alt": {
          "de": "33 Restaurants mit einem Kompositwert über 0,50 zeigen räumliche Konzentrationen.",
          "en": "33 restaurants with a composite score above 0.50 reveal spatial concentrations"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/13_risk_ranking.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/13_risk_ranking-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/13_risk_ranking-960.webp",
        "width": 1600,
        "height": 1000
      },
      {
        "title": {
          "de": "Detail des höchsten Werts",
          "en": "Highest-score detail"
        },
        "alt": {
          "de": "Der Detailausschnitt verortet das höchstbewertete Restaurant im umgebenden Gefahrenraster.",
          "en": "The detail view locates the highest-scoring restaurant in the surrounding hazard raster"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/14_high_risk_zoom.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/14_high_risk_zoom-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/14_high_risk_zoom-960.webp",
        "width": 1600,
        "height": 1000
      },
      {
        "title": {
          "de": "Evakuierungsrouten",
          "en": "Evacuation routes"
        },
        "alt": {
          "de": "Drei Fußrouten führen von hoch bewerteten Restaurants zu einem sicheren Ziel; vulnerable Teilstücke sind markiert.",
          "en": "Three pedestrian routes lead from high-scoring restaurants to a safe target, with vulnerable segments highlighted"
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/15_evacuation_routes.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/15_evacuation_routes-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/15_evacuation_routes-960.webp",
        "width": 1414,
        "height": 956
      },
      {
        "title": {
          "de": "Baseline und RCP 8.5",
          "en": "Baseline and RCP 8.5"
        },
        "alt": {
          "de": "Die Gegenüberstellung macht den Anstieg hoher und sehr hoher Restaurantklassen bis 2050 sichtbar.",
          "en": "The comparison shows the increase in High and Very High restaurant classes by 2050"
        },
        "featured": true,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/16_climate_comparison.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/16_climate_comparison-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/16_climate_comparison-960.webp",
        "width": 1159,
        "height": 551
      },
      {
        "title": {
          "de": "Abschlusskomposition",
          "en": "Final composition"
        },
        "alt": {
          "de": "Hillshade, 2-m-Inundation, Gebäude, Restaurants und Routen sind in einer gemeinsamen QGIS-Ansicht kombiniert.",
          "en": "Hillshade, 2 m inundation, buildings, restaurants and routes are combined in one QGIS view"
        },
        "featured": false,
        "original": "/assets/images/spatialagents/benchmark-08/screenshots/17_final_composition.png",
        "preview640": "/assets/images/spatialagents/benchmark-08/screenshots/17_final_composition-640.webp",
        "preview960": "/assets/images/spatialagents/benchmark-08/screenshots/17_final_composition-960.webp",
        "width": 853,
        "height": 860
      }
    ],
    "supplementaryScreenshots": []
  },
  "visualizations": [
    {
      "key": "modelRuns",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/model-runs-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/model-runs-en.svg"
      },
      "title": {
        "de": "Modellvergleich mit Einzelruns",
        "en": "Model comparison with individual runs"
      },
      "alt": {
        "de": "Einzelne Laufwerte, Spannweite und Mittelwert jedes Agent-Modell-Systems auf einer gemeinsamen Skala von 0 bis 100 Punkten.",
        "en": "Individual run scores, range and mean for each agent-model system on a shared scale from 0 to 100 points."
      },
      "width": 1280,
      "height": 900
    },
    {
      "key": "scoreComposition",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/score-composition-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/score-composition-en.svg"
      },
      "title": {
        "de": "Zusammensetzung der Bewertung",
        "en": "Score composition"
      },
      "alt": {
        "de": "Mittlere Beiträge der sechs Bewertungsbereiche für jedes Agent-Modell-System.",
        "en": "Mean contributions of the six assessment areas for each agent-model system."
      },
      "width": 1280,
      "height": 1100
    },
    {
      "key": "criteriaHeatmap",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/criteria-heatmap-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/criteria-heatmap-en.svg"
      },
      "title": {
        "de": "Fachliche Kriterien im Vergleich",
        "en": "Domain criteria compared"
      },
      "alt": {
        "de": "Mittlerer Erfüllungsgrad aller elf fachlichen Kriterien über sämtliche freigegebenen Runs.",
        "en": "Mean completion of all eleven domain criteria across every approved run."
      },
      "width": 1980,
      "height": 1040
    },
    {
      "key": "climateShift",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/climate-shift-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/climate-shift-en.svg"
      },
      "title": {
        "de": "Verschiebung der Klimarisikoklassen",
        "en": "Shift in climate-risk classes"
      },
      "alt": {
        "de": "Anteile der vier Risikoklassen für Baseline, RCP 4.5 und RCP 8.5 im dokumentierten Referenzlauf.",
        "en": "Shares of the four risk classes for baseline, RCP 4.5 and RCP 8.5 in the documented reference run."
      },
      "width": 1280,
      "height": 620
    },
    {
      "key": "inundationImpact",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/inundation-impact-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/inundation-impact-en.svg"
      },
      "title": {
        "de": "Auswirkungen der Inundationstiefen",
        "en": "Impact of inundation depths"
      },
      "alt": {
        "de": "Betroffene Fläche, Gebäude und Straßenlänge bei 1, 2 und 5 Metern im dokumentierten Referenzlauf.",
        "en": "Affected area, buildings and road length at 1, 2 and 5 metres in the documented reference run."
      },
      "width": 1280,
      "height": 620
    },
    {
      "key": "timeBalance",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/time-balance-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/time-balance-en.svg"
      },
      "title": {
        "de": "Wohin die Laufzeit geht",
        "en": "Where the runtime goes"
      },
      "alt": {
        "de": "Mittlere Laufzeit je Modell, aufgeteilt in Modellzeit, Geoverarbeitung und übrige Werkzeugzeit; rechts die Schreibgeschwindigkeit in Token pro Sekunde.",
        "en": "Mean runtime per model, split into model time, geoprocessing and remaining tool time; writing speed in tokens per second on the right."
      },
      "width": 1280,
      "height": 700
    },
    {
      "key": "tokenUsage",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/token-usage-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/token-usage-en.svg"
      },
      "title": {
        "de": "Token je Lauf",
        "en": "Tokens per run"
      },
      "alt": {
        "de": "Mittlerer Tokenverbrauch je Lauf in Millionen für jedes Agent-Modell-System.",
        "en": "Mean token consumption per run in millions for each agent-model system."
      },
      "width": 1280,
      "height": 760
    },
    {
      "key": "runCosts",
      "path": {
        "de": "/assets/images/spatialagents/benchmark-08/generated/run-costs-de.svg",
        "en": "/assets/images/spatialagents/benchmark-08/generated/run-costs-en.svg"
      },
      "title": {
        "de": "Was ein Lauf kostet",
        "en": "What a run costs"
      },
      "alt": {
        "de": "Mittlere Kosten je Lauf in US-Dollar für jedes Agent-Modell-System, aufgeteilt nach Kostenposten; der lokale Lauf zahlt nur Strom.",
        "en": "Mean cost per run in US dollars for each agent-model system, split by cost item; the local run pays only for electricity."
      },
      "width": 1280,
      "height": 860
    }
  ],
  "limitations": [
    {
      "de": "Das 30-m-Raster glättet kleinräumige Geländeformen.",
      "en": "The 30 m raster smooths small terrain features."
    },
    {
      "de": "Die HAND-Auswertung des Referenzlaufs ist eine DEM-basierte Approximation und keine hydraulische Simulation.",
      "en": "The reference run uses a DEM-based HAND approximation, not a hydraulic simulation."
    },
    {
      "de": "Vollständigkeit und Detailgrad der OpenStreetMap-Daten variieren räumlich.",
      "en": "OpenStreetMap completeness and detail vary spatially."
    },
    {
      "de": "Die Klimafaktoren bilden ein regionales Szenario für 2050 und keine lokale Extremereignissimulation.",
      "en": "The climate factors represent a regional 2050 scenario, not a local extreme-event simulation."
    },
    {
      "de": "Die Ergebnisse sind ein vergleichendes räumliches Screening und keine amtliche Hochwasser- oder Gefahrenkarte.",
      "en": "The results are a comparative spatial screening, not an official flood or hazard map."
    }
  ],
  "downloads": {
    "qgisProject": {
      "path": "/downloads/spatialagents-benchmark-08-stuttgart-qgis.zip",
      "bytes": 27742937,
      "format": "ZIP"
    },
    "promptGerman": "/downloads/benchmark-08-prompt-de.md",
    "promptEnglish": "/downloads/benchmark-08-prompt-en.md"
  },
  "dataSources": [
    {
      "name": "OpenStreetMap",
      "attribution": "© OpenStreetMap contributors",
      "licence": "ODbL 1.0",
      "url": "https://www.openstreetmap.org/copyright"
    },
    {
      "name": "Copernicus DEM GLO-30",
      "attribution": "Copernicus DEM © DLR e.V. and Airbus Defence and Space GmbH",
      "url": "https://dataspace.copernicus.eu/explore-data/data-collections/copernicus-contributing-missions/collections-description/COP-DEM"
    },
    {
      "name": "EURO-CORDEX",
      "role": {
        "de": "Orientierungsfaktoren der Aufgabenstellung für 2050",
        "en": "2050 orientation factors provided in the task"
      }
    }
  ]
}
