Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: EOPF-Explorer/data-model
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.10.0
Choose a base ref
...
head repository: EOPF-Explorer/data-model
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.10.1
Choose a head ref
  • 6 commits
  • 41 files changed
  • 5 contributors

Commits on Jun 9, 2026

  1. enh: deprecate v0, fix fill values and sanitize attributes (#172)

    * fix(converter): align convert layout to S2, strip _eopf_attrs, fix _FillValue (#171)
    
    - Remove TMS layout and /0 /1 /2 numeric overview groups from the general
      'convert' CLI; produce S2-style sibling r{2**level} overviews instead.
      'convert-s2-optimized' continues to emit the same layout.
    - Drop the '--tile-width' CLI option.
    - Sanitize array attrs in all converters: strip stale '_eopf_attrs' and
      source-only '_FillValue' / 'dtype' / 'valid_min' / 'valid_max' on decoded
      floats; rewrite 'units: digital_counts' -> 'units: 1'. The sanitizer now
      returns a new dict and callers reassign 'attrs', so stale keys are
      actually removed (a previous '.update()' pattern left them in place).
    - Sanitize coord attrs too (datetime coords in /conditions/meteorology
      were leaking '_eopf_decode_datetime64' via '_eopf_attrs').
    - Set '_FillValue' properly for float measurements so xarray's CF
      encoder produces the base64-NaN representation needed for
      'use_zarr_fill_value_as_mask=True' round-trip (xarray#11345). Fixes #171.
    - Remove dead 'utils.encode_cf_fill_value' (no callers).
    - Tests: open each r{N} multiscale level separately; migrate
      'test_multiscales_round_trip' from deprecated tms.Multiscales to
      zcm.Multiscales (with tuplify_json to handle extra='allow' fields).
    - Regenerate snapshot fixtures; verified 0 '_eopf_attrs',
      'tile_matrix*', or 'digital_counts' markers across S2A/S2B/S2C.
    
    * test: add guardrails for converter output attrs (#171)
    
    Walks the snapshotted GroupSpec JSON fixtures and asserts:
    - no '_eopf_attrs' anywhere;
    - no 'tile_matrix*' markers (TMS removal);
    - no 'units: digital_counts' on float arrays (decoded scale/offset);
    - every float array under '/measurements/' has '_FillValue' set
      (required for CF NaN-mask round-trip, xarray#11345).
    
    * docs: deprecate v0 references, document r{N} overview layout (#171)
    
    - Drop 'tile_width' parameter from API examples (option removed from CLI/API).
    - Replace '/measurements/r10m/{0,1,2}' nested-pyramid examples with the
      current flat 'r{2**level}' sibling-group layout.
    - Remove the V0 vs V1 split in converter.md / examples.md / quickstart.md;
      the general 'convert' command now produces the same flat layout as
      'convert-s2-optimized'. The S2-optimized section is reframed as a
      feature description rather than a 'V1 vs V0' comparison.
    - Update architecture.md multiscales snippet to the new model
      ('layout' / 'asset' / 'derived_from' / 'transform').
    - Update faq.md inspection snippet to walk the new layout.
    
    * refactor: clean up code formatting and enhance attribute handling in geozarr conversion
    
    * fix(cli-e2e): drop deprecated --tile-width flag from tests and example
    
    * refactor: remove deprecated v0 layout, sanitize attributes, and fix _FillValue handling
    
    * test: add _FillValue masking roundtrip test (#172)
    
    Addresses @vincentsarago's PR review: assert float arrays written with
    the converter's _FillValue convention round-trip through xarray's
    use_zarr_fill_value_as_mask=True so NaN cells come back masked.
    
    * test: drive _FillValue masking test through create_geozarr_dataset (#172)
    
    Replace the standalone xarray write with a real converter run: build a
    small float DataTree, invoke create_geozarr_dataset, then reopen the
    output with use_zarr_fill_value_as_mask=True and assert masking on the
    nodata patch. Exercises the converter's _FillValue + encoding path
    end-to-end, per @vincentsarago's review.
    
    * fix: green CI for #172 — S2 convert flat layout + idna CVE (#177)
    
    * fix(security): bump idna 3.13 -> 3.17 to clear CVE-2026-45409
    
    pip-audit in the Security Audit workflow blocks on idna 3.13
    (CVE-2026-45409, incomplete fix of CVE-2024-3651; fixed in 3.15).
    Bump the transitive pin via uv lock. pip-audit now reports no
    known vulnerabilities.
    
    Co-Authored-By: Claude Opus 4.8 <[email protected]>
    
    * fix(cli): route Sentinel-2 convert through the optimized flat layout
    
    Generic `convert` emitted GeoZarr-0.4 multiscales with native data at the
    group root and overviews as nested r{2**N} sub-groups. That tree cannot be
    opened by xr.open_datatree (an overview child's x/y conflict with the
    parent's inherited x/y), so the `info` and `validate` CLI commands crashed
    on the converter's own Sentinel-2 output.
    
    Detect Sentinel-2 inputs and delegate to the existing, tested
    convert_s2_optimized path, which emits flat sibling r{N}m levels (the layout
    PR #172 documents). Non-S2 inputs keep the generic create_geozarr_dataset
    path. Detection is best-effort and never aborts conversion.
    
    Regenerate the geozarr_examples structure snapshots to the flat layout.
    
    Co-Authored-By: Claude Opus 4.8 <[email protected]>
    
    * test: make CLI e2e assertions debuggable and fix multiscale round-trip
    
    - The CLI logs errors to stdout via structlog; assert on stdout+stderr in
      test_cli_e2e so a non-zero exit shows the actual error instead of an
      empty stderr.
    - test_multiscale_attrs_round_trip tuplified only one side of its equality,
      so flat-layout level groups carrying list-valued attrs (e.g. spatial:bbox)
      broke a check that is only about JSON list/tuple normalisation. Tuplify
      both sides; the model still round-trips losslessly.
    
    Co-Authored-By: Claude Opus 4.8 <[email protected]>
    
    ---------
    
    Co-authored-by: Claude Opus 4.8 <[email protected]>
    
    ---------
    
    Co-authored-by: Loïc Houpert <[email protected]>
    Co-authored-by: Claude Opus 4.8 <[email protected]>
    3 people authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    4bd8cc2 View commit details
    Browse the repository at this point in the history
  2. ci(deps): bump the actions group across 1 directory with 8 updates (#167

    )
    
    Bumps the actions group with 8 updates in the / directory:
    
    | Package | From | To |
    | --- | --- | --- |
    | [actions/checkout](https://github.com/actions/checkout) | `5.0.1` | `6.0.2` |
    | [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `7.6.0` | `8.1.0` |
    | [actions/cache](https://github.com/actions/cache) | `5.0.4` | `5.0.5` |
    | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.5.3` | `6.0.0` |
    | [googleapis/release-please-action](https://github.com/googleapis/release-please-action) | `4.4.0` | `5.0.0` |
    | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `6.0.0` | `7.0.1` |
    | [actions/download-artifact](https://github.com/actions/download-artifact) | `7.0.0` | `8.0.1` |
    | [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) | `1.13.0` | `1.14.0` |
    
    
    
    Updates `actions/checkout` from 5.0.1 to 6.0.2
    - [Release notes](https://github.com/actions/checkout/releases)
    - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
    - [Commits](actions/checkout@93cb6ef...de0fac2)
    
    Updates `astral-sh/setup-uv` from 7.6.0 to 8.1.0
    - [Release notes](https://github.com/astral-sh/setup-uv/releases)
    - [Commits](astral-sh/setup-uv@37802ad...0880764)
    
    Updates `actions/cache` from 5.0.4 to 5.0.5
    - [Release notes](https://github.com/actions/cache/releases)
    - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
    - [Commits](actions/cache@6682284...27d5ce7)
    
    Updates `codecov/codecov-action` from 5.5.3 to 6.0.0
    - [Release notes](https://github.com/codecov/codecov-action/releases)
    - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
    - [Commits](codecov/codecov-action@1af5884...57e3a13)
    
    Updates `googleapis/release-please-action` from 4.4.0 to 5.0.0
    - [Release notes](https://github.com/googleapis/release-please-action/releases)
    - [Changelog](https://github.com/googleapis/release-please-action/blob/main/CHANGELOG.md)
    - [Commits](googleapis/release-please-action@16a9c90...45996ed)
    
    Updates `actions/upload-artifact` from 6.0.0 to 7.0.1
    - [Release notes](https://github.com/actions/upload-artifact/releases)
    - [Commits](actions/upload-artifact@b7c566a...043fb46)
    
    Updates `actions/download-artifact` from 7.0.0 to 8.0.1
    - [Release notes](https://github.com/actions/download-artifact/releases)
    - [Commits](actions/download-artifact@37930b1...3e5f45b)
    
    Updates `pypa/gh-action-pypi-publish` from 1.13.0 to 1.14.0
    - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
    - [Commits](pypa/gh-action-pypi-publish@ed0c539...cef2210)
    
    ---
    updated-dependencies:
    - dependency-name: actions/cache
      dependency-version: 5.0.5
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: actions
    - dependency-name: actions/checkout
      dependency-version: 6.0.2
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: actions
    - dependency-name: actions/download-artifact
      dependency-version: 8.0.1
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: actions
    - dependency-name: actions/upload-artifact
      dependency-version: 7.0.1
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: actions
    - dependency-name: astral-sh/setup-uv
      dependency-version: 8.1.0
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: actions
    - dependency-name: codecov/codecov-action
      dependency-version: 6.0.0
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: actions
    - dependency-name: googleapis/release-please-action
      dependency-version: 5.0.0
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: actions
    - dependency-name: pypa/gh-action-pypi-publish
      dependency-version: 1.14.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: actions
    ...
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    3e4e65e View commit details
    Browse the repository at this point in the history
  3. deps(deps-dev): bump mypy from 1.20.2 to 2.1.0 (#170)

    Bumps [mypy](https://github.com/python/mypy) from 1.20.2 to 2.1.0.
    - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
    - [Commits](python/mypy@v1.20.2...v2.1.0)
    
    ---
    updated-dependencies:
    - dependency-name: mypy
      dependency-version: 2.1.0
      dependency-type: direct:development
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    6de3a01 View commit details
    Browse the repository at this point in the history
  4. deps(deps): bump the uv-minor-patch group across 1 directory with 4 u…

    …pdates (#174)
    
    Bumps the uv-minor-patch group with 4 updates in the / directory: [pydantic](https://github.com/pydantic/pydantic), [numpy](https://github.com/numpy/numpy), [cf-xarray](https://github.com/xarray-contrib/cf-xarray) and [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions).
    
    
    Updates `pydantic` from 2.13.3 to 2.13.4
    - [Release notes](https://github.com/pydantic/pydantic/releases)
    - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
    - [Commits](pydantic/pydantic@v2.13.3...v2.13.4)
    
    Updates `numpy` from 2.4.4 to 2.4.6
    - [Release notes](https://github.com/numpy/numpy/releases)
    - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
    - [Commits](numpy/numpy@v2.4.4...v2.4.6)
    
    Updates `cf-xarray` from 0.11.0 to 0.11.1
    - [Release notes](https://github.com/xarray-contrib/cf-xarray/releases)
    - [Commits](xarray-contrib/cf-xarray@v0.11.0...v0.11.1)
    
    Updates `pymdown-extensions` from 10.21.2 to 10.21.3
    - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
    - [Commits](facelessuser/pymdown-extensions@10.21.2...10.21.3)
    
    ---
    updated-dependencies:
    - dependency-name: pydantic
      dependency-version: 2.13.4
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: uv-minor-patch
    - dependency-name: numpy
      dependency-version: 2.4.6
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: uv-minor-patch
    - dependency-name: cf-xarray
      dependency-version: 0.11.1
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: uv-minor-patch
    - dependency-name: pymdown-extensions
      dependency-version: 10.21.3
      dependency-type: direct:development
      update-type: version-update:semver-patch
      dependency-group: uv-minor-patch
    ...
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    c67bcec View commit details
    Browse the repository at this point in the history
  5. fix(deps): bump aiohttp to >=3.14.0 to resolve CVE-2026-34993 and CVE…

    …-2026-47265 (#182)
    
    The Security Audit job's pip-audit step flagged aiohttp 3.13.5 for
    CVE-2026-34993 and CVE-2026-47265 (both fixed in 3.14.0). Raise the
    floor and refresh the lock to 3.14.1.
    
    Co-authored-by: Claude Opus 4.8 <[email protected]>
    lhoupert and claude authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    2ea503b View commit details
    Browse the repository at this point in the history
  6. chore: release 0.10.1 (#181)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    49f18e7 View commit details
    Browse the repository at this point in the history
Loading