diff --git a/CHANGELOG.md b/CHANGELOG.md index 56be68d7..76879ef6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,29 @@ # Changelog +## Sprint 216 Regional thematic coverage (2026-07-16) + +- Provisioned all five governed Departement Omgeving thematic rasters for all + 28 approved Kempen municipalities and for the complete persisted transport + region. The resulting 145 ready Datasets remain linked to exact Areas and + contain no duplicate area/product pairs. +- Raised only the thematic-raster acquisition envelope to the measured Kempen + extent: 60 km per side and 30 million output pixels. Official WCS reads stay + partitioned into fixed 10 km tiles; orthophoto, DHMV and flood limits were not + changed. +- Added bounded retries for interrupted or transient official WCS tile + responses. Partial bytes are never accepted and three failed attempts still + produce the canonical provider-unavailable error. +- Hardened the local assistant prompt so year, source and measurement quality + must remain attached to the same Dataset when one requested theme has + multiple official observations. +- Verified the complete regional map workflow against live PostGIS. A full + Kempen selection reports 45,126.87 ha space occupation, 97,375.81 ha open + space, an estimated 484,146.70 inhabitants from the 2019 density raster and + the persisted 2022 accessibility and service scores. +- No migration, live provider integration, synthetic metric or direct database + write was introduced. + ## Sprint 215 Grounded assistant cross-domain reliability (2026-07-16) - Raised the bounded local Ollama answer budget from 700 to 1,200 tokens after diff --git a/backend/app/services/geo_assistant_service.py b/backend/app/services/geo_assistant_service.py index 28ab2f5e..57cc8526 100644 --- a/backend/app/services/geo_assistant_service.py +++ b/backend/app/services/geo_assistant_service.py @@ -649,6 +649,8 @@ class GeoAssistantService: "Als is_estimate true is, noem de waarde verplicht een schatting en nooit exact. " "Een officiƫle bron maakt een afgeleide gebiedswaarde niet exact; noem een schatting nooit officieel geteld. " "De numerieke contextwaarden zijn al bronveilig afgerond; neem die afgeronde waarden letterlijk over. " + "Gebruik bij elke meting uitsluitend het jaar, de bron en de meetkwaliteit van dezelfde dataset. " + "Als een thema meerdere datasets of jaren bevat, benoem elke meting afzonderlijk; voeg bron, jaar of kwaliteit nooit samen in een kop of zin. " "Objectaantallen zijn ondersteunend; geef betekenisvolle oppervlakte-, lengte- of bevolkingsmetriek voorrang. " "Wanneer de gebruiker meerdere thema's opsomt, behandel elk gevraagd thema en voeg geen ongevraagd thema toe. " "Houd het antwoord beknopt: groepeer de kernmetrieken per gevraagd thema en herhaal geen beperkingen. " diff --git a/backend/tests/test_sprint202_temporal_metrics_and_ollama.py b/backend/tests/test_sprint202_temporal_metrics_and_ollama.py index 5b5f500e..8e10a44b 100644 --- a/backend/tests/test_sprint202_temporal_metrics_and_ollama.py +++ b/backend/tests/test_sprint202_temporal_metrics_and_ollama.py @@ -288,6 +288,8 @@ def test_geo_assistant_sends_grounded_context_without_thinking_trace(monkeypatch assert "noem de waarde verplicht een schatting" in captured["payload"]["messages"][0]["content"] assert "noem een schatting nooit officieel geteld" in captured["payload"]["messages"][0]["content"] assert "contextwaarden zijn al bronveilig afgerond" in captured["payload"]["messages"][0]["content"] + assert "uitsluitend het jaar, de bron en de meetkwaliteit van dezelfde dataset" in captured["payload"]["messages"][0]["content"] + assert "voeg bron, jaar of kwaliteit nooit samen" in captured["payload"]["messages"][0]["content"] assert "verzin geen oorzaak, voorspelling, verzadiging" in captured["payload"]["messages"][0]["content"] assert "bereken zelf geen gemiddelde, tempo, oorzaak of afgeleide trend" in captured["payload"]["messages"][0]["content"] assert "zonder Markdown-symbolen" in captured["payload"]["messages"][0]["content"] diff --git a/docs/CODEX_EXECUTION_LOG.md b/docs/CODEX_EXECUTION_LOG.md index 289c2b5f..fbbcceb9 100644 --- a/docs/CODEX_EXECUTION_LOG.md +++ b/docs/CODEX_EXECUTION_LOG.md @@ -1,3 +1,39 @@ +## Sprint 216 Regional thematic coverage (2026-07-16) + +Changed: +- Ran the governed thematic-raster operator for every one of the 28 persisted + municipality Areas in `Kempen Regional Workbench` after a successful + Arendonk smoke. All five allowlisted products completed for every Area. +- Added five separately persisted snapshots for the complete `Vervoerregio + Kempen - officiele operationele grens`, enabling free selections that cross + municipality boundaries while preserving exact Area clipping. +- Increased only `THEMATIC_RASTER_MAX_SIDE_M` to 60,000 and + `THEMATIC_RASTER_MAX_PIXELS` to 30,000,000. The service still rejects larger + requests and reads the official WCS in fixed 10 km tiles. +- Retried transient WCS failures at most three times with a bounded delay. + Interrupted responses are discarded and permanent failures remain explicit. +- Required the local assistant to keep each metric's year, source and + measurement quality together when a theme has several official datasets. + +Validation evidence: +- The final inventory contains 145 ready thematic Datasets across 29 Areas and + five product keys, with zero missing metadata/storage paths and zero duplicate + Area/product pairs. All 145 TIFF files are non-empty and occupy 56 MB. +- A second complete-region operator run reused all five existing Datasets. +- Browser validation on `http://192.168.10.150:1202` showed every regional + thematic source as available, rendered the MapLibre overlay and calculated + the complete Kempen result without browser warnings or errors. +- The full readiness gate passed 733 backend tests, compilation, fixture and + API-contract audits, one Alembic head, frontend typecheck, production build + and shell checks. +- Live PostGIS reports version 3.6 and the all-in-one container remained + healthy throughout acquisition and analysis. + +Next: +- Generalize the separate DOV soil-map operator from Mol to all 28 municipality + partitions. Keep the historical 1949-1971 survey semantics and raw source + manifest explicit; do not merge soil provenance into the raster operator. + ## Sprint 215 Grounded assistant cross-domain reliability (2026-07-16) Changed: diff --git a/docs/TODO.md b/docs/TODO.md index 9fb9b5cb..203545a1 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -32,7 +32,8 @@ - [x] Connect a drawn rectangle to bounded official orthophoto acquisition, local configured-YOLO detection and persisted GRB QA. - [x] Add governed official space-occupation, open-space, population-density, accessibility and service-level rasters with semantic map metrics. - [x] Add the DOV digital soil map for Mol with exact clipping, source attributes and historical survey limitations. -- [ ] Execute the governed thematic-raster operator for every persisted Kempen municipality after the Mol live gate passes. +- [x] Execute the governed thematic-raster operator for every persisted Kempen municipality after the Mol live gate passes. +- [x] Persist one bounded whole-region snapshot per thematic raster so drawn selections can cross municipality boundaries without changing source semantics. - [ ] Generalize the DOV soil-map operator to all 28 approved Kempen municipality partitions with one regional snapshot manifest. ## Governed source expansion backlog