Skip to content

Mint PMP native regression baselines#762

Merged
lewisjared merged 14 commits into
mainfrom
feat/pmp-baselines-remint
Jun 29, 2026
Merged

Mint PMP native regression baselines#762
lewisjared merged 14 commits into
mainfrom
feat/pmp-baselines-remint

Conversation

@lewisjared

@lewisjared lewisjared commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Mints the PMP native regression baselines on top of the merged baseline machinery (#761), using the native store.

What

All 21 PMP test cases minted at test_case_version=1, committed per-diagnostic:

Diagnostic Cases
annual-cycle cmip6-ts, cmip6-pr, cmip7-ts
enso_proc cmip6, cmip7
enso_tel cmip6, cmip7
extratropical-modes-of-variability-{nam,nao,npgo,npo,pdo,pna,sam} cmip6, cmip7 each

Each case holds only the trackable set: catalog.yaml, manifest.json, regression/{diagnostic,output,series}.json (each terminated with a trailing newline, per the canonicaliser change in #761). Native blobs are uploaded to the ref-baselines-public store.

Verification

ref test-cases replay (materialise native from the store into a fresh slot, rebuild the bundle, compare to committed) matched the committed bundle for all three distinct PMP reconstruction paths:

  • annual_cycle.pyannual-cycle/cmip6-ts, annual-cycle/cmip6-pr
  • enso.pyenso_proc/cmip6
  • variability_modes.pyextratropical-modes-of-variability-pdo/cmip6

pre-commit passes over the range (data-only; JSON/YAML/whitespace hooks).

Notes

Summary by CodeRabbit

  • New Features

    • Added native regression baselines and test fixtures for multiple climate diagnostics across CMIP6 and CMIP7.
    • Expanded coverage for annual cycle, ENSO process/teleconnection, and extratropical variability modes.
  • Tests

    • Added catalog, manifest, diagnostic, output, and series fixtures to support the new baseline checks.
    • Included expected artefacts and metadata for plots and data outputs across several test cases.

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Native regression baselines are minted for PMP diagnostics across CMIP6 and CMIP7 test cases. Each test case receives a catalog.yaml, manifest.json, and regression fixture files (diagnostic.json, output.json, series.json) covering annual cycle (pr/ts), ENSO process metrics, ENSO teleconnection metrics, and extratropical modes of variability (NAM, NAO, NPGO, NPO, PDO, PNA, SAM). A changelog entry is also added.

Changes

PMP Native Regression Baselines

Layer / File(s) Summary
Annual-cycle baselines (cmip6-pr, cmip6-ts, cmip7-ts)
packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-pr/*, packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-ts/*, packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip7-ts/*
Adds catalog.yaml, manifest.json, and regression diagnostic.json/output.json/series.json for three annual-cycle test cases: CMIP6 precipitation (GPCP-3-3 obs), CMIP6 surface temperature (ERA-5 obs), and CMIP7 surface temperature (ERA-5 obs). Diagnostic fixtures define DIMENSIONS, PROVENANCE, and RESULTS with per-season metrics for ACCESS-ESM1-5/r1i1p1f1 historical.
ENSO process baselines (cmip6, cmip7)
packages/climate-ref-pmp/tests/test-data/enso_proc/cmip6/*, packages/climate-ref-pmp/tests/test-data/enso_proc/cmip7/*
Adds catalog.yaml (obs4mips and model datasets for heat flux, radiation, wind stress, ts variables including fx entries), manifest.json, and regression fixtures for ENSO process metrics. Output fixtures enumerate NetCDF data files and diagnostic divedown PNGs with provenance metadata.
ENSO teleconnection baselines (cmip6, cmip7)
packages/climate-ref-pmp/tests/test-data/enso_tel/cmip6/*, packages/climate-ref-pmp/tests/test-data/enso_tel/cmip7/*
Adds catalog, manifest, and regression fixtures for ENSO teleconnection metrics. CMIP7 catalog includes branded variable names and finalised: false flags. Diagnostic fixtures record per-reference-dataset metric values (e.g., EnsoAmpl, EnsoPrMapDjfCorr, EnsoSeasonality, EnsoSstLonRmse) across HadISST, Tropflux, and GPCP reference datasets.
Extratropical modes baselines: NAM, NAO, SAM, PNA, PDO (single-EOF modes)
packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-{nam,nao,sam,pna,pdo}/cmip{6,7}/*
Adds catalog, manifest, and regression fixtures for single-EOF extratropical modes. Diagnostic fixtures define per-season (DJF/JJA/MAM/SON) cbf and eof1 metric blocks (bias, cor, frac, rms, rmsc, stdv variants) and target_model_eofs attributes. Output fixtures enumerate seasonal NetCDF and PNG outputs including teleconnection and comparison plot variants.
Extratropical modes baselines: NPGO, NPO (multi-EOF modes)
packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-{npgo,npo}/cmip{6,7}/*
Adds catalog, manifest, and regression fixtures for multi-EOF extratropical modes. Diagnostic fixtures include eof2 method blocks in addition to cbf and eof1. NPO manifests are larger, covering EOF1 and EOF2 seasonal assets plus teleconnection and observation counterparts.
Changelog
changelog/762.trivial.md
Adds a trivial changelog entry noting that native regression baselines were minted for PMP diagnostics across CMIP6 and CMIP7.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the change and verification, but it does not follow the required template or include the checklist. Add a ## Description section and the checklist items for Tests added, Documentation added (where applicable), and Changelog item added to changelog/.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title concisely describes minting PMP native regression baselines, which matches the main changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/pmp-baselines-remint

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

@codecov

codecov Bot commented Jun 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
core 92.60% <ø> (ø)
providers 85.47% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@lewisjared lewisjared force-pushed the feat/pmp-baselines-remint branch from 8f02d88 to 93a8bda Compare June 29, 2026 02:21
Base automatically changed from feat/regression-machinery to main June 29, 2026 03:29

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ca3d50d9-93eb-4dfa-bf56-e56f12c22ed1

📥 Commits

Reviewing files that changed from the base of the PR and between 72f0888 and 96e6376.

📒 Files selected for processing (106)
  • changelog/762.trivial.md
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-pr/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-pr/manifest.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-pr/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-pr/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-pr/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-ts/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-ts/manifest.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-ts/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-ts/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip6-ts/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip7-ts/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip7-ts/manifest.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip7-ts/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip7-ts/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/annual-cycle/cmip7-ts/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/enso_proc/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/enso_tel/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nao/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npgo/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-npo/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pdo/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-pna/cmip7/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip6/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip6/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip6/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip6/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip6/regression/series.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip7/catalog.yaml
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip7/manifest.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip7/regression/diagnostic.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip7/regression/output.json
  • packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-sam/cmip7/regression/series.json

Comment on lines +2 to +17
"DIMENSIONS": {
"experiment_id": {
"historical": {}
},
"grid_label": {
"gn": {}
},
"json_structure": [
"mip_id",
"source_id",
"member_id",
"grid_label",
"experiment_id",
"metric",
"reference_datasets"
],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Align DIMENSIONS.json_structure with the stored RESULTS tree.

The current schema names source_id/member_id/experiment_id/variable_id/reference_source_id/region/statistic/season, but the payload below is actually nested as cmip6/ACCESS-ESM1-5/r1i1p1f1/gn/historical/Bias*/<ref>. If replay or validation uses json_structure, this fixture is internally inconsistent.

Comment on lines +47 to +53
"PROVENANCE": {
"commandLine": "/home/jared/code/climate-ref/climate-ref/packages/climate-ref-pmp/src/climate_ref_pmp/drivers/enso_driver.py --metrics_collection ENSO_tel --experiment_id historical --input_json_path <OUTPUT_DIR>/input_ENSO_tel_ACCESS-ESM1-5_historical_r1i1p1f1.json --output_directory <OUTPUT_DIR>",
"conda": {
"Platform": "linux-64"
},
"date": "<DATE>",
"openGL": {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Normalise the provenance command line.

PROVENANCE.commandLine still embeds /home/jared/..., which leaks a machine-specific path into committed fixture data and makes the artefact churn across environments. Replace it with a placeholder or relative invocation before merging.

Comment on lines +8 to +217
"native": {
"EG_Spec_North_test_NAM_DJF_20CR_1900-2005.png": {
"sha256": "14de2e777b2c8b9c46c9743c6e8ae3273612e1c95aab68d05ab59d6f550f9e7d",
"size": 30110
},
"EG_Spec_North_test_NAM_JJA_20CR_1900-2005.png": {
"sha256": "23984abab3c407350132b176b9572a00c0502af34abd0fd9387a451ddaa54512",
"size": 32202
},
"EG_Spec_North_test_NAM_MAM_20CR_1900-2005.png": {
"sha256": "9a4295ea029e34ff3976f4306f59dc225dcef394ca2d953ca7288de45f29e9b8",
"size": 29537
},
"EG_Spec_North_test_NAM_SON_20CR_1900-2005.png": {
"sha256": "605b2308702663997b957aeac55ff490ce107d2e1b2b29fb12fa76379b583eac",
"size": 31388
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.nc": {
"sha256": "a6bcb2bb3d3b5ae69feb2071bd906c447ee10fa36ccf922090167c427433ce0b",
"size": 690880
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.png": {
"sha256": "cb452f2e35a36f6b56b94af9d529519d36774e577ff8eab2ef3ade7a0a0d40e1",
"size": 121470
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.nc": {
"sha256": "c106c6c8cf227708a0c7d926a4ba0a12c40dc465c96d708e498ec386fc8357b4",
"size": 690631
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.png": {
"sha256": "6f9aa237135e047a2aa2c0eac04094cc499fd0b8d5e92d5929a4b964e2ea9018",
"size": 121441
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_compare_obs.png": {
"sha256": "316ba6e920e4a78040900b38be66f7a928d1984ff255d50753b624a5d70d2916",
"size": 223646
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_teleconnection.png": {
"sha256": "806bc276a0ae4bfbe3cbc827697806db8e3dac752d52d29671e29ef95aba1661",
"size": 121905
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_eof1_compare_obs.png": {
"sha256": "e5e71187f7672971ade170d4db1a2a585c9471d99d3a4961d5c963f07f5af2ac",
"size": 224649
},
"NAM_psl_EOF1_DJF_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_teleconnection.png": {
"sha256": "35d73993996f22e6b3cb7e720c26f580b752efd86529551dca6571a6692ad316",
"size": 121134
},
"NAM_psl_EOF1_DJF_obs_1900-2005.nc": {
"sha256": "65946b302c5875aad183063029d5c7e2ea9938679e139f6a49b2013e3bb05a87",
"size": 415707
},
"NAM_psl_EOF1_DJF_obs_1900-2005.png": {
"sha256": "b19c8d77b157bcb9a444d424d7e9b01ea2b21329d917970d81fcfa03630c1f6b",
"size": 117258
},
"NAM_psl_EOF1_DJF_obs_1900-2005_teleconnection.png": {
"sha256": "9af3e117e5bb2b920d84781d761451dc1e6384f4d1850c062290975632ae5169",
"size": 115346
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.nc": {
"sha256": "dbe21c9b2a1c2a4303592d89ccdd222ac73121c791133625ab371e1380d1c2df",
"size": 690880
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.png": {
"sha256": "f65b531cf12c30cfedf8f9dc2762d8531607273fba9d2f7d1e4615911c00877b",
"size": 119849
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.nc": {
"sha256": "f20c8daf43645f2839817781b1a5650923995da4d49a024a52985523918d3b83",
"size": 690631
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.png": {
"sha256": "2faae4356482b63a42cbea91a854ae77a5fa4162dc9f730293e69c8927682638",
"size": 119541
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_compare_obs.png": {
"sha256": "a117bf3cdfd754448aee2a2fd3ca38f22e476c611afae6dccd150d9d6dbfd2ce",
"size": 221753
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_teleconnection.png": {
"sha256": "b20e445bcd481652f3e09812494c68090d8cd2f1bdf3d2be1d60f18c158cb161",
"size": 118910
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_eof1_compare_obs.png": {
"sha256": "d4a7701e00258160e91d1a823fc7ae4cf5c6f8b68f9e031645b2c3f87a12c171",
"size": 224259
},
"NAM_psl_EOF1_JJA_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_teleconnection.png": {
"sha256": "d1bf523210010e093aa212ead0281a2162ff3834d1874b7e058903f8d93cbba2",
"size": 119455
},
"NAM_psl_EOF1_JJA_obs_1900-2005.nc": {
"sha256": "ca02af91c39579a3168d16ef59f41d3858bb53a4f09ea942c0c90b90484c01ec",
"size": 415707
},
"NAM_psl_EOF1_JJA_obs_1900-2005.png": {
"sha256": "aceb834e7ee004da87e7fd8c4fb6dfd0762cd792e917a1b7cad4f5d80f49ac2a",
"size": 115500
},
"NAM_psl_EOF1_JJA_obs_1900-2005_teleconnection.png": {
"sha256": "dd3ea31147a993cf7148c026bd402272f874bce1088d35054da1c9f14beece82",
"size": 115193
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.nc": {
"sha256": "6d120b75efa9292e72bb28564f74452e43593df086928670f979b103503fb529",
"size": 690880
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.png": {
"sha256": "bf1770aa68853b1a0117a95772965c8cc819405c7857bdad92fc40a8b61c37c7",
"size": 121158
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.nc": {
"sha256": "fbe63b1d6ed0b90044ae7f6a651b3291d2cf0aacb69df330e5b7a00e71918839",
"size": 690631
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.png": {
"sha256": "11547faec7503e3aa2b9cdfa277fe627abf2b5676ed878e81df26daf0c9a5385",
"size": 120884
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_compare_obs.png": {
"sha256": "c28596c5b83581ebdd90134198337575594c2673e3b20ea4599c5a2edb887577",
"size": 223869
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_teleconnection.png": {
"sha256": "322e2c4943de66f85915090ae502dd466b0d97ab796710e4c3db2d1e9bc3d3d5",
"size": 119295
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_eof1_compare_obs.png": {
"sha256": "8d9f6052c7d22ef892c7ac97c07e790fb33eef3eda9503c59a7379d3ae7b39db",
"size": 225524
},
"NAM_psl_EOF1_MAM_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_teleconnection.png": {
"sha256": "f8cbbc3d564bf0b0762e6798c993c9a135ca2c366fbf05839353c9ecf8ddb315",
"size": 119712
},
"NAM_psl_EOF1_MAM_obs_1900-2005.nc": {
"sha256": "b3093a2b5c0784e4db16fe40f26bdcd05e3dceef58e907351a6f8c20dfe24d3b",
"size": 415707
},
"NAM_psl_EOF1_MAM_obs_1900-2005.png": {
"sha256": "bc9b13c9e0eb10c46f08f509c59a58cfbfaac94f5acd062504582de92db9e7e5",
"size": 116865
},
"NAM_psl_EOF1_MAM_obs_1900-2005_teleconnection.png": {
"sha256": "e3f14e8add03f1694adafaad625326dbe46e30039fe07e2627ebe9299a23cb00",
"size": 115176
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.nc": {
"sha256": "9664f4371f4251691392f31b72329f99b8d608996bab877917320a67702bb391",
"size": 690880
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005.png": {
"sha256": "167aaa34fe467e6b4ed85f727f0bb40cb41dd45e123d8705049992356ab262dd",
"size": 121253
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.nc": {
"sha256": "3bd07f95070dc8c524495aaa2b20b1de79854a8f0095586a3f7d898d86bb5af2",
"size": 690631
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf.png": {
"sha256": "e823ea4dd0db5a7f48207c3deccf0168bcf2e1e40668dca7c6450f2ceddfe1ff",
"size": 120511
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_compare_obs.png": {
"sha256": "44310655b94116498cb53f5f6142df7a495422bbbe9329d4ac63baf4d957eb74",
"size": 224460
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_cbf_teleconnection.png": {
"sha256": "6563a866e22790f11029ffbbbd0313c93e7976ee87f182e4b162d170ea43a638",
"size": 120766
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_eof1_compare_obs.png": {
"sha256": "d1049d8b3ab818a7713428e2be756d9b4534f336f91336dd00f9568262b18ad9",
"size": 224233
},
"NAM_psl_EOF1_SON_cmip7_ACCESS-ESM1-5_historical_r1i1p1f1_mo_atm_1900-2005_teleconnection.png": {
"sha256": "f0f5d3175bd624b723eac331ee40f26f7a2b3e28baa9e077cb78021d38f5526c",
"size": 119399
},
"NAM_psl_EOF1_SON_obs_1900-2005.nc": {
"sha256": "5584e261cda60228a47ddf27be02554b9cb33b938ce313a53a474c8f54091af0",
"size": 415707
},
"NAM_psl_EOF1_SON_obs_1900-2005.png": {
"sha256": "38d311233233a8c100e987d9bdfc47d8e0c8050c717228fa6c7ef26ff4b84373",
"size": 116715
},
"NAM_psl_EOF1_SON_obs_1900-2005_teleconnection.png": {
"sha256": "506be9514bdfa0b17bb3e58b2b423f6a39c0a0532bd0d2a18f280addad5435fe",
"size": 115635
},
"diagnostic.json": {
"sha256": "c6dd19d5fe552c14fc455bf6d5a91ba832df8edb3de476325b45c4bcd94f794c",
"size": 8609
},
"output.json": {
"sha256": "45aab7024729833997d492d80aee9a760b6e40d8f12e7ea6ac909b8b789cc923",
"size": 14169
},
"series.json": {
"sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
"size": 2
},
"var_mode_NAM_EOF1_stat_cmip7_historical_mo_atm_ACCESS-ESM1-5_r1i1p1f1_1900-2005_cmec.json": {
"sha256": "3d63c34a5dc57d5a4345091b2007e04bc529c7312baf36b0bd7ded0797933e3b",
"size": 12335
}
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

python - <<'PY'
import json
from pathlib import Path

root = Path("packages/climate-ref-pmp/tests/test-data")
for output_path in root.glob("extratropical-modes-of-variability-*/cmip*/regression/output.json"):
    manifest_path = output_path.parent.parent / "manifest.json"
    output = json.loads(output_path.read_text())
    manifest = json.loads(manifest_path.read_text())
    native = set(manifest.get("native", {}).keys())

    refs = []
    if output.get("index"):
        refs.append(("index", output["index"]))
    log = output.get("provenance", {}).get("log")
    if log:
        refs.append(("provenance.log", log))

    missing = [(kind, name) for kind, name in refs if name not in native]
    if missing:
        print(output_path)
        for kind, name in missing:
            print(f"  missing native entry for {kind}: {name}")
PY

Repository: Climate-REF/climate-ref

Length of output: 3145


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

paths = [
    Path("packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/manifest.json"),
    Path("packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/regression/output.json"),
    Path("packages/climate-ref-pmp/tests/test-data/extratropical-modes-of-variability-nam/cmip7/catalog.yaml"),
]

for p in paths:
    print(f"=== {p} ===")
    if p.suffix == ".json":
        data = json.loads(p.read_text())
        if p.name == "manifest.json":
            print("top-level keys:", list(data.keys())[:20])
            print("native has index.html:", "index.html" in data.get("native", {}))
            print("native has cmec_output.log:", "cmec_output.log" in data.get("native", {}))
        elif p.name == "output.json":
            print("index:", data.get("index"))
            print("provenance.log:", data.get("provenance", {}).get("log"))
            print("top-level keys:", list(data.keys()))
    else:
        print(p.read_text().splitlines()[:40])
PY

Repository: Climate-REF/climate-ref

Length of output: 1974


Keep manifest.json and output.json in syncoutput.json still references index.html and cmec_output.log, but neither artefact is listed under native here. Add them to native, or remove those references from output.json.

@lewisjared lewisjared merged commit e5fdeb6 into main Jun 29, 2026
24 checks passed
@lewisjared lewisjared deleted the feat/pmp-baselines-remint branch June 29, 2026 03:52
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.

1 participant