diff --git a/backend/app/services/temporal_analysis_service.py b/backend/app/services/temporal_analysis_service.py index c9cd14cb..bb1d7f10 100644 --- a/backend/app/services/temporal_analysis_service.py +++ b/backend/app/services/temporal_analysis_service.py @@ -327,9 +327,10 @@ class TemporalAnalysisService: warnings = [ "WALOUS-evolutie vergelijkt celgebaseerde landbedekkingsoppervlakten; individuele objectwijzigingen zijn niet beschikbaar.", ] - limitation = str(later_summary.get("warning") or earlier_summary.get("warning") or "").strip() - if limitation: - warnings.append(limitation) + for summary in (earlier_summary, later_summary): + limitation = str(summary.get("warning") or "").strip() + if limitation and limitation not in warnings: + warnings.append(limitation) return TemporalComparisonResponse( temporal_series_key=str(earlier.temporal_series_key), earlier=TemporalDatasetRef( @@ -497,7 +498,6 @@ class TemporalAnalysisService: earlier_full_dataset_area: bool = False, later_full_dataset_area: bool = False, ) -> tuple[TemporalObjectChanges, dict[str, Any], list[str]]: - earlier_config = earlier.source_metadata if isinstance(earlier.source_metadata, dict) else {} later_config = later.source_metadata if isinstance(later.source_metadata, dict) else {} earlier_identity = TemporalAnalysisService._identity_contract(earlier) later_identity = TemporalAnalysisService._identity_contract(later) diff --git a/backend/tests/test_walous_land_cover_service.py b/backend/tests/test_walous_land_cover_service.py index 6a9bccbf..58a06752 100644 --- a/backend/tests/test_walous_land_cover_service.py +++ b/backend/tests/test_walous_land_cover_service.py @@ -499,7 +499,11 @@ def test_walous_temporal_comparison_reuses_persisted_raster_metrics( } ], }, - "limitation_message": "Cell-based estimate.", + "limitation_message": ( + "2018 crosswalk and methodology limitation." + if dataset_id == earlier.id + else "2023 edition accuracy limitation." + ), } monkeypatch.setattr(WalousLandCoverService, "analyze", analyze) @@ -523,6 +527,8 @@ def test_walous_temporal_comparison_reuses_persisted_raster_metrics( assert result.metric.later_value == 5.5 assert result.metric.absolute_change == 1.5 assert result.object_changes.available is False + assert "2018 crosswalk and methodology limitation." in result.warnings + assert "2023 edition accuracy limitation." in result.warnings def test_walous_api_routes_use_canonical_envelopes(monkeypatch) -> None: diff --git a/docs/CODEX_EXECUTION_LOG.md b/docs/CODEX_EXECUTION_LOG.md index 23390375..f6f7c0c9 100644 --- a/docs/CODEX_EXECUTION_LOG.md +++ b/docs/CODEX_EXECUTION_LOG.md @@ -3673,6 +3673,21 @@ Validation: scope, validated regions, national status and the review requirement; the configured local weights remain bound to Mol/Kempen evidence and fail closed as not nationally validated. +- Deployed immutable AI image + `geointel-all-in-one:f5431387128d193e6e638818f5641d3410227fd6-ai`; + live health, PostGIS 3.6, Alembic `202607160001`, browser proxy and packaged + SPW terrain provisioner checks passed. The configured YOLO capability now + returns `nationally_validated=false`, `validated_regions=[flanders_mol_kempen]` + and `operator_review_required=true` from the runtime API. +- Live WALOUS 2018 acquisition created Dataset + `572dd6d0-c829-41d4-bf4a-19b6563c3ff0` for the 130.28 km² Wallonia golden + area. All 1,302,769 derived 10 m cells were valid; measured cover included + 3,615.39 ha forest/tree cover, 209.84 ha water and 2,315.33 ha artificial + cover. Same-scope 2020/2023 acquisition then produced a three-observation, + seven-metric 2018-2023 comparison without inventing object changes. +- Live comparison exposed that only the later WALOUS limitation was returned. + Temporal responses now retain both edition warnings, ensuring the 2018 + crosswalk/methodology caveat survives comparison with 2023. - Live Tower provisioning exposed an incorrect assumption that 11 WALOUS classes implied numeric codes 1 through 11. The official SPW legend and the downloaded 2020 raster confirm codes `1,2,3,4,5,6,7,8,9,80,90`. Corrected