Skip to content

Update the ozone diagnostics - #894

Draft
lewisjared wants to merge 86 commits into
use-esmvaltool-basefrom
fix/ozone-cmip7-recipe
Draft

Update the ozone diagnostics#894
lewisjared wants to merge 86 commits into
use-esmvaltool-basefrom
fix/ozone-cmip7-recipe

Conversation

@lewisjared

@lewisjared lewisjared commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Updates the ozone diagnostics for the unified ref/recipe_ref_ozone.yml recipe that replaced recipe_ref_ozone_cmip7.yml in ESMValTool v2.15. Targets #885 because it depends on the recipe and lock file updates there. Replaces #886, which was based on an older use-esmvaltool-base and carried duplicate commits.

  • The base recipe's time ranges now drive the diagnostics. A shared _prepare_recipe helper replaces the per-diagnostic overrides.
  • CMIP7 executions evaluate the historical experiment through 2021, and the polar cap series starts at 1950. The fabricated CMIP7 test data is extended to match.
  • The zonal mean profiles follow the base recipe's timerange_for_ozone_profile, so they now average 1990 to 2000 rather than 2005 to 2014.
  • The obs4MIPs requirement demands coverage through 2021 for CMIP7 only. CMIP6 still only needs it until 2015.
  • recipes.txt picks up the renamed ENSO and sea-ice recipe hashes. The ENSO diagnostics themselves are fixed separately.

Requiring CMIP7 coverage through 2021 initially dropped the five 360-day calendar models, because the synthetic catalog only lifted runs whose end_time matched 2014-12-16 12:00:00 exactly. #896 fixes that, so the solved set is unchanged by this PR and the regression fixtures are untouched.

The ozone regression baselines still need a remint. They were minted before #887, so the fabricated CMIP7 series were relabelled from 1950-2014 onto 1957-2021 rather than extended, and the polar cap plots start at 1960 instead of 1950.

test_write_recipe fails for enso-basic-climatology, enso-characteristics and sea-ice-sensitivity. Those fixtures are already stale on #885 and are not touched here.

renovate Bot and others added 2 commits August 22, 2026 16:03
Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.5.7 to 6.5.8.
- [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst)
- [Commits](tornadoweb/tornado@v6.5.7...v6.5.8)

---
updated-dependencies:
- dependency-name: tornado
  dependency-version: 6.5.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The fabricated CMIP7 coverage used to relabel the whole time axis, so a 1950-2014
series came back as 1957-2021 and the recipe had to ask for 1960 to find any data.
Fabrication now repeats the final year instead, so the start is preserved and the
polar cap diagnostics can ask for the full 1950/2021 range.

Regenerates the ozone solve baselines, which still carried the datasets that the
old 2014 end date let through.
@lewisjared
lewisjared force-pushed the fix/ozone-cmip7-recipe branch from d3d2002 to 7c18e66 Compare September 2, 2026 04:51
The previous mint predates #887, so the fabricated CMIP7 series were relabelled
from 1950-2014 onto 1957-2021 rather than extended by repeating the final year.
The polar cap series now start at 1950 and match CMIP6.
@lewisjared

Copy link
Copy Markdown
Contributor Author

Regression baseline diff

9 test case(s) and 39 native file(s) changed against origin/use-esmvaltool-base. Text outputs are diffed inline. NetCDF and PNG outputs are listed with a size delta and a link to each blob.

case versions native files
esmvaltool/ozone-annual-cycle/cmip6 v2 -> v4 ~5
esmvaltool/ozone-annual-cycle/cmip7 v2 -> v4 ~5
esmvaltool/ozone-lat-time/cmip6 v2 -> v4 ~5
esmvaltool/ozone-lat-time/cmip7 v2 -> v4 ~5
esmvaltool/ozone-nh-mar/cmip6 v2 -> v4 ~4
esmvaltool/ozone-nh-mar/cmip7 v2 -> v4 ~4
esmvaltool/ozone-sh-oct/cmip6 v2 -> v4 ~2
esmvaltool/ozone-sh-oct/cmip7 v2 -> v4 ~4
esmvaltool/ozone-zonal/cmip6 v3 -> v5 ~5
esmvaltool/ozone-annual-cycle/cmip6 -- 5 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
file status size blobs
executions/recipe/plots/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map.png changed 78,392 -> 77,763 B (-629) old new
executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_bottom.nc changed 27,463 -> 27,869 B (+406) old new
executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_left.nc changed 27,463 -> 27,833 B (+370) old new
executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_right.nc changed 24,162 -> 23,862 B (-300) old new

executions/recipe/run/lat_month_mapplot/plot/diagnostic_provenance.yml (changed, 1,979 -> 1,979 B (+0))

--- old 6de2cf019123
+++ new 93ef937be24d
@@ -1,7 +1,7 @@
 ? <OUTPUT_DIR>/executions/recipe/plots/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map.png
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_2005-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1997-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2014.nc
   authors:
   - hassler_birgit
   - schlund_manuel
@@ -13,8 +13,8 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_bottom.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_2005-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1997-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2014.nc
   authors:
   - hassler_birgit
   - schlund_manuel
@@ -25,7 +25,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_left.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1997-2014.nc
   authors:
   - hassler_birgit
   - schlund_manuel
@@ -36,7 +36,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_right.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2014.nc
   authors:
   - hassler_birgit
   - schlund_manuel
esmvaltool/ozone-annual-cycle/cmip7 -- 5 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
  • catalog_hash: d871cb5c53da24f777a1b4c4a5535ab8fb01de3f -> 83717573c122607da3b482f4f058d7f4d4e8301c
file status size blobs
executions/recipe/plots/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map.png changed 84,447 -> 80,527 B (-3,920) old new
executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_bottom.nc changed 27,460 -> 27,830 B (+370) old new
executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_left.nc changed 27,460 -> 27,830 B (+370) old new
executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_right.nc changed 24,162 -> 23,862 B (-300) old new

executions/recipe/run/lat_month_mapplot/plot/diagnostic_provenance.yml (changed, 2,003 -> 2,003 B (+0))

--- old 0ca6597dc305
+++ new 20dbf5a135f6
@@ -1,7 +1,7 @@
 ? <OUTPUT_DIR>/executions/recipe/plots/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map.png
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_2005-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1997-2021.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2021.nc
   authors:
   - hassler_birgit
   - schlund_manuel
@@ -13,8 +13,8 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_bottom.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_2005-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1997-2021.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2021.nc
   authors:
   - hassler_birgit
   - schlund_manuel
@@ -25,7 +25,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_left.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1997-2021.nc
   authors:
   - hassler_birgit
   - schlund_manuel
@@ -36,7 +36,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_month_mapplot/plot/hovmoeller_anncyc_vs_lat_or_lon_toz_LatTime_Map_top_right.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_month_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2021.nc
   authors:
   - hassler_birgit
   - schlund_manuel
esmvaltool/ozone-lat-time/cmip6 -- 5 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
file status size blobs
executions/recipe/plots/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map.png changed 147,681 -> 143,815 B (-3,866) old new
executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_bottom.nc changed 64,540 -> 62,598 B (-1,942) old new
executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_left.nc changed 64,725 -> 62,414 B (-2,311) old new
executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_right.nc changed 63,332 -> 61,096 B (-2,236) old new

executions/recipe/run/lat_time_mapplot/plot/diagnostic_provenance.yml (changed, 2,037 -> 2,037 B (+0))

--- old bebd2719f041
+++ new f0e73f1d0f96
@@ -1,7 +1,7 @@
 ? <OUTPUT_DIR>/executions/recipe/plots/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map.png
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1997-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2014.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
@@ -14,8 +14,8 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_bottom.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1996-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1997-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2014.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
@@ -27,7 +27,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_left.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1997-2014.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
@@ -39,7 +39,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_right.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2014.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
esmvaltool/ozone-lat-time/cmip7 -- 5 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
  • catalog_hash: d871cb5c53da24f777a1b4c4a5535ab8fb01de3f -> 83717573c122607da3b482f4f058d7f4d4e8301c
file status size blobs
executions/recipe/plots/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map.png changed 168,083 -> 172,062 B (+3,979) old new
executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_bottom.nc changed 64,527 -> 76,665 B (+12,138) old new
executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_left.nc changed 64,718 -> 76,536 B (+11,818) old new
executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_right.nc changed 63,332 -> 75,208 B (+11,876) old new

executions/recipe/run/lat_time_mapplot/plot/diagnostic_provenance.yml (changed, 2,061 -> 2,061 B (+0))

--- old e9a5b935d964
+++ new 35df23a42592
@@ -1,7 +1,7 @@
 ? <OUTPUT_DIR>/executions/recipe/plots/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map.png
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1997-2021.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2021.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
@@ -14,8 +14,8 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_bottom.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1996-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1997-2021.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2021.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
@@ -27,7 +27,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_left.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1997-2021.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
@@ -39,7 +39,7 @@
   - zonal
 ? <OUTPUT_DIR>/executions/recipe/work/lat_time_mapplot/plot/hovmoeller_time_vs_lat_or_lon_toz_LatTime_Map_top_right.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/lat_time_mapplot/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1997-2021.nc
   authors:
   - schlund_manuel
   - kraft_jeremy
esmvaltool/ozone-nh-mar/cmip6 -- 4 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3

Committed artefacts changed:

  • series.json
file status size blobs
executions/recipe/plots/polar_cap_time_series_NH/plot/timeseries_toz_NH_MAR.png changed 88,521 -> 92,277 B (+3,756) old new
executions/recipe/work/polar_cap_time_series_NH/plot/timeseries_toz_NH_MAR.nc changed 10,310 -> 10,128 B (-182) old new

executions/recipe/run/polar_cap_time_series_NH/plot/diagnostic_provenance.yml (changed, 650 -> 650 B (+0))

--- old cf593bb7ebcc
+++ new 2a5b8da1e921
@@ -1,8 +1,8 @@
 ? <OUTPUT_DIR>/executions/recipe/plots/polar_cap_time_series_NH/plot/timeseries_toz_NH_MAR.png
 : &id001
   ancestors:
+  - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_NH/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1950-2014.nc
   - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_NH/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2021.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_NH/toz/CMIP6_GFDL-ESM4_AERmon_historical_r1i1p1f1_toz_gr1_1950-2014.nc
   authors:
   - schlund_manuel
   caption: Time series of ambiguous_long_name for various datasets.

series.json (changed, 4,422 -> 4,399 B (-23))

--- old 26cd433d9f79
+++ new 3ef5857c321b
@@ -93,71 +93,71 @@
     ],
     "index_name": "time",
     "values": [
-      407.5291442871094,
-      399.90130615234375,
-      393.7835388183594,
-      384.9622497558594,
-      400.4131164550781,
-      399.8167724609375,
-      417.03643798828125,
-      413.0714111328125,
-      418.2637634277344,
-      420.440673828125,
-      441.4696350097656,
-      414.5494689941406,
-      415.2564392089844,
-      407.40008544921875,
-      414.2424621582031,
-      417.6406555175781,
-      425.7912292480469,
-      418.4874267578125,
-      425.0320129394531,
-      417.3187561035156,
-      421.94732666015625,
-      417.0071716308594,
-      437.8959655761719,
-      432.38079833984375,
-      414.6580505371094,
-      411.5722961425781,
-      423.5048828125,
-      429.6351623535156,
-      405.6231689453125,
-      412.15057373046875,
-      423.0074157714844,
-      404.2963562011719,
-      421.5974426269531,
-      420.9507751464844,
-      409.0649108886719,
-      407.28399658203125,
-      393.88177490234375,
-      395.19158935546875,
-      412.28411865234375,
-      427.6337585449219,
-      417.2103576660156,
-      400.0932312011719,
-      415.0448303222656,
-      397.6531677246094,
-      364.7537536621094,
-      419.7193298339844,
-      397.1560363769531,
-      409.71771240234375,
-      397.39691162109375,
-      405.7891540527344,
-      408.8729553222656,
-      414.808837890625,
-      416.71441650390625,
-      408.9202880859375,
-      430.3568420410156,
-      417.8289794921875,
-      411.0965881347656,
-      418.53338623046875,
-      416.4183654785156,
-      390.1081848144531,
-      415.1942138671875,
-      412.84320068359375,
-      388.7828063964844,
-      435.4207458496094,
-      415.2336120605469,
+      409.1578063964844,
+      403.9105529785156,
+      394.857177734375,
+      385.2142333984375,
+      400.61566162109375,
+      402.3245544433594,
+      422.1778869628906,
+      414.47564697265625,
+      419.5641174316406,
+      423.14617919921875,
+      444.6285705566406,
+      416.263427734375,
+      418.3648986816406,
+      409.82305908203125,
+      415.2846984863281,
+      419.9190979003906,
+      428.4659423828125,
+      420.6527099609375,
+      428.0644836425781,
+      420.2755126953125,
+      425.04541015625,
+      419.486328125,
+      440.3427734375,
+      435.1847229003906,
+      417.0231628417969,
+      413.2773742675781,
+      426.4793701171875,
+      432.5576171875,
+      406.52728271484375,
+      412.84808349609375,
+      425.8034362792969,
+      407.3272399902344,
+      425.9691162109375,
+      424.2892761230469,
+      412.5556335449219,
+      411.0689697265625,
+      396.3155822753906,
+      396.4222106933594,
+      413.7740478515625,
+      430.6904602050781,
+      420.5450744628906,
+      401.6966552734375,
+      417.2540283203125,
+      399.8173828125,
+      364.8374938964844,
+      422.22967529296875,
+      398.830078125,
+      411.89984130859375,
+      401.1479797363281,
+      407.8724060058594,
+      410.88140869140625,
+      417.4186706542969,
+      419.0830993652344,
+      411.0274353027344,
+      433.0693359375,
+      419.98858642578125,
+      413.7646484375,
+      421.7967834472656,
+      418.6949768066406,
+      390.49078369140625,
+      416.4707336425781,
+      415.5193786621094,
+      389.52337646484375,
+      438.33050537109375,
+      418.70294189453125,
       null,
       null,
       null,
esmvaltool/ozone-nh-mar/cmip7 -- 4 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
  • catalog_hash: d871cb5c53da24f777a1b4c4a5535ab8fb01de3f -> 83717573c122607da3b482f4f058d7f4d4e8301c

Committed artefacts changed:

  • series.json
file status size blobs
executions/recipe/plots/polar_cap_time_series_NH/plot/timeseries_toz_NH_MAR.png changed 89,531 -> 94,469 B (+4,938) old new
executions/recipe/work/polar_cap_time_series_NH/plot/timeseries_toz_NH_MAR.nc changed 10,310 -> 10,128 B (-182) old new

executions/recipe/run/polar_cap_time_series_NH/plot/diagnostic_provenance.yml (changed, 658 -> 658 B (+0))

--- old 099fb2f195cb
+++ new ee8f1bf5bf5a
@@ -2,7 +2,7 @@
 : &id001
   ancestors:
   - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_NH/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2021.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_NH/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1950-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_NH/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1950-2021.nc
   authors:
   - schlund_manuel
   caption: Time series of ambiguous_long_name for various datasets.

series.json (changed, 4,139 -> 4,191 B (+52))

--- old 510a6b90c9cf
+++ new 91a9ffae5d28
@@ -93,78 +93,78 @@
     ],
     "index_name": "time",
     "values": [
-      390.837890625,
-      392.4892578125,
-      393.908203125,
+      391.5263671875,
+      399.583984375,
+      393.62109375,
       390.625,
-      394.6044921875,
-      392.736328125,
-      416.0849609375,
-      415.6806640625,
-      413.302734375,
-      416.3017578125,
-      442.6357421875,
-      395.9990234375,
-      404.0322265625,
-      405.287109375,
-      395.13671875,
-      404.66796875,
-      416.6044921875,
-      413.208984375,
-      417.8857421875,
-      412.0048828125,
-      408.10546875,
-      402.0087890625,
-      438.38671875,
-      433.6318359375,
-      407.4619140625,
-      398.6005859375,
-      426.2958984375,
-      423.7978515625,
-      394.6318359375,
-      406.9541015625,
-      421.63671875,
-      397.9365234375,
-      419.8115234375,
-      414.498046875,
-      405.3486328125,
-      403.9296875,
-      391.59765625,
-      391.6953125,
-      403.3916015625,
-      430.177734375,
-      416.421875,
-      395.3515625,
-      409.8388671875,
-      393.044921875,
-      384.9111328125,
-      415.564453125,
-      395.728515625,
-      406.6064453125,
-      391.86328125,
-      395.1435546875,
-      393.5888671875,
-      417.90625,
-      412.818359375,
-      396.54296875,
-      431.8486328125,
-      409.7734375,
-      399.015625,
-      417.59765625,
-      410.3056640625,
+      394.2568359375,
+      393.3505859375,
+      422.400390625,
+      416.419921875,
+      415.712890625,
+      420.9267578125,
+      446.62890625,
+      399.05078125,
+      410.677734375,
+      406.9658203125,
+      394.7421875,
+      409.328125,
+      422.8740234375,
+      416.5869140625,
+      423.2216796875,
+      418.677734375,
+      414.60546875,
+      407.1494140625,
+      441.9462890625,
+      437.4423828125,
+      411.2734375,
+      398.3505859375,
+      431.455078125,
+      429.4384765625,
+      394.38671875,
+      407.0361328125,
+      425.38671875,
+      401.6259765625,
+      425.6806640625,
+      420.6748046875,
+      411.421875,
+      409.08203125,
+      391.87109375,
+      391.6015625,
+      405.017578125,
+      434.259765625,
+      422.7080078125,
+      394.9375,
+      413.3740234375,
+      395.16796875,
+      385.4111328125,
+      420.232421875,
+      395.904296875,
+      409.75,
+      396.80859375,
+      396.6142578125,
+      393.431640625,
+      420.408203125,
+      415.0361328125,
+      398.880859375,
+      436.78515625,
+      412.7890625,
+      403.3671875,
+      422.873046875,
+      413.705078125,
       390.625,
-      393.681640625,
-      409.1328125,
-      388.62890625,
-      426.888671875,
-      416.9375,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null
+      393.51953125,
+      413.294921875,
+      388.8037109375,
+      431.9052734375,
+      421.388671875,
+      421.388671875,
+      421.388671875,
+      421.388671875,
+      421.388671875,
+      421.388671875,
+      421.388671875,
+      421.388671875
     ]
   }
 ]
esmvaltool/ozone-sh-oct/cmip6 -- 2 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
file status size blobs
executions/recipe/plots/polar_cap_time_series_SH/plot/timeseries_toz_SH_Oct.png changed 89,533 -> 90,958 B (+1,425) old new
executions/recipe/work/polar_cap_time_series_SH/plot/timeseries_toz_SH_Oct.nc changed 10,310 -> 10,128 B (-182) old new
esmvaltool/ozone-sh-oct/cmip7 -- 4 native file(s)
  • test_case_version: 2 -> 4
  • diagnostic_version: 2 -> 3
  • catalog_hash: d871cb5c53da24f777a1b4c4a5535ab8fb01de3f -> 83717573c122607da3b482f4f058d7f4d4e8301c

Committed artefacts changed:

  • series.json
file status size blobs
executions/recipe/plots/polar_cap_time_series_SH/plot/timeseries_toz_SH_Oct.png changed 89,280 -> 90,943 B (+1,663) old new
executions/recipe/work/polar_cap_time_series_SH/plot/timeseries_toz_SH_Oct.nc changed 10,310 -> 10,128 B (-182) old new

executions/recipe/run/polar_cap_time_series_SH/plot/diagnostic_provenance.yml (changed, 658 -> 658 B (+0))

--- old eba310a7f6b9
+++ new 2ace5017c82b
@@ -2,7 +2,7 @@
 : &id001
   ancestors:
   - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_SH/toz/obs4MIPs_C3S-GTO-ECV-9-0_toz_1996-2021.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_SH/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1950-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/polar_cap_time_series_SH/toz/toz_tavg-u-hxy-u_mon_glb_gr1_GFDL-ESM4_historical_r1i1p1f1_1950-2021.nc
   authors:
   - schlund_manuel
   caption: Time series of ambiguous_long_name for various datasets.

series.json (changed, 4,139 -> 4,209 B (+70))

--- old b6fe210ff96a
+++ new 1ebd16d9dc02
@@ -158,13 +158,13 @@
       233.8916015625,
       221.8466796875,
       248.0029296875,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null,
-      null
+      248.0029296875,
+      248.0029296875,
+      248.0029296875,
+      248.0029296875,
+      248.0029296875,
+      248.0029296875,
+      248.0029296875
     ]
   }
 ]
esmvaltool/ozone-zonal/cmip6 -- 5 native file(s)
  • test_case_version: 3 -> 5
  • diagnostic_version: 3 -> 4
file status size blobs
executions/recipe/plots/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical.png changed 79,760 -> 80,412 B (+652) old new
executions/recipe/work/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical_bottom.nc changed 32,222 -> 30,822 B (-1,400) old new
executions/recipe/work/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical_top_left.nc changed 30,030 -> 28,703 B (-1,327) old new
executions/recipe/work/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical_top_right.nc changed 25,615 -> 24,832 B (-783) old new

executions/recipe/run/zonal_mean_profiles/plot/diagnostic_provenance.yml (changed, 1,939 -> 1,939 B (+0))

--- old 324e2ac1d527
+++ new 46147c786184
@@ -1,7 +1,7 @@
 ? <OUTPUT_DIR>/executions/recipe/plots/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical.png
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/CMIP6_GFDL-ESM4_Amon_historical_r1i1p1f1_o3_gr1_2005-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/OBS6_ESACCI-OZONE_sat_L3-SAGE-OMPS_AERmon_o3_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/CMIP6_GFDL-ESM4_Amon_historical_r1i1p1f1_o3_gr1_1990-2000.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/OBS6_ESACCI-OZONE_sat_L3-SAGE-OMPS_AERmon_o3_1990-2000.nc
   authors:
   - schlund_manuel
   caption: Zonal mean profile of Mole Fraction of O3 of dataset CMIP6.
@@ -11,8 +11,8 @@
   - vert
 ? <OUTPUT_DIR>/executions/recipe/work/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical_bottom.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/CMIP6_GFDL-ESM4_Amon_historical_r1i1p1f1_o3_gr1_2005-2014.nc
-  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/OBS6_ESACCI-OZONE_sat_L3-SAGE-OMPS_AERmon_o3_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/CMIP6_GFDL-ESM4_Amon_historical_r1i1p1f1_o3_gr1_1990-2000.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/OBS6_ESACCI-OZONE_sat_L3-SAGE-OMPS_AERmon_o3_1990-2000.nc
   authors:
   - schlund_manuel
   caption: Zonal mean profile of Mole Fraction of O3 of dataset CMIP6 - ESACCI-OZONE.
@@ -22,7 +22,7 @@
   - vert
 ? <OUTPUT_DIR>/executions/recipe/work/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical_top_left.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/CMIP6_GFDL-ESM4_Amon_historical_r1i1p1f1_o3_gr1_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/CMIP6_GFDL-ESM4_Amon_historical_r1i1p1f1_o3_gr1_1990-2000.nc
   authors:
   - schlund_manuel
   caption: Zonal mean profile of Mole Fraction of O3 of dataset CMIP6.
@@ -32,7 +32,7 @@
   - vert
 ? <OUTPUT_DIR>/executions/recipe/work/zonal_mean_profiles/plot/zonal_mean_profile_o3_GFDL-ESM4_historical_top_right.nc
 : ancestors:
-  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/OBS6_ESACCI-OZONE_sat_L3-SAGE-OMPS_AERmon_o3_2005-2014.nc
+  - <OUTPUT_DIR>/executions/recipe/preproc/zonal_mean_profiles/o3/OBS6_ESACCI-OZONE_sat_L3-SAGE-OMPS_AERmon_o3_1990-2000.nc
   authors:
   - schlund_manuel
   caption: Zonal mean profile of Mole Fraction of O3 of dataset ESACCI-OZONE.

@lewisjared

Copy link
Copy Markdown
Contributor Author

@bouweandela There has been a regression in the plot spacing:

old new

Thoughts on what this might be? I haven't dug into it if is a 2.15 change or a diagnostic change, but it does seem to happen for all figures

The CMIP7 DRS nests files 12 levels below the archive root, so the limit of 10
silently discovered nothing. Bumping the number would break again whenever the
root given sits above MIP-DRS7, so discovery now accepts `depth=None` to walk
the whole tree and the CMIP7 adapter uses it.
Adds a test that the CMIP7 adapter reaches files from the bare archive root,
which fails if either call site goes back to a fixed depth. A discovery run
that matches nothing now warns rather than logging at info, so the streaming
path stops failing quietly.
Remove the directory depth limit from dataset discovery
The obs4REF collection was ingested as obs4MIPs, so the catalog could not show
which datasets came from the registry and which from the archive.

Ingests it as obs4ref instead. The solver folds the obs4REF catalog into the
obs4MIPs one before matching, so diagnostics keep asking for obs4MIPs and a
dataset held by both is taken from obs4MIPs.
…naliseable

The misfiled check flagged any dataset an obs4REF registry carries, so a
CERES-EBAF, GPCP, HadISST or TropFlux copy correctly fetched from ESGF was
reported as needing a re-ingest. It now looks only at the directory layout the
registry actually produces.

The merged obs4MIPs catalog dropped its adapter and database, so an
unfinalised dataset could no longer be finalised. It now carries them through,
and ref doctor solves against the same catalogs the solver would use.
Shares one helper for unwrapping a catalog, hoists the solver imports in the
doctor checks now that there is no cycle to dodge, and merges the catalogs once
per unsolvable-diagnostics run rather than once per diagnostic explained.
Also promotes normalize_requirement_sets, which the doctor checks now use.
Carrying the obs4MIPs adapter through the merge made the catalog reloadable,
and a reload would go back to that adapter alone and drop every obs4REF row
just merged in. The merge now carries no adapter, so it cannot reload.
Tested against a real deployment on Gus, where 81 datasets are affected. One
finding listing all of them wrapped into an unreadable blob, and the remedy
told the reader to retract 'each of the rows above'. Findings sharing a remedy
are already grouped under it once, so one per dataset reads as a list.
The lockfile moved to mypy 2.3.1, but the requirement floor still allowed
mypy 1. This pins the floor to 2.3.1 so a fresh resolve cannot disagree
with CI.
- The back link is derived from the label, not the removed `slug` field.
- The report header now names the same base that `blob_url` builds from, so a local store's `file://` links and the header agree.
- Drops the filter count from a docstring, which had already drifted once.
feat: render baseline diffs as a local HTML report
chore(deps): update dependency mypy to v2
A changed `.nc` file previously showed only a size delta and two download links, so a
reviewer could not tell a renamed attribute from a numerical regression without opening
both blobs by hand.

- Adds `netcdf_diff`, which opens both sides with xarray and returns a diff of the
  ncdump-style header plus one `StatRow` per data variable.
- Each row carries min, max, mean and NaN count on both sides, the largest absolute and
  relative difference, and the number of cells that differ.
- NaN counts as equal to NaN, so a masked cell staying masked is not a change.
- Rows where something moved are shaded.
- Splits the old combined table into a NetCDF section and an "Other files" table.
- Declares `xarray`, which the workspace previously only had by accident.
- Wraps both tables so a wide one scrolls inside its card, and lets a long file name wrap.

Decoding is turned off when opening, so a non-standard calendar or unit cannot fail the
report. Stats are whole-array. Per-time or per-level breakdowns are deliberately not here.
- Adds `_variable`, so each side of a data variable is looked up once instead of
  once for its shape and again for its values.
- Extracts `_fetch_pair`, which held the same four lines in `_diff_for` and
  `_netcdf_for` including the note precedence rule.
- Drops the text-flavoured defaults on `_fetch_side`, because `limit` and `oversize`
  are a pair and a caller that passes one and forgets the other gets a wrong note.
- Passes the base side's scale into `_compare` from the reduction `_summarise` already
  ran, so a large variable is not scanned a third time.
- Replaces the three overlapping all-NaN guards in `_compare` with one, and drops the
  warning filter in `_summarise` that its size check had already made unreachable.
- Narrows `_of_kind` to one kind, which is all any call site passes now.
- Gives `AnalysedFile.netcdf` the same standing as `text`, with no default.
- Adds a `dash` filter so the template no longer decides how an absent shape reads.

No behaviour change. The `num` filter is annotated to admit the counts it already formats.
The header was a unified diff, so a reader saw three lines of context around each hunk and
nothing else. That names what moved but does not say what the file holds, which is the thing
you want when reviewing a baseline you have not seen before. A file whose header did not move
showed no header at all.

- The header listing now keeps every line and tags the ones that moved, so it doubles as the
  file's description. The `---`, `+++` and `@@` markers are gone with it.
- Adds a Diff and Side by side toggle, so the two headers can be read one next to the other.
- `NetcdfDiff` carries `header_old` and `header_new` for that second view, and
  `header_changed` says whether anything moved.
- An unchanged header is marked as such on the summary rather than replaced by a note.
A shaded row said something in the variable changed but not what. Scanning a row of nine
old to new pairs to find the one that shifted is work the report can do for the reader.

- Adds `Pair`, which holds one statistic on each side and answers whether it moved.
- `StatRow` now carries `shape`, `minimum`, `maximum`, `mean` and `nan` as pairs, which
  drops it from fifteen fields to ten.
- The new half of a pair is bold when it differs, and the three diff columns are bold when
  any cell moved.
- A value can be bold while reading the same as its neighbour, because the display rounds
  to six significant figures and the underlying floats still differ.

Also carries an edit to the changelog fragment made outside these changes.
Three findings from the review, all in the statistics.

- Keeps the stored dtype when reading a variable. Casting to float first meant an `int64`
  past 2**53 lost its last digit, so two adjacent values compared equal and a changed cell
  was reported as unchanged. The mean still accumulates in float64, so a float32 variable
  reads the same as before.
- Reports no maximum difference when a cell moved between NaN and a number. The subtraction
  gives NaN there, so the finite maximum could read as 0 next to a non-zero cell count.
- Bounds what one side may decode to. The fetch cap covers the stored blob, and a compressed
  file under it can still expand past what the job can hold.
…taset

The fold used to take the obs4MIPs copy whatever the versions.
A stale published copy would then beat a newer registry one and rerun every diagnostic on the wrong data.
The newest version now wins, and obs4MIPs only wins a tie.
The superseded-obs4ref doctor check reuses the same merge so the two cannot disagree.

Also picks up the review findings:

- collect_required_reference_data reads the declared fallback source types when locating a registry.
- A primary catalog without an instance_id column is left untouched instead of raising.
- The unsolvable-diagnostics finding joins filters with "and" rather than a semicolon.
- Fixes a typo and the long lines added to the docs.
feat: show what changed inside a NetCDF baseline
Adds `regression-diff-report.yaml`, which builds the HTML diff of the baselines changed on a branch,
uploads it to the reports bucket, and edits one sticky comment on the branch's open pull request.
The mint workflow now calls it instead of posting a capped markdown comment itself.
This removes `scripts/ci/mint_diff.py`.
Adds `--upload <prefix>` and `--comment-output <path>` to `ref test-cases diff`.
The report is pushed to a public object store and the comment links into it,
so the comment is one table row per changed case rather than the whole diff.

- Adds `ReportStore` in core, a named-key sibling of the content-addressed `NativeStore`.
- Keys are validated as safe relative paths, and every remote upload sets a content type.
- Adds `ReportStoreConfig`, so the store is routed by `REF_REPORT_STORE_*` and its credentials
  are read from the environment at upload time only.
- Reports live in their own bucket because an R2 token cannot be scoped to a prefix.
- `build_report_store` now validates its own routing, so a blank endpoint or bucket names
  `REF_REPORT_STORE_*` rather than the native store's variables.
- The comment table is driven off the report's kinds, the way the index page already is,
  so a new file kind gets a column instead of being dropped.
- One environment builder serves both templates, since only escaping differs between them.
`preflight` only wrapped botocore's `ClientError`, so `NoCredentialsError` (raised when neither
the env vars, the profile nor boto3's default chain resolve anything) escaped the CLI's handler.
A CI run with an unset secret is the likeliest way this fails, so it now gets the same
operator-facing message as a rejected credential.
Matches the `ref-baselines-` prefix the existing `ref-baselines-public` bucket uses.
- Key validation now delegates to `safe_path`, the containment primitive the rest of the
  regression package already uses, so a symlink escape and a NUL byte are caught too.
- One Jinja environment again. Escaping keys off the template name, so the markdown comment
  renders unescaped without a second environment that HTML could reach by mistake.
- A bad `--upload` prefix now reports the prefix rather than advising a credential check.
A case label outside the key character class would have escaped the handler once the upload had
started. It exits 1 with the rest now. The `--upload` prefix still gets its own message,
because that one is a typed argument rather than something derived from the repository.
Pins the messages an operator sees when the local root is unwritable, when the bucket denies
the request, and when the CLI cannot use the store at all.
The two stores differ only in how a key is chosen: the native store derives it from the content,
the report store is handed one. Everything under that was duplicated, so this pulls it into
`store.py` and leaves each class holding just its addressing rules.

- `_preflight_store` replaces two near-identical `preflight` bodies.
- `_write_config_from_env` replaces the credential lookup in both factories.
- `S3WriteConfig` carries the env prefix it was resolved from, so it names the right variable
  in an error and the report factory no longer needs its own pre-checks.
- `_StoreConfigProtocol` replaces the two copies, with the native one adding `cache_dir`.

The native store picks up the report store's `BotoCoreError` handling as a result,
so a missing credential there reports a message instead of a traceback.
chore(deps): bump mistune from 3.3.0 to 3.3.3
feat: publish the baseline diff report and write the PR comment
ci: post baseline diff reports from a dedicated workflow
Ingest obs4REF under its own source type
* origin/main: (60 commits)
  refactor: share one transport between the native and report stores
  test: cover the report store's error paths
  fix: keep an unexpected key from tracebacking mid-upload
  refactor: tidy the report upload after review
  fix: name the reports bucket ref-baselines-reports
  fix: report an absent credential instead of a traceback
  fix: address the review of the report upload
  feat: publish the baseline diff report and write the PR comment
  chore: clean up
  ci: post baseline diff reports from a dedicated workflow
  fix: take the newest version when obs4MIPs and obs4REF both hold a dataset
  fix: measure netcdf differences without losing precision or missingness
  feat: emphasise the netcdf values that actually moved
  feat: show the whole netcdf header, with a side by side view
  chore: rename the changelog fragment to the PR number
  refactor: tighten the netcdf analysis after the cleanup reviews
  feat: add netcdf stats to the baseline diff report
  chore: add a changelog fragment for the mypy 2 bump
  docs: correct the stale references left by the refactors
  chore(deps): raise the mypy requirement to match the lockfile
  ...
@lewisjared
lewisjared deployed to baseline-reports September 4, 2026 03:57 — with GitHub Actions Active
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Regression baseline diff

9 test case(s) changed against origin/main. Full report

case versions image text netcdf other
esmvaltool/ozone-annual-cycle/cmip6 v2 -> v4 ~1 ~1 ~3 none view
esmvaltool/ozone-annual-cycle/cmip7 v2 -> v4 ~1 ~1 ~3 none view
esmvaltool/ozone-lat-time/cmip6 v2 -> v4 ~1 ~1 ~3 none view
esmvaltool/ozone-lat-time/cmip7 v2 -> v4 ~1 ~1 ~3 none view
esmvaltool/ozone-nh-mar/cmip6 v2 -> v4 ~1 ~2 ~1 none view
esmvaltool/ozone-nh-mar/cmip7 v2 -> v4 ~1 ~2 ~1 none view
esmvaltool/ozone-sh-oct/cmip6 v2 -> v4 ~1 none ~1 none view
esmvaltool/ozone-sh-oct/cmip7 v2 -> v4 ~1 ~2 ~1 none view
esmvaltool/ozone-zonal/cmip6 v3 -> v5 ~1 ~1 ~3 none view

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants