{
  "version": "1.1",
  "checks": {
    "scene_completeness": "19/19 Tier1 L2SP scenes in catalog query",
    "unique_scene_dates": true,
    "native_grid_alignment": "EPSG32633 30m; native half-pixel origin preserved",
    "city_boundary_rasterized": true,
    "water_and_buffer_excluded_from_LST": true,
    "minimum_four_observations_and_each_month": true,
    "binary_size_and_nodata_checks": "passed",
    "NDVI_range_check": "passed",
    "thermal_median_range_C": [
      25.94,
      57.87
    ],
    "NDVI_median_range": [
      -0.044,
      0.931
    ],
    "elevation_range_m": [
      97.3,
      1031.65
    ],
    "hydrology": {
      "method": "Priority flood diagnostic surface; D8 steepest descent, MFD slope^1.1. Flats follow flood parent. Original terrain is preserved for display.",
      "grid_m": 20,
      "valid_cells": 1989328,
      "water_outlet_cells": 17213,
      "D8_mass_balance_error_cells": 0.0,
      "MFD_mass_balance_error_cells": 0.0,
      "routing_order_check": "passed",
      "segments": 1652,
      "minimum_contributing_area_km2": 0.2,
      "limited_by_source_coverage": true,
      "limitations": [
        "Regional topographic screening only. Not a flood-hazard or risk map.",
        "No rainfall, infiltration, stormwater drains, culvert surveys or river boundary conditions.",
        "20m mesh cannot resolve curbs, walls or individual street drainage.",
        "Water polygons are treated as outlets. Sava river flooding and backwater are not simulated.",
        "DTM coverage limits contributing areas. All catchment sizes are conditional on coverage; edge flags do not prove a complete basin.",
        "Fill depth is a numerical diagnostic, never flood depth.",
        "No independent event or survey validation."
      ]
    },
    "official_address_search": {
      "status": "passed",
      "cases": [
        "Ilica 157",
        "Trg bana Josipa Jelačića 1",
        "Avenija Dubrovnik 17"
      ],
      "checks": [
        "real upstream address search through shipped route function",
        "house-number geometry response",
        "invalid-id rejection"
      ]
    },
    "address_readout_crosscheck": {
      "status": "passed",
      "cases": [
        {
          "name": "Ilica 157",
          "lon": 15.950010260284914,
          "lat": 45.81234882995988,
          "land": 223,
          "coverage": 1.0,
          "vegCoverage": 0.8834080717488789,
          "median": 40.84,
          "ndvi": 0.3061
        },
        {
          "name": "Trg bana Josipa Jelačića 1",
          "lon": 15.976140555058008,
          "lat": 45.81331634744941,
          "land": 214,
          "coverage": 1.0,
          "vegCoverage": 0.9766355140186916,
          "median": 43.425,
          "ndvi": 0.1652
        },
        {
          "name": "Avenija Dubrovnik 17",
          "lon": 15.981545725178318,
          "lat": 45.77843650010665,
          "land": 218,
          "coverage": 0.9724770642201835,
          "vegCoverage": 0.8807339449541285,
          "median": 42.775,
          "ndvi": 0.38655
        }
      ],
      "method": "Actual shipped JavaScript evaluated with real binary assets; compared to independent NumPy/PROJ results. Includes outside-coverage handling. Not a browser rendering test."
    },
    "typescript": "passed",
    "raster_visual_inspection": "Summer thermal overlay inspected in v1.0. Recoloured v1.1 NDVI inspected; original transparency mask unchanged.",
    "LST_reconstruction_v11": {
      "status": "passed",
      "method": "Reconstructed seasonal median and valid-date counts from all 19 frozen per-date arrays; verified summer admission and water/city exclusions.",
      "maximum_difference_C": 0.005003662109376,
      "difference_interpretation": "Independent rounding of daily and final products, not a measure of absolute temperature accuracy."
    },
    "NDVI_display_v11": {
      "status": "passed",
      "range": [
        0,
        1
      ],
      "original_transparency_preserved": true,
      "all_numeric_arrays_unchanged": true,
      "old_max_0_8_saturated_valid_pixels_pct": 41.4038
    },
    "readout_regressions_v11": {
      "status": "passed",
      "cases": [
        "Outside-city point with only one city cell in 250m circle returns no LST/NDVI value.",
        "NDVI readout uses own coverage and seasonal observation rule, without LST counts.",
        "NDVI secondary LST uses summer even after selecting a daily thermal scene.",
        "Thermal date change commits data and decoded image together.",
        "Stale failed image request cannot replace a newer successful date.",
        "Dates with no valid city-land LST cannot be selected.",
        "Three reference addresses retain independently checked values."
      ],
      "environment": "Actual shipped JavaScript with real binary assets in a Node DOM/Image harness, not a graphical browser."
    }
  },
  "not_validated": [
    "No independent ground measurement of surface temperature or surveyed terrain accuracy.",
    "No observed flood-event or drainage-network validation.",
    "Interactive browser/WebGL rendering and mobile layout not independently exercised: browser QA capability unavailable in this execution environment. WebMCP support not tested.",
    "Original per-date NDVI rasters and exact per-pixel observation counts are not in the frozen v1.0 archive. This audit checks the formula/QA implementation and published NDVI values/display, but does not independently reconstruct NDVI from raw scenes."
  ],
  "last_reviewed_utc": "2026-10-10",
  "original_validation_utc": "2026-10-04"
}
