46
Total runs
38
Successful
8
Failed
83%
Success rate
25
Known outputs
2026-05-09
Last run

About This System

🌍
Coverage
Ethiopia, Kenya and Somalia.
πŸ“Š
Variables
Daily temperature (tas), relative humidity (rh), vapour pressure deficit (vpd) and precipitation (pr) at 0.25Β° resolution.
πŸ”„
Sources
AgERA5 reanalysis (historical), CHIRPS v2 (precipitation), ISIMIP3b projections (SSP2-4.5 Β· SSP5-8.5).
βœ…
Quality
Every output validated for time coverage, grid consistency, unit correctness and spatial bounds before delivery.

Data Inventory

Country β‡…Variable β‡…Scenario β‡…Period β‡…Status β‡…Run ID β‡…Date β‡…Duration β‡…
ETHprhistorical2010–2025SUCCESSrun_20260508_1358292026-05-080s
ETHprssp2452040–2070SUCCESSrun_20260509_1350312026-05-0933s
ETHrhhistorical2010–2025SUCCESSrun_20260508_1358292026-05-080s
ETHrhssp2452040–2070SUCCESSrun_20260509_1352442026-05-0920s
ETHtashistorical2010–2025SUCCESSrun_20260508_1358292026-05-080s
ETHtashistorical2010–2020FAILEDrun_20260507_2032522026-05-0714s
ETHtasssp2452040–2070SUCCESSrun_20260509_1352442026-05-0920s
ETHvpdhistorical2010–2025SUCCESSrun_20260508_1358292026-05-080s
ETHvpdssp2452040–2070SUCCESSrun_20260509_1352442026-05-0920s
KENprhistorical2010–2025SUCCESSrun_20260508_1411382026-05-083s
KENprssp2452040–2070SUCCESSrun_20260509_1359042026-05-0982s
KENrhhistorical2010–2025SUCCESSrun_20260509_0758152026-05-0910s
KENrhssp2452040–2070SUCCESSrun_20260509_1359042026-05-0982s
KENtashistorical2010–2025FAILEDrun_20260509_0650402026-05-091726s
KENtasssp2452040–2070SUCCESSrun_20260509_1359042026-05-0982s
KENvpdhistorical2010–2025SUCCESSrun_20260509_0759022026-05-0946s
KENvpdssp2452040–2070SUCCESSrun_20260509_1359042026-05-0982s
SOMprhistorical2010–2025SUCCESSrun_20260509_0921082026-05-0950s
SOMprssp2452040–2070SUCCESSrun_20260509_1400572026-05-0991s
SOMrhhistorical2010–2025SUCCESSrun_20260509_0924082026-05-09131s
SOMrhssp2452040–2070SUCCESSrun_20260509_1400572026-05-0991s
SOMtashistorical2010–2025SUCCESSrun_20260509_0933282026-05-091710s
SOMtasssp2452040–2070SUCCESSrun_20260509_1400572026-05-0991s
SOMvpdhistorical2010–2025SUCCESSrun_20260509_1304382026-05-091483s
SOMvpdssp2452040–2070SUCCESSrun_20260509_1400572026-05-0991s

Run History

SUCCESS run_20260509_140057
2026-05-09 14:00:57 som Β· pr, rh, tas, vpd Β· ssp245 Β· 2040–2070 91s 2 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit de9d8d3   mode strict
SUCCESS regrid β€” som / pr,rh,tas,vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country somalia --scenario ssp_245 --variable pr rh tas --start-year 2040 --end-year 2070 --max-workers 1
somalia_pr_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
somalia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
somalia_tas_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomaly– SKIP
distributionβœ“ OK
_grid_consistency
somalia_pr_ssp245_2040_2070_025deg_clipped.ncβœ“ OK
somalia_rh_ssp245_2040_2070_025deg_clipped.ncβœ“ OK
somalia_tas_ssp245_2040_2070_025deg_clipped.ncβœ“ OK
stdout
Completed in 5.46s
Validated rename/regrid output in 0.52s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/somalia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/somalia_adm0.geojson --output data/merged_files/somalia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 1
Completed in 7.21s
Validated clipped output in 1.01s
Workflow slice completed in 14.21s

=== somalia ssp_245 tas ===
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-somalia/ssp_245/tas --target-grid data/merged_files/somalia_pr_2010_2025.nc --output data/merged_files/somalia_tas_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0 --convert-kelvin-to-celsius
Completed in 5.24s
Validated rename/regrid output in 0.58s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/somalia_tas_ssp245_2040_2070_025deg.nc --boundary data/boundaries/somalia_adm0.geojson --output data/merged_files/somalia_tas_ssp245_2040_2070_025deg_clipped.nc --compression-level 1
Completed in 7.03s
Validated clipped output in 1.00s
Workflow slice completed in 13.85s

Workflow completed successfully.
SUCCESS vpd_compute β€” som / pr,rh,tas,vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_future_vpd_workflow.py --country somalia --scenario ssp_245 --start-year 2040 --end-year 2070 --max-workers 1 --run-diagnostics
somalia_vpd_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- QC JSON sidecar written to: data\merged_files_so\diagnostics\somalia_vpd_ssp245_2040_2070_025deg_clipped_qc.json

=== somalia ssp_245 vpd ===
[somalia ssp_245] Checking input files...
[somalia ssp_245] Opening inputs...
[somalia ssp_245] Resampling tas to daily mean...
[somalia ssp_245] Resampling rh to daily mean...
[somalia ssp_245] Checking requested year coverage...
[somalia ssp_245] Aligning daily tas and rh timestamps...
[somalia ssp_245] Computing Tetens VPD...
[somalia ssp_245] Checking aligned output coverage...
[somalia ssp_245] Writing output to data/merged_files/somalia_vpd_ssp245_2040_2070_025deg_clipped.nc...
Wrote output file: D:\IRLI\climate-agent\data\merged_files\somalia_vpd_ssp245_2040_2070_025deg_clipped.nc
[somalia ssp_245] Validating output...
[somalia ssp_245] Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/somalia_vpd_ssp245_2040_2070_025deg_clipped.nc --var vpd --time-index 6416 --out-dir data/merged_files_so/diagnostics
Completed in 6.20s
Workflow slice completed in 12.51s

Future VPD workflow completed successfully.
somalia_pr_ssp245_2040_2070_025deg_clipped.nc
Variable pr (mm/day)
Dimensions 11323 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 36.4% non-NaN pixels
Value range 0.0 – 280.5728
Mean Β± std 0.7795 Β± 3.7549
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.0491 p95=3.8159
somalia_rh_ssp245_2040_2070_025deg_clipped.nc
Variable rh (%)
Dimensions 11323 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 36.4% non-NaN pixels
Value range 8.4327 – 97.675
Mean Β± std 60.624 Β± 11.9862
Percentiles p05=40.8207 p25=51.927 p50=60.8223 p75=69.5648 p95=79.8854
somalia_tas_ssp245_2040_2070_025deg_clipped.nc
Variable tas (degC)
Dimensions 11323 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 36.4% non-NaN pixels
Value range 15.3538 – 38.3201
Mean Β± std 28.1926 Β± 2.6571
Percentiles p05=22.9786 p25=26.9163 p50=28.4878 p75=29.9112 p95=32.0141
somalia_vpd_ssp245_2040_2070_025deg_clipped.nc
Variable vpd (hPa)
Dimensions 11323 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 36.4% non-NaN pixels
Value range 0.7325 – 48.2182
Mean Β± std 15.3373 Β± 5.6651
Percentiles p05=7.1034 p25=11.1593 p50=14.7892 p75=18.904 p95=25.478
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_tas_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_tas_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_vpd_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_140057\somalia_vpd_ssp245_2040_2070_025deg_clipped_diagnostic.png
SUCCESS run_20260509_135904
2026-05-09 13:59:04 ken Β· pr, rh, tas, vpd Β· ssp245 Β· 2040–2070 82s 2 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit de9d8d3   mode strict
SUCCESS regrid β€” ken / pr,rh,tas,vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country kenya --scenario ssp_245 --variable pr rh tas --start-year 2040 --end-year 2070 --max-workers 1
kenya_pr_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
kenya_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
kenya_tas_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomaly– SKIP
distributionβœ“ OK
_grid_consistency
kenya_pr_ssp245_2040_2070_025deg_clipped.ncβœ“ OK
kenya_rh_ssp245_2040_2070_025deg_clipped.ncβœ“ OK
kenya_tas_ssp245_2040_2070_025deg_clipped.ncβœ“ OK
stdout
Completed in 5.08s
Validated rename/regrid output in 0.45s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/kenya_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/kenya_adm0.geojson --output data/merged_files/kenya_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 1
Completed in 5.31s
Validated clipped output in 0.76s
Workflow slice completed in 11.61s

=== kenya ssp_245 tas ===
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-kenya/ssp_245/tas --target-grid data/merged_files/kenya_pr_2010_2025.nc --output data/merged_files/kenya_tas_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0 --convert-kelvin-to-celsius
Completed in 5.11s
Validated rename/regrid output in 0.42s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/kenya_tas_ssp245_2040_2070_025deg.nc --boundary data/boundaries/kenya_adm0.geojson --output data/merged_files/kenya_tas_ssp245_2040_2070_025deg_clipped.nc --compression-level 1
Completed in 4.99s
Validated clipped output in 0.77s
Workflow slice completed in 11.29s

Workflow completed successfully.
SUCCESS vpd_compute β€” ken / pr,rh,tas,vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_future_vpd_workflow.py --country kenya --scenario ssp_245 --start-year 2040 --end-year 2070 --max-workers 1 --run-diagnostics
kenya_vpd_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- QC JSON sidecar written to: data\merged_files_ke\diagnostics\kenya_vpd_ssp245_2040_2070_025deg_clipped_qc.json

=== kenya ssp_245 vpd ===
[kenya ssp_245] Checking input files...
[kenya ssp_245] Opening inputs...
[kenya ssp_245] Resampling tas to daily mean...
[kenya ssp_245] Resampling rh to daily mean...
[kenya ssp_245] Checking requested year coverage...
[kenya ssp_245] Aligning daily tas and rh timestamps...
[kenya ssp_245] Computing Tetens VPD...
[kenya ssp_245] Checking aligned output coverage...
[kenya ssp_245] Writing output to data/merged_files/kenya_vpd_ssp245_2040_2070_025deg_clipped.nc...
Wrote output file: D:\IRLI\climate-agent\data\merged_files\kenya_vpd_ssp245_2040_2070_025deg_clipped.nc
[kenya ssp_245] Validating output...
[kenya ssp_245] Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/kenya_vpd_ssp245_2040_2070_025deg_clipped.nc --var vpd --time-index 6416 --out-dir data/merged_files_ke/diagnostics
Completed in 6.54s
Workflow slice completed in 12.13s

Future VPD workflow completed successfully.
kenya_pr_ssp245_2040_2070_025deg_clipped.nc
Variable pr (mm/day)
Dimensions 11323 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 61.8% non-NaN pixels
Value range 0.0 – 202.3472
Mean Β± std 1.6682 Β± 4.7783
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.8597 p95=9.2891
kenya_rh_ssp245_2040_2070_025deg_clipped.nc
Variable rh (%)
Dimensions 11323 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 61.8% non-NaN pixels
Value range 9.0199 – 99.0484
Mean Β± std 61.2257 Β± 13.109
Percentiles p05=39.9706 p25=51.523 p50=61.1055 p75=71.3505 p95=82.257
kenya_tas_ssp245_2040_2070_025deg_clipped.nc
Variable tas (degC)
Dimensions 11323 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 61.8% non-NaN pixels
Value range 10.9518 – 35.1729
Mean Β± std 26.2802 Β± 3.8766
Percentiles p05=18.6633 p25=23.9223 p50=27.1651 p75=29.1741 p95=31.3182
kenya_vpd_ssp245_2040_2070_025deg_clipped.nc
Variable vpd (hPa)
Dimensions 11323 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 61.8% non-NaN pixels
Value range 0.1645 – 41.3676
Mean Β± std 14.0058 Β± 6.4295
Percentiles p05=4.5324 p25=8.8494 p50=13.499 p75=18.6372 p95=25.1832
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_tas_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_tas_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_vpd_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135904\kenya_vpd_ssp245_2040_2070_025deg_clipped_diagnostic.png
SUCCESS run_20260509_135244
2026-05-09 13:52:44 eth Β· rh, tas, vpd Β· ssp245 Β· 2040–2070 20s 0 ok 0 fail 0 warn 2 skip
Python 3.13.3   xarray 2026.4.0   commit de9d8d3   mode strict
SKIPPED regrid β€” eth / rh,tas,vpd (exit 0, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

SKIPPED vpd_compute β€” eth / rh,tas,vpd (exit 0, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
Variable rh (%)
Dimensions 11323 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 55.7% non-NaN pixels
Value range 5.3271 – 99.3214
Mean Β± std 57.6185 Β± 17.6768
Percentiles p05=29.4943 p25=43.9595 p50=56.5843 p75=72.9008 p95=85.0358
ethiopia_tas_ssp245_2040_2070_025deg_clipped.nc
Variable tas (degC)
Dimensions 11323 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 55.7% non-NaN pixels
Value range 9.7947 – 38.1303
Mean Β± std 24.2131 Β± 4.2086
Percentiles p05=17.5463 p25=20.9385 p50=24.2188 p75=27.4005 p95=31.0295
ethiopia_vpd_ssp245_2040_2070_025deg_clipped.nc
Variable vpd (hPa)
Dimensions 11323 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 55.7% non-NaN pixels
Value range 0.2065 – 57.9346
Mean Β± std 13.8118 Β± 7.9114
Percentiles p05=3.4914 p25=7.3701 p50=12.5822 p75=19.0429 p95=28.1894
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135244\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135244\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135244\ethiopia_tas_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135244\ethiopia_tas_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135244\ethiopia_vpd_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135244\ethiopia_vpd_ssp245_2040_2070_025deg_clipped_diagnostic.png
SUCCESS run_20260509_135031
2026-05-09 13:50:31 eth Β· pr Β· ssp245 Β· 2040–2070 33s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit de9d8d3   mode strict
SUCCESS regrid β€” eth / pr (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable pr --start-year 2040 --end-year 2070 --max-workers 1 --run-diagnostics
ethiopia_pr_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Value max: 227.4901
- Value mean Β± std: 2.4584 Β± 7.3154
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_et\diagnostics\ethiopia_pr_ssp245_2040_2070_025deg_clipped_qc.json

=== ethiopia ssp_245 pr ===
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/pr --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_pr_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0 --convert-pr-to-mm-day
Completed in 6.29s
Validated rename/regrid output in 1.70s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_pr_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_pr_ssp245_2040_2070_025deg_clipped.nc --compression-level 1
Completed in 6.85s
Validated clipped output in 1.05s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_pr_ssp245_2040_2070_025deg_clipped.nc --var pr --time-index 6416 --out-dir data/merged_files_et/diagnostics
Completed in 6.68s
Workflow slice completed in 22.73s

Workflow completed successfully.
ethiopia_pr_ssp245_2040_2070_025deg_clipped.nc
Variable pr (mm/day)
Dimensions 11323 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 55.7% non-NaN pixels
Value range 0.0 – 227.4901
Mean Β± std 2.4584 Β± 7.3154
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.5738 p95=15.7442
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135031\ethiopia_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_135031\ethiopia_pr_ssp245_2040_2070_025deg_clipped_diagnostic.png
SUCCESS run_20260509_130438
2026-05-09 13:04:38 som Β· vpd Β· historical Β· 2010–2025 1483s 2 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit de9d8d3   mode strict
SUCCESS agera5_merge_som_vpd β€” som / vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\merge_agera5_fast.py --country somalia --variable vpd --start 2010 --end 2025

No validation recorded.

stdout
[merge] 5844 files -> somalia_vpd_2010_2025.nc
  [year] 2010: 365 files ... 21.2 MB
  [year] 2011: 365 files ... 21.2 MB
  [year] 2012: 366 files ... 21.3 MB
  [year] 2013: 365 files ... 21.2 MB
  [year] 2014: 365 files ... 21.2 MB
  [year] 2015: 365 files ... 21.2 MB
  [year] 2016: 366 files ... 21.3 MB
  [year] 2017: 365 files ... 21.2 MB
  [year] 2018: 365 files ... 21.2 MB
  [year] 2019: 365 files ... 21.2 MB
  [year] 2020: 366 files ... 21.3 MB
  [year] 2021: 365 files ... 21.2 MB
  [year] 2022: 365 files ... 21.2 MB
  [year] 2023: 365 files ... 21.2 MB
  [year] 2024: 366 files ... 21.3 MB
  [year] 2025: 365 files ... 21.2 MB
[concat] 16 years ...
[write] 5844 time steps ...
[ok] D:\IRLI\climate-agent\data\merged_files\somalia_vpd_2010_2025.nc
SUCCESS merge β€” som / vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country somalia --variable vpd --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge
somalia_vpd_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomaly⚠ WARN
distributionβœ“ OK
stdout
- Value min: 1.5873
- Value p05/p25/median/p75/p95: 15.5795 / 23.4953 / 30.0542 / 35.8919 / 44.4936
- Value max: 87.2159
- Value mean Β± std: 29.9568 Β± 8.9851
- Diagnostic plot written to: data\merged_files_so\diagnostics\somalia_vpd_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_so\diagnostics\somalia_vpd_2010_2025_025deg_clipped_qc.json

=== somalia historical vpd ===
Skipping merge step and reusing existing merged file...
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/somalia_vpd_2010_2025.nc --target-grid data/merged_files/somalia_pr_2010_2025.nc --output data/merged_files/somalia_vpd_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 13.57s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/somalia_vpd_2010_2025_025deg.nc --boundary data/boundaries/somalia_adm0.geojson --output data/merged_files/somalia_vpd_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 4.73s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/somalia_vpd_2010_2025_025deg_clipped.nc --var vpd --time-index 0 --out-dir data/merged_files_so/diagnostics
Completed in 6.38s

Historical workflow completed successfully.
somalia_vpd_2010_2025_025deg_clipped.nc
Variable vpd (hPa)
Dimensions 5844 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 37.3% non-NaN pixels
Value range 1.5873 – 87.2159
Mean Β± std 29.9568 Β± 8.9851
Percentiles p05=15.5795 p25=23.4953 p50=30.0542 p75=35.8919 p95=44.4936
D:\IRLI\climate-agent\data\diagnostics\run_20260509_130438\somalia_vpd_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_130438\somalia_vpd_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260509_093328
2026-05-09 09:33:28 som Β· tas Β· historical Β· 2010–2025 1710s 2 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS agera5_merge_som_tas β€” som / tas (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\merge_agera5_fast.py --country somalia --variable temp --start 2010 --end 2025

No validation recorded.

stdout
[merge] 5844 files -> somalia_temp_2010_2025.nc
  [year] 2010: 365 files ... 21.2 MB
  [year] 2011: 365 files ... 21.2 MB
  [year] 2012: 366 files ... 21.3 MB
  [year] 2013: 365 files ... 21.2 MB
  [year] 2014: 365 files ... 21.2 MB
  [year] 2015: 365 files ... 21.2 MB
  [year] 2016: 366 files ... 21.3 MB
  [year] 2017: 365 files ... 21.2 MB
  [year] 2018: 365 files ... 21.2 MB
  [year] 2019: 365 files ... 21.2 MB
  [year] 2020: 366 files ... 21.3 MB
  [year] 2021: 365 files ... 21.2 MB
  [year] 2022: 365 files ... 21.2 MB
  [year] 2023: 365 files ... 21.2 MB
  [year] 2024: 366 files ... 21.3 MB
  [year] 2025: 365 files ... 21.2 MB
[concat] 16 years ...
[write] 5844 time steps ...
[ok] D:\IRLI\climate-agent\data\merged_files\somalia_temp_2010_2025.nc
SUCCESS merge β€” som / tas (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country somalia --variable temp --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge
somalia_temp_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomaly– SKIP
distributionβœ“ OK
stdout
- Value min: 10.1631
- Value p05/p25/median/p75/p95: 21.0219 / 25.2818 / 26.9939 / 28.4080 / 30.6044
- Value max: 38.2920
- Value mean Β± std: 26.6158 Β± 2.8915
- Diagnostic plot written to: data\merged_files_so\diagnostics\somalia_temp_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_so\diagnostics\somalia_temp_2010_2025_025deg_clipped_qc.json

=== somalia historical temp ===
Skipping merge step and reusing existing merged file...
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/somalia_temp_2010_2025.nc --target-grid data/merged_files/somalia_pr_2010_2025.nc --output data/merged_files/somalia_temp_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 27.44s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/somalia_temp_2010_2025_025deg.nc --boundary data/boundaries/somalia_adm0.geojson --output data/merged_files/somalia_temp_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 8.82s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/somalia_temp_2010_2025_025deg_clipped.nc --var t2m --time-index 0 --out-dir data/merged_files_so/diagnostics
Completed in 14.27s

Historical workflow completed successfully.
somalia_temp_2010_2025_025deg_clipped.nc
Variable t2m (Β°C)
Dimensions 5844 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 37.3% non-NaN pixels
Value range 10.1631 – 38.292
Mean Β± std 26.6158 Β± 2.8915
Percentiles p05=21.0219 p25=25.2818 p50=26.9939 p75=28.408 p95=30.6044
D:\IRLI\climate-agent\data\diagnostics\run_20260509_093328\somalia_temp_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_093328\somalia_temp_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260509_092408
2026-05-09 09:24:08 som Β· rh Β· historical Β· 2010–2025 131s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS merge β€” som / rh (exit 0, attempt 2)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country somalia --variable rh --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge
somalia_rh_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Value min: 5.4121
- Value p05/p25/median/p75/p95: 49.8514 / 72.3568 / 82.4859 / 88.1575 / 94.3362
- Value max: 100.0000
- Value mean Β± std: 78.6175 Β± 13.5768
- Diagnostic plot written to: data\merged_files_so\diagnostics\somalia_rh_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_so\diagnostics\somalia_rh_2010_2025_025deg_clipped_qc.json

=== somalia historical rh ===
Skipping merge step and reusing existing merged file...
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/somalia_rh_2010_2025.nc --target-grid data/merged_files/somalia_pr_2010_2025.nc --output data/merged_files/somalia_rh_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 22.37s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/somalia_rh_2010_2025_025deg.nc --boundary data/boundaries/somalia_adm0.geojson --output data/merged_files/somalia_rh_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 8.59s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/somalia_rh_2010_2025_025deg_clipped.nc --var rh --time-index 0 --out-dir data/merged_files_so/diagnostics
Completed in 10.89s

Historical workflow completed successfully.
somalia_rh_2010_2025_025deg_clipped.nc
Variable rh (%)
Dimensions 5844 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 37.3% non-NaN pixels
Value range 5.4121 – 100.0
Mean Β± std 78.6175 Β± 13.5768
Percentiles p05=49.8514 p25=72.3568 p50=82.4859 p75=88.1575 p95=94.3362
D:\IRLI\climate-agent\data\diagnostics\run_20260509_092408\somalia_rh_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_092408\somalia_rh_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260509_092108
2026-05-09 09:21:09 som Β· pr Β· historical Β· 2010–2025 50s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS merge β€” som / pr (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country somalia --variable pr --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics
somalia_pr_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Longitude step: 0.25 (ascending)
- Time length: 5844
- Duplicate time values: 0
- Finite ratio: 0.3731
- Value min: 0.0000
- Value p05/p25/median/p75/p95: 0.0000 / 0.0000 / 0.0000 / 0.0000 / 5.3833
- Value max: 189.0288
- Value mean Β± std: 0.8171 Β± 3.4869
- Diagnostic plot written to: data\merged_files_so\diagnostics\somalia_pr_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_so\diagnostics\somalia_pr_2010_2025_025deg_clipped_qc.json

=== somalia historical pr ===
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/somalia_pr_2010_2025.nc --boundary data/boundaries/somalia_adm0.geojson --output data/merged_files/somalia_pr_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 12.79s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/somalia_pr_2010_2025_025deg_clipped.nc --var precip --time-index 0 --out-dir data/merged_files_so/diagnostics
Completed in 14.32s

Historical workflow completed successfully.
somalia_pr_2010_2025_025deg_clipped.nc
Variable precip (mm/day)
Dimensions 5844 time Γ— 54 lat Γ— 41 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -1.375–11.875, lon 41.125–51.125
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 37.3% non-NaN pixels
Value range 0.0 – 189.0288
Mean Β± std 0.8171 Β± 3.4869
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.0 p95=5.3833
D:\IRLI\climate-agent\data\diagnostics\run_20260509_092108\somalia_pr_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_092108\somalia_pr_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260509_080142
2026-05-09 08:01:43 som Β· pr, rh, tas, vpd Β· historical Β· 2010–2025 0s 0 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS agera5_merge_som_rh β€” som / pr,rh,tas,vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\merge_agera5_fast.py --country somalia --variable rh --start 2010 --end 2025

No validation recorded.

stdout
[merge] 5844 files -> somalia_rh_2010_2025.nc
  [year] 2010: 365 files ... 21.2 MB
  [year] 2011: 365 files ... 21.2 MB
  [year] 2012: 366 files ... 21.3 MB
  [year] 2013: 365 files ... 21.2 MB
  [year] 2014: 365 files ... 21.2 MB
  [year] 2015: 365 files ... 21.2 MB
  [year] 2016: 366 files ... 21.3 MB
  [year] 2017: 365 files ... 21.2 MB
  [year] 2018: 365 files ... 21.2 MB
  [year] 2019: 365 files ... 21.2 MB
  [year] 2020: 366 files ... 21.3 MB
  [year] 2021: 365 files ... 21.2 MB
  [year] 2022: 365 files ... 21.2 MB
  [year] 2023: 365 files ... 21.2 MB
  [year] 2024: 366 files ... 21.3 MB
  [year] 2025: 365 files ... 21.2 MB
[concat] 16 years ...
[write] 5844 time steps ...
[ok] D:\IRLI\climate-agent\data\merged_files\somalia_rh_2010_2025.nc
SUCCESS run_20260509_075902
2026-05-09 07:59:02 ken Β· vpd Β· historical Β· 2010–2025 46s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS merge β€” ken / vpd (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country kenya --variable vpd --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge
kenya_vpd_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Value min: 1.9982
- Value p05/p25/median/p75/p95: 11.3114 / 19.4090 / 26.9387 / 34.2296 / 43.2219
- Value max: 71.0206
- Value mean Β± std: 26.9965 Β± 9.8746
- Diagnostic plot written to: data\merged_files_ke\diagnostics\kenya_vpd_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_ke\diagnostics\kenya_vpd_2010_2025_025deg_clipped_qc.json

=== kenya historical vpd ===
Skipping merge step and reusing existing merged file...
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/kenya_vpd_2010_2025.nc --target-grid data/merged_files/kenya_pr_2010_2025.nc --output data/merged_files/kenya_vpd_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 11.48s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/kenya_vpd_2010_2025_025deg.nc --boundary data/boundaries/kenya_adm0.geojson --output data/merged_files/kenya_vpd_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 8.41s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/kenya_vpd_2010_2025_025deg_clipped.nc --var vpd --time-index 0 --out-dir data/merged_files_ke/diagnostics
Completed in 7.55s

Historical workflow completed successfully.
kenya_vpd_2010_2025_025deg_clipped.nc
Variable vpd (hPa)
Dimensions 5844 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 63.1% non-NaN pixels
Value range 1.9982 – 71.0206
Mean Β± std 26.9965 Β± 9.8746
Percentiles p05=11.3114 p25=19.409 p50=26.9387 p75=34.2296 p95=43.2219
D:\IRLI\climate-agent\data\diagnostics\run_20260509_075902\kenya_vpd_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_075902\kenya_vpd_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260509_075815
2026-05-09 07:58:16 ken Β· rh Β· historical Β· 2010–2025 10s 0 ok 0 fail 0 warn 1 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SKIPPED merge β€” ken / rh (exit 0, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

kenya_rh_2010_2025_025deg_clipped.nc
Variable rh (%)
Dimensions 5844 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 63.1% non-NaN pixels
Value range 10.8043 – 100.0
Mean Β± std 80.0391 Β± 13.4485
Percentiles p05=53.4746 p25=72.1263 p50=83.1895 p75=90.381 p95=96.7813
D:\IRLI\climate-agent\data\diagnostics\run_20260509_075815\kenya_rh_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260509_075815\kenya_rh_2010_2025_025deg_clipped_diagnostic.png
FAILED run_20260509_065040
2026-05-09 06:50:40 ken Β· tas Β· historical Β· 2010–2025 1726s 1 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS agera5_merge_ken_tas β€” ken / tas (exit 0, attempt 2)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\merge_agera5_fast.py --country kenya --variable temp --start 2010 --end 2025

No validation recorded.

stdout
[skip] kenya_temp_2010_2025.nc already exists
FAILED merge β€” ken / tas (exit 1, attempt 3)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country kenya --variable temp --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge

No validation recorded.

stdout
=== kenya historical temp ===
Skipping merge step and reusing existing merged file...
Tool run_historical_workflow.py failed after 3 attempt(s). Last stderr: elf._args, **kwargs) File "src/netCDF4/_netCDF4.pyx", line 2521, in netCDF4._netCDF4.Dataset.__init__ File "src/netCDF4/_netCDF4.pyx", line 2158, in netCDF4._netCDF4._ensure_nc_success OSError: [Errno -101] NetCDF: HDF error: 'D:\\IRLI\\climate-agent\\data\\merged_files\\kenya_temp_2010_2025.nc'
stderr
return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\netCDF4_.py", line 429, in __init__
    self.format = self.ds.data_model
                  ^^^^^^^
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\netCDF4_.py", line 538, in ds
    return self._acquire()
           ~~~~~~~~~~~~~^^
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\netCDF4_.py", line 532, in _acquire
    with self._manager.acquire_context(needs_lock) as root:
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "C:\Python313\Lib\contextlib.py", line 141, in __enter__
    return next(self.gen)
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\file_manager.py", line 207, in acquire_context
    file, cached = self._acquire_with_cache_info(needs_lock)
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\file_manager.py", line 225, in _acquire_with_cache_info
    file = self._opener(*self._args, **kwargs)
  File "src/netCDF4/_netCDF4.pyx", line 2521, in netCDF4._netCDF4.Dataset.__init__
  File "src/netCDF4/_netCDF4.pyx", line 2158, in netCDF4._netCDF4._ensure_nc_success
OSError: [Errno -101] NetCDF: HDF error: 'D:\\IRLI\\climate-agent\\data\\merged_files\\kenya_temp_2010_2025.nc'
FAILED run_20260508_215627
2026-05-08 21:56:27 ken Β· tas Β· historical Β· 2010–2025 1543s 1 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS agera5_merge_ken_tas β€” ken / tas (exit 0, attempt 2)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\merge_agera5_fast.py --country kenya --variable temp --start 2010 --end 2025

No validation recorded.

stdout
[skip] kenya_temp_2010_2025.nc already exists
FAILED merge β€” ken / tas (exit 1, attempt 3)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country kenya --variable temp --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge

No validation recorded.

stdout
=== kenya historical temp ===
Skipping merge step and reusing existing merged file...
Tool run_historical_workflow.py failed after 3 attempt(s). Last stderr: elf._args, **kwargs) File "src/netCDF4/_netCDF4.pyx", line 2521, in netCDF4._netCDF4.Dataset.__init__ File "src/netCDF4/_netCDF4.pyx", line 2158, in netCDF4._netCDF4._ensure_nc_success OSError: [Errno -101] NetCDF: HDF error: 'D:\\IRLI\\climate-agent\\data\\merged_files\\kenya_temp_2010_2025.nc'
stderr
return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\netCDF4_.py", line 429, in __init__
    self.format = self.ds.data_model
                  ^^^^^^^
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\netCDF4_.py", line 538, in ds
    return self._acquire()
           ~~~~~~~~~~~~~^^
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\netCDF4_.py", line 532, in _acquire
    with self._manager.acquire_context(needs_lock) as root:
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "C:\Python313\Lib\contextlib.py", line 141, in __enter__
    return next(self.gen)
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\file_manager.py", line 207, in acquire_context
    file, cached = self._acquire_with_cache_info(needs_lock)
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\climate-agent-env\Lib\site-packages\xarray\backends\file_manager.py", line 225, in _acquire_with_cache_info
    file = self._opener(*self._args, **kwargs)
  File "src/netCDF4/_netCDF4.pyx", line 2521, in netCDF4._netCDF4.Dataset.__init__
  File "src/netCDF4/_netCDF4.pyx", line 2158, in netCDF4._netCDF4._ensure_nc_success
OSError: [Errno -101] NetCDF: HDF error: 'D:\\IRLI\\climate-agent\\data\\merged_files\\kenya_temp_2010_2025.nc'
SUCCESS run_20260508_141537
2026-05-08 14:15:37 ken Β· rh Β· historical Β· 2010–2025 829s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode fast
SUCCESS merge β€” ken / rh (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country kenya --variable rh --start-year 2010 --end-year 2025 --max-workers 1 --fast-mode --run-diagnostics
kenya_rh_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Value max: 100.0000
- Value mean Β± std: 80.0391 Β± 13.4485
- Diagnostic plot written to: data\merged_files_ke\diagnostics\kenya_rh_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_ke\diagnostics\kenya_rh_2010_2025_025deg_clipped_qc.json

=== kenya historical rh ===
Running merge step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/merge_netcdf_kenya_relative_humidity.py --input-dir data/kenya_relative_humidity_mean/netcdf --output data/merged_files/kenya_rh_2010_2025.nc
Completed in 13m 27.9s
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/kenya_rh_2010_2025.nc --target-grid data/merged_files/kenya_pr_2010_2025.nc --output data/merged_files/kenya_rh_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 4.81s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/kenya_rh_2010_2025_025deg.nc --boundary data/boundaries/kenya_adm0.geojson --output data/merged_files/kenya_rh_2010_2025_025deg_clipped.nc --compression-level 0
Completed in 3.44s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/kenya_rh_2010_2025_025deg_clipped.nc --var rh --time-index 0 --out-dir data/merged_files_ke/diagnostics
Completed in 3.66s

Historical workflow completed successfully.
kenya_rh_2010_2025_025deg_clipped.nc
Variable rh (%)
Dimensions 5844 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 63.1% non-NaN pixels
Value range 10.8043 – 100.0
Mean Β± std 80.0391 Β± 13.4485
Percentiles p05=53.4746 p25=72.1263 p50=83.1895 p75=90.381 p95=96.7813
D:\IRLI\climate-agent\data\diagnostics\run_20260508_141537\kenya_rh_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260508_141537\kenya_rh_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260508_141158
2026-05-08 14:11:59 ken Β· rh Β· historical Β· 2010–2025 0s 0 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SUCCESS run_20260508_141138
2026-05-08 14:11:38 ken Β· pr Β· historical Β· 2010–2025 3s 0 ok 0 fail 0 warn 1 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
SKIPPED merge β€” ken / pr (exit 0, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

kenya_pr_2010_2025_025deg_clipped.nc
Variable precip (mm/day)
Dimensions 5844 time Γ— 39 lat Γ— 31 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat -4.625–4.875, lon 34.125–41.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 63.1% non-NaN pixels
Value range 0.0 – 367.1527
Mean Β± std 1.8459 Β± 6.4147
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.0 p95=11.7318
D:\IRLI\climate-agent\data\diagnostics\run_20260508_141138\kenya_pr_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260508_141138\kenya_pr_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260508_135829
2026-05-08 13:58:32 eth, ken, som Β· pr, tas, rh, vpd Β· historical Β· 2010–2025 0s 0 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
FAILED run_20260508_111839
2026-05-08 11:18:40 eth, ken, som Β· pr, tas, rh, vpd Β· historical Β· 2010–2025 8958s 0 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 130e2bf   mode strict
FAILED merge β€” eth,ken,som / pr,tas,rh,vpd (exit 1, attempt 3)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia kenya somalia --variable pr temp rh vpd --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics

No validation recorded.

stdout
- Duplicate time values: 0
- Finite ratio: 0.5548
- Value min: 0.0000
- Value p05/p25/median/p75/p95: 0.0000 / 0.0000 / 0.0000 / 0.8443 / 14.4296
- Value max: 238.9802
- Value mean Β± std: 2.3226 Β± 5.8316
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_pr_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_et\diagnostics\ethiopia_pr_2010_2025_025deg_clipped_qc.json

=== ethiopia historical pr ===
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_pr_2010_2025.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_pr_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 11.74s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_pr_2010_2025_025deg_clipped.nc --var precip --time-index 0 --out-dir data/merged_files_et/diagnostics
Completed in 10.35s

=== ethiopia historical temp ===
Running merge step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/merge_netcdf_ethiopia_temperature.py --input-dir data/ethiopia_temperature/netcdf --output data/merged_files/ethiopia_temp_2010_2025.nc
Tool run_historical_workflow.py failed after 3 attempt(s). Last stderr: ess.CalledProcessError: Command '['D:\\IRLI\\climate-agent\\climate-agent-env\\Scripts\\python.exe', 'codes/merge_netcdf_ethiopia_temperature.py', '--input-dir', 'data/ethiopia_temperature/netcdf', '--output', 'data/merged_files/ethiopia_temp_2010_2025.nc']' returned non-zero exit status 3221226505.
stderr
Traceback (most recent call last):
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 381, in 
    main()
    ~~~~^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 360, in main
    process_work_item(work_item, args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 343, in process_work_item
    process_one(country, variable, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 249, in process_one
    run_command(merge_command, dry_run=args.dry_run)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 199, in run_command
    subprocess.run(command, cwd=WORKSPACE_ROOT, check=True)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python313\Lib\subprocess.py", line 577, in run
    raise CalledProcessError(retcode, process.args,
                             output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['D:\\IRLI\\climate-agent\\climate-agent-env\\Scripts\\python.exe', 'codes/merge_netcdf_ethiopia_temperature.py', '--input-dir', 'data/ethiopia_temperature/netcdf', '--output', 'data/merged_files/ethiopia_temp_2010_2025.nc']' returned non-zero exit status 3221226505.
SUCCESS run_20260508_103743
2026-05-08 10:37:44 eth Β· pr Β· historical Β· 2010–2025 14s 0 ok 0 fail 0 warn 1 skip
Python 3.13.3   xarray 2026.4.0   commit efe67fc   mode strict
SKIPPED merge β€” eth / pr (exit 0, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

ethiopia_pr_2010_2025_025deg_clipped.nc
Variable precip (mm/day)
Dimensions 5844 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 55.5% non-NaN pixels
Value range 0.0 – 238.9802
Mean Β± std 2.3226 Β± 5.8316
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.8443 p95=14.4296
D:\IRLI\climate-agent\data\diagnostics\run_20260508_103743\ethiopia_pr_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260508_103743\ethiopia_pr_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260507_212038
2026-05-07 21:20:38 eth Β· tas Β· historical Β· 2010–2025 20s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 4e4c82b   mode strict
SUCCESS merge β€” eth / tas (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable temp --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics --skip-merge
ethiopia_temp_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomaly– SKIP
distributionβœ“ OK
stdout
- Value min: 3.7380
- Value p05/p25/median/p75/p95: 14.4933 / 19.4721 / 23.4754 / 26.8846 / 31.2599
- Value max: 40.7170
- Value mean Β± std: 23.1780 Β± 5.1701
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_temp_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_et\diagnostics\ethiopia_temp_2010_2025_025deg_clipped_qc.json

=== ethiopia historical temp ===
Skipping merge step and reusing existing merged file...
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/ethiopia_temp_2010_2025.nc --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_temp_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 3.75s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_temp_2010_2025_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_temp_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 3.05s
Running diagnostics step...
$ C:\Python313\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_temp_2010_2025_025deg_clipped.nc --var t2m --time-index 0 --out-dir data/merged_files_et/diagnostics
Completed in 5.67s

Historical workflow completed successfully.
ethiopia_temp_2010_2025_025deg_clipped.nc
Variable t2m (Β°C)
Dimensions 5844 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 55.7% non-NaN pixels
Value range 3.738 – 40.717
Mean Β± std 23.178 Β± 5.1701
Percentiles p05=14.4933 p25=19.4721 p50=23.4754 p75=26.8846 p95=31.2599
D:\IRLI\climate-agent\data\diagnostics\run_20260507_212038\ethiopia_temp_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260507_212038\ethiopia_temp_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260507_210718
2026-05-07 21:07:18 eth Β· tas Β· historical Β· 2010–2025 15s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 6cc5098   mode strict
SUCCESS merge β€” eth / tas (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable temp --start-year 2010 --end-year 2025 --max-workers 1 --skip-merge
ethiopia_temp_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomaly– SKIP
distributionβœ“ OK
stdout
Loaded source dataset from: data\merged_files\ethiopia_temp_2010_2025.nc
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_temp_2010_2025_025deg.nc
Input: data\merged_files\ethiopia_temp_2010_2025_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_temp_2010_2025_025deg_clipped.nc

=== ethiopia historical temp ===
Skipping merge step and reusing existing merged file...
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/ethiopia_temp_2010_2025.nc --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_temp_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 6.92s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_temp_2010_2025_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_temp_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 3.92s

Historical workflow completed successfully.
SUCCESS run_20260507_210607
2026-05-07 21:06:07 eth Β· tas Β· historical Β· 2010–2025 0s 0 ok 0 fail 0 warn 1 skip
Python 3.13.3   xarray 2026.4.0   commit 6cc5098   mode strict
SKIPPED merge β€” eth / tas (exit 0, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

SUCCESS run_20260507_210525
2026-05-07 21:05:25 eth Β· tas Β· historical Β· 2010–2025 0s 0 ok 0 fail 0 warn 1 skip
Python 3.13.3   xarray 2026.4.0   commit 6cc5098   mode strict
SKIPPED merge β€” eth / tas (exit None, attempt 1)
(skipped β€” outputs exist)

No validation recorded.

FAILED run_20260507_203252
2026-05-07 20:32:52 eth Β· tas Β· historical Β· 2010–2020 14s 0 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 6cc5098   mode strict
FAILED merge β€” eth / tas (exit 143, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable temp --start-year 2010 --end-year 2020 --max-workers 1

No validation recorded.

stdout
=== ethiopia historical temp ===
Running merge step...
$ C:\Python313\python.exe codes/merge_netcdf_ethiopia_temperature.py --input-dir data/ethiopia_temperature/netcdf --output data/merged_files/ethiopia_temp_2010_2020.nc
Tool run_historical_workflow.py failed after 1 attempt(s). Last stderr:
FAILED run_20260507_202952
2026-05-07 20:29:52 eth Β· tas Β· historical Β· 2010–2020 2061s 0 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit 6cc5098   mode strict
FAILED merge β€” eth / tas (exit 1, attempt 3)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable temp --start-year 2010 --end-year 2020 --max-workers 1

No validation recorded.

stdout
Found 5844 files
Merged file written to: data\merged_files\ethiopia_temp_2010_2020.nc
Time steps: 5844

=== ethiopia historical temp ===
Running merge step...
$ C:\Python313\python.exe codes/merge_netcdf_ethiopia_temperature.py --input-dir data/ethiopia_temperature/netcdf --output data/merged_files/ethiopia_temp_2010_2020.nc
Completed in 10m 9.7s
Tool run_historical_workflow.py failed after 3 attempt(s). Last stderr: ) ^ File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 264, in validate_output raise ValueError( f"Time range mismatch for {output_path.name}: {int(years.min())}-{int(years.max())}" ) ValueError: Time range mismatch for ethiopia_temp_2010_2020.nc: 2010-2025
stderr
process_work_item(work_item, args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 343, in process_work_item
    process_one(country, variable, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 253, in process_one
    validate_output(
    ~~~~~~~~~~~~~~~^
        paths["raw_output"],
        ^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
        end_year=args.end_year,
        ^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 264, in validate_output
    raise ValueError(
        f"Time range mismatch for {output_path.name}: {int(years.min())}-{int(years.max())}"
    )
ValueError: Time range mismatch for ethiopia_temp_2010_2020.nc: 2010-2025
SUCCESS run_20260507_145941
2026-05-07 14:59:41 eth Β· vpd Β· ssp245 Β· 2040–2070 4s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit scripts:1c1bf3cf   mode fast
SUCCESS vpd_compute β€” eth / vpd (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_future_vpd_workflow.py --country ethiopia --scenario ssp_245 --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_vpd_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
=== ethiopia ssp_245 vpd ===
[ethiopia ssp_245] Checking input files...
[ethiopia ssp_245] Opening inputs...
[ethiopia ssp_245] Resampling tas to daily mean...
[ethiopia ssp_245] Resampling rh to daily mean...
[ethiopia ssp_245] Checking requested year coverage...
[ethiopia ssp_245] Aligning daily tas and rh timestamps...
[ethiopia ssp_245] Computing Tetens VPD...
[ethiopia ssp_245] Checking aligned output coverage...
[ethiopia ssp_245] Writing output to data/merged_files/ethiopia_vpd_ssp245_2040_2070_025deg_clipped.nc...
Wrote output file: D:\IRLI\climate-agent\data\merged_files\ethiopia_vpd_ssp245_2040_2070_025deg_clipped.nc
[ethiopia ssp_245] Validating output...
Workflow slice completed in 1.59s

Future VPD workflow completed successfully.
SUCCESS run_20260507_145918
2026-05-07 14:59:18 eth Β· rh Β· ssp245 Β· 2040–2070 0s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit scripts:1c1bf3cf   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode --run-diagnostics
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Value max: 99.3214
- Value mean Β± std: 57.6185 Β± 17.6768
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_et\diagnostics\ethiopia_rh_ssp245_2040_2070_025deg_clipped_qc.json

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 3.65s
Validated rename/regrid output in 0.88s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 1.94s
Validated clipped output in 0.17s
Running diagnostics step...
$ C:\Python313\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --var rh --time-index 6416 --out-dir data/merged_files_et/diagnostics
Completed in 4.97s
Workflow slice completed in 11.69s

Workflow completed successfully.
SUCCESS run_20260507_145642
2026-05-07 14:56:42 eth Β· tas Β· ssp245 Β· 2040–2070 8s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit scripts:1c1bf3cf   mode fast
SUCCESS regrid β€” eth / tas (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable tas --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_tas_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
anomaly– SKIP
distributionβœ“ OK
stdout
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Converted from Kelvin to degC: tas.
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_tas_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_tas_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_tas_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 tas ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/tas --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_tas_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0 --convert-kelvin-to-celsius
Completed in 3.81s
Validated rename/regrid output in 0.73s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_tas_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_tas_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 1.77s
Validated clipped output in 0.18s
Workflow slice completed in 6.49s

Workflow completed successfully.
FAILED run_20260507_145407
2026-05-07 14:54:07 ken Β· pr Β· historical Β· 2010–2025 92s 0 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit scripts:1c1bf3cf   mode fast
FAILED merge β€” ken / pr (exit 1, attempt 3)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country kenya --variable pr --start-year 2010 --end-year 2025 --max-workers 1 --fast-mode

No validation recorded.

stdout
=== kenya historical pr ===
Tool run_historical_workflow.py failed after 3 attempt(s). Last stderr: ^^^^^^^^^^^^^^^ File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 218, in ensure_path_exists raise FileNotFoundError(f"Expected output was not written: {path}") FileNotFoundError: Expected output was not written: D:\IRLI\climate-agent\data\merged_files\kenya_pr_2010_2025.nc
stderr
Traceback (most recent call last):
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 380, in 
    main()
    ~~~~^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 359, in main
    process_work_item(work_item, args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 342, in process_work_item
    process_one(country, variable, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_historical_workflow.py", line 261, in process_one
    ensure_path_exists(paths["raw_output"])
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 218, in ensure_path_exists
    raise FileNotFoundError(f"Expected output was not written: {path}")
FileNotFoundError: Expected output was not written: D:\IRLI\climate-agent\data\merged_files\kenya_pr_2010_2025.nc
SUCCESS run_20260507_144143
2026-05-07 14:41:43 eth Β· pr Β· historical Β· 2010–2025 20s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit scripts:1c1bf3cf   mode strict
SUCCESS merge β€” eth / pr (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable pr --start-year 2010 --end-year 2025 --max-workers 1 --run-diagnostics
ethiopia_pr_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_matchβœ“ OK
spatial_boundsβœ“ OK
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Longitude step: 0.25 (ascending)
- Time length: 5844
- Duplicate time values: 0
- Finite ratio: 0.5548
- Value min: 0.0000
- Value p05/p25/median/p75/p95: 0.0000 / 0.0000 / 0.0000 / 0.8443 / 14.4296
- Value max: 238.9802
- Value mean Β± std: 2.3226 Β± 5.8316
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_pr_2010_2025_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_et\diagnostics\ethiopia_pr_2010_2025_025deg_clipped_qc.json

=== ethiopia historical pr ===
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_pr_2010_2025.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_pr_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 3.66s
Running diagnostics step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_pr_2010_2025_025deg_clipped.nc --var precip --time-index 0 --out-dir data/merged_files_et/diagnostics
Completed in 5.38s

Historical workflow completed successfully.
ethiopia_pr_2010_2025_025deg_clipped.nc
Variable precip (mm/day)
Dimensions 5844 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 5844 (0 duplicates, 0 missing years)
Land coverage 55.5% non-NaN pixels
Value range 0.0 – 238.9802
Mean Β± std 2.3226 Β± 5.8316
Percentiles p05=0.0 p25=0.0 p50=0.0 p75=0.8443 p95=14.4296
D:\IRLI\climate-agent\data\diagnostics\run_20260507_144143\ethiopia_pr_2010_2025_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260507_144143\ethiopia_pr_2010_2025_025deg_clipped_diagnostic.png
SUCCESS run_20260507_143528
2026-05-07 14:35:28 eth Β· vpd Β· historical Β· 2010–2025 691s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit scripts:1c1bf3cf   mode fast
SUCCESS merge β€” eth / vpd (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable vpd --start-year 2010 --end-year 2025 --max-workers 1 --fast-mode
ethiopia_vpd_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomaly⚠ WARN
distributionβœ“ OK
stdout
Time steps: 5844
Loaded source dataset from: data\merged_files\ethiopia_vpd_2010_2025.nc
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_vpd_2010_2025_025deg.nc
Input: data\merged_files\ethiopia_vpd_2010_2025_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_vpd_2010_2025_025deg_clipped.nc

=== ethiopia historical vpd ===
Running merge step...
$ C:\Python313\python.exe codes/merge_netcdf_ethiopia_vapour_pressure_deficit.py --input-dir data/ethiopia_vapour_pressure_deficit/netcdf --output data/merged_files/ethiopia_vpd_2010_2025.nc
Completed in 11m 15.6s
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/ethiopia_vpd_2010_2025.nc --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_vpd_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 8.33s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_vpd_2010_2025_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_vpd_2010_2025_025deg_clipped.nc --compression-level 0
Completed in 2.18s

Historical workflow completed successfully.
FAILED run_20260507_143033
2026-05-07 14:30:33 eth, ken Β· rh Β· ssp245 Β· 2040–2070 99s 1 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode

No validation recorded.

stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.27s
Validated rename/regrid output in 0.82s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 1.83s
Validated clipped output in 0.18s
Workflow slice completed in 7.10s

Workflow completed successfully.
FAILED regrid β€” ken / rh (exit 1, attempt 3)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country kenya --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode

No validation recorded.

stdout
Loaded source dataset from: data\projection_data\isimip-download-kenya\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).

=== kenya ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-kenya/ssp_245/hurs --target-grid data/merged_files/kenya_pr_2010_2025.nc --output data/merged_files/kenya_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Tool run_projection_workflow.py failed after 3 attempt(s). Last stderr: data/isimip-download-kenya/ssp_245/hurs', '--target-grid', 'data/merged_files/kenya_pr_2010_2025.nc', '--output', 'data/merged_files/kenya_rh_ssp245_2040_2070_025deg.nc', '--method', 'linear', '--start-year', '2040', '--end-year', '2070', '--compression-level', '0']' returned non-zero exit status 1.
stderr
Traceback (most recent call last):
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 521, in 
    main()
    ~~~~^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 500, in main
    process_work_item(work_item, args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 479, in process_work_item
    process_one(country, scenario, variable, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 414, in process_one
    run_command(rename_command, dry_run=args.dry_run)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 199, in run_command
    subprocess.run(command, cwd=WORKSPACE_ROOT, check=True)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python313\Lib\subprocess.py", line 577, in run
    raise CalledProcessError(retcode, process.args,
                             output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['C:\\Python313\\python.exe', 'codes/rename_and_regrid_netcdf.py', '--source', 'data/projection_data/isimip-download-kenya/ssp_245/hurs', '--target-grid', 'data/merged_files/kenya_pr_2010_2025.nc', '--output', 'data/merged_files/kenya_rh_ssp245_2040_2070_025deg.nc', '--method', 'linear', '--start-year', '2040', '--end-year', '2070', '--compression-level', '0']' returned non-zero exit status 1.
SUCCESS run_20260507_143018
2026-05-07 14:30:18 eth Β· rh Β· ssp245 Β· 2040–2070 18s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode --run-diagnostics
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
- Value max: 99.3214
- Value mean Β± std: 57.6185 Β± 17.6768
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
- QC JSON sidecar written to: data\merged_files_et\diagnostics\ethiopia_rh_ssp245_2040_2070_025deg_clipped_qc.json

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 3.65s
Validated rename/regrid output in 0.88s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 1.94s
Validated clipped output in 0.17s
Running diagnostics step...
$ C:\Python313\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --var rh --time-index 6416 --out-dir data/merged_files_et/diagnostics
Completed in 4.97s
Workflow slice completed in 11.69s

Workflow completed successfully.
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
Variable rh (%)
Dimensions 11323 time Γ— 45 lat Γ— 59 lon
Resolution 0.25Β° Γ— 0.25Β°
Bbox lat 3.625–14.625, lon 33.125–47.625
Timesteps 11323 (0 duplicates, 0 missing years)
Land coverage 55.7% non-NaN pixels
Value range 5.3271 – 99.3214
Mean Β± std 57.6185 Β± 17.6768
Percentiles p05=29.4943 p25=43.9595 p50=56.5843 p75=72.9008 p95=85.0358
D:\IRLI\climate-agent\data\diagnostics\run_20260507_143018\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260507_143018\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
SUCCESS run_20260507_142231
2026-05-07 14:22:31 eth Β· rh Β· ssp245 Β· 2040–2070 9s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.26s
Validated rename/regrid output in 0.73s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 2.13s
Validated clipped output in 0.17s
Workflow slice completed in 7.29s

Workflow completed successfully.
WARNING run_20260507_133029
2026-05-07 13:30:29 eth Β· rh Β· historical Β· 2010–2025 709s 0 ok 0 fail 1 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
WARNING merge β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable rh --start-year 2010 --end-year 2025 --max-workers 1 --fast-mode
ethiopia_rh_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ— FAIL
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
anomalyβœ“ OK
distributionβœ“ OK
stdout
Time steps: 5844
Loaded source dataset from: data\merged_files\ethiopia_rh_2010_2025.nc
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_2010_2025_025deg.nc
Input: data\merged_files\ethiopia_rh_2010_2025_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_2010_2025_025deg_clipped.nc

=== ethiopia historical rh ===
Running merge step...
$ C:\Python313\python.exe codes/merge_netcdf_ethiopia_relative_humidity.py --input-dir data/ethiopia_relative_humidity_mean/netcdf --output data/merged_files/ethiopia_rh_2010_2025.nc
Completed in 11m 30.9s
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/ethiopia_rh_2010_2025.nc --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 8.97s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_2010_2025_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_2010_2025_025deg_clipped.nc --compression-level 0
Completed in 3.49s

Historical workflow completed successfully.
SUCCESS run_20260506_223547
2026-05-06 22:35:47 eth Β· tas Β· historical Β· 2010–2025 650s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode strict
SUCCESS merge β€” eth / tas (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable temp --start-year 2010 --end-year 2025 --max-workers 1
ethiopia_temp_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Time steps: 5844
Loaded source dataset from: data\merged_files\ethiopia_temp_2010_2025.nc
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_temp_2010_2025_025deg.nc
Input: data\merged_files\ethiopia_temp_2010_2025_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_temp_2010_2025_025deg_clipped.nc

=== ethiopia historical temp ===
Running merge step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/merge_netcdf_ethiopia_temperature.py --input-dir data/ethiopia_temperature/netcdf --output data/merged_files/ethiopia_temp_2010_2025.nc
Completed in 10m 38.4s
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/ethiopia_temp_2010_2025.nc --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_temp_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 4.28s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_temp_2010_2025_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_temp_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 3.66s

Historical workflow completed successfully.
SUCCESS run_20260506_221419
2026-05-06 22:14:19 eth Β· rh Β· historical Β· 2010–2025 696s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode strict
SUCCESS merge β€” eth / rh (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable rh --start-year 2010 --end-year 2025 --max-workers 1
ethiopia_rh_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Time steps: 5844
Loaded source dataset from: data\merged_files\ethiopia_rh_2010_2025.nc
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_2010_2025_025deg.nc
Input: data\merged_files\ethiopia_rh_2010_2025_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_2010_2025_025deg_clipped.nc

=== ethiopia historical rh ===
Running merge step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/merge_netcdf_ethiopia_relative_humidity.py --input-dir data/ethiopia_relative_humidity_mean/netcdf --output data/merged_files/ethiopia_rh_2010_2025.nc
Completed in 11m 15.7s
Running rename/regrid step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/rename_and_regrid_netcdf.py --source data/merged_files/ethiopia_rh_2010_2025.nc --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_2010_2025_025deg.nc --method linear --compression-level 0
Completed in 10.67s
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_2010_2025_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 3.25s

Historical workflow completed successfully.
SUCCESS run_20260506_221235
2026-05-06 22:12:35 eth Β· pr Β· historical Β· 2010–2025 6s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode strict
SUCCESS merge β€” eth / pr (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable pr --start-year 2010 --end-year 2025 --max-workers 1
ethiopia_pr_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
stdout
Input: data\merged_files\ethiopia_pr_2010_2025.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_pr_2010_2025_025deg_clipped.nc

=== ethiopia historical pr ===
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_pr_2010_2025.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_pr_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 2.74s

Historical workflow completed successfully.
SUCCESS run_20260506_220945
2026-05-06 22:09:45 eth Β· pr Β· historical Β· 2010–2025 13s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode strict
SUCCESS merge β€” eth / pr (exit 0, attempt 1)
D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe D:\IRLI\climate-agent\scripts\run_historical_workflow.py --country ethiopia --variable pr --start-year 2010 --end-year 2025 --max-workers 1
ethiopia_pr_2010_2025_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
unitsβœ“ OK
grid_match– SKIP
spatial_bounds– SKIP
stdout
Input: data\merged_files\ethiopia_pr_2010_2025.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_pr_2010_2025_025deg_clipped.nc

=== ethiopia historical pr ===
Running clip step...
$ D:\IRLI\climate-agent\climate-agent-env\Scripts\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_pr_2010_2025.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_pr_2010_2025_025deg_clipped.nc --compression-level 1
Completed in 3.87s

Historical workflow completed successfully.
SUCCESS run_20260506_211432
2026-05-06 21:14:32 eth Β· rh Β· ssp245 Β· 2040–2070 0s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.49s
Validated rename/regrid output in 0.96s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 2.74s
Validated clipped output in 0.24s
Workflow slice completed in 8.44s

Workflow completed successfully.
SUCCESS run_20260506_211253
2026-05-06 21:12:53 eth Β· rh Β· ssp245 Β· 2040–2070 10s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.49s
Validated rename/regrid output in 0.96s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 2.74s
Validated clipped output in 0.24s
Workflow slice completed in 8.44s

Workflow completed successfully.
SUCCESS run_20260506_211201
2026-05-06 21:12:01 eth Β· rh Β· ssp245 Β· 2040–2070 9s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.02s
Validated rename/regrid output in 0.81s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 2.30s
Validated clipped output in 0.22s
Workflow slice completed in 7.35s

Workflow completed successfully.
SUCCESS run_20260506_210848
2026-05-06 21:08:48 eth Β· rh Β· ssp245 Β· 2040–2070 20s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode --run-diagnostics
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
- Value min: 5.3271
- Value max: 99.3214
- Value mean: 57.6185
- Diagnostic plot written to: data\merged_files_et\diagnostics\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.33s
Validated rename/regrid output in 0.82s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 2.13s
Validated clipped output in 0.20s
Running diagnostics step...
$ C:\Python313\python.exe codes/diagnose_final_netcdf.py --file data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --var rh --time-index 6416 --out-dir data/merged_files_et/diagnostics
Completed in 5.80s
Workflow slice completed in 13.40s

Workflow completed successfully.
D:\IRLI\climate-agent\data\diagnostics\run_20260506_210848\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
D:\IRLI\climate-agent\data\diagnostics\run_20260506_210848\ethiopia_rh_ssp245_2040_2070_025deg_clipped_diagnostic.png
SUCCESS run_20260506_210707
2026-05-06 21:07:07 eth Β· rh Β· ssp245 Β· 2040–2070 9s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 3.96s
Validated rename/regrid output in 0.76s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 2.17s
Validated clipped output in 0.20s
Workflow slice completed in 7.09s

Workflow completed successfully.
SUCCESS run_20260506_210616
2026-05-06 21:06:16 eth Β· rh Β· ssp245 Β· 2040–2070 11s 1 ok 0 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
SUCCESS regrid β€” eth / rh (exit 0, attempt 1)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode
ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc
existenceβœ“ OK
variable_presentβœ“ OK
non_nan_coverageβœ“ OK
time_coverageβœ“ OK
daily_axisβœ“ OK
units– SKIP
grid_match– SKIP
spatial_bounds– SKIP
stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Input: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc
Boundary: data\boundaries\ethiopia_adm0.geojson
Output: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 4.64s
Validated rename/regrid output in 1.19s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Completed in 3.23s
Validated clipped output in 0.29s
Workflow slice completed in 9.35s

Workflow completed successfully.
FAILED run_20260506_205337
2026-05-06 20:53:37 eth Β· rh Β· ssp245 Β· 2040–2070 120s 0 ok 1 fail 0 warn 0 skip
Python 3.13.3   xarray 2026.4.0   commit unknown   mode fast
FAILED regrid β€” eth / rh (exit 1, attempt 3)
C:\Python313\python.exe D:\IRLI\climate-agent\scripts\run_projection_workflow.py --country ethiopia --scenario ssp_245 --variable rh --start-year 2040 --end-year 2070 --max-workers 1 --fast-mode

No validation recorded.

stdout
Loaded source dataset from: data\projection_data\isimip-download-ethiopia\ssp_245\hurs (4 files)
Clipped source dataset to years 2040-2070 on 'time' (14610 -> 11323 records).
Applied variable renaming and regridding using target grid: data\merged_files\ethiopia_pr_2010_2025.nc (method=linear).
Wrote output file: data\merged_files\ethiopia_rh_ssp245_2040_2070_025deg.nc

=== ethiopia ssp_245 rh ===
Running rename/regrid step...
$ C:\Python313\python.exe codes/rename_and_regrid_netcdf.py --source data/projection_data/isimip-download-ethiopia/ssp_245/hurs --target-grid data/merged_files/ethiopia_pr_2010_2025.nc --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --method linear --start-year 2040 --end-year 2070 --compression-level 0
Completed in 3.61s
Validated rename/regrid output in 0.78s
Running clip step...
$ C:\Python313\python.exe codes/clip_netcdf_by_shapefile.py --input data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc --boundary data/boundaries/ethiopia_adm0.geojson --output data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc --compression-level 0
Tool run_projection_workflow.py failed after 3 attempt(s). Last stderr: es/clip_netcdf_by_shapefile.py', '--input', 'data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc', '--boundary', 'data/boundaries/ethiopia_adm0.geojson', '--output', 'data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc', '--compression-level', '0']' returned non-zero exit status 1.
stderr
Traceback (most recent call last):
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 521, in 
    main()
    ~~~~^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 500, in main
    process_work_item(work_item, args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 479, in process_work_item
    process_one(country, scenario, variable, args)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 443, in process_one
    run_command(clip_shape_command, dry_run=args.dry_run)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\IRLI\climate-agent\scripts\run_projection_workflow.py", line 199, in run_command
    subprocess.run(command, cwd=WORKSPACE_ROOT, check=True)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python313\Lib\subprocess.py", line 577, in run
    raise CalledProcessError(retcode, process.args,
                             output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['C:\\Python313\\python.exe', 'codes/clip_netcdf_by_shapefile.py', '--input', 'data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg.nc', '--boundary', 'data/boundaries/ethiopia_adm0.geojson', '--output', 'data/merged_files/ethiopia_rh_ssp245_2040_2070_025deg_clipped.nc', '--compression-level', '0']' returned non-zero exit status 1.