From dc350161c6a860f7581dc2714c0a66a517cca6ac Mon Sep 17 00:00:00 2001 From: gerchowl Date: Thu, 30 Apr 2026 17:03:01 +0200 Subject: [PATCH 1/2] bugfix(ci): bump live-test tag from v2026.04.0 to v2026.04.2 (#249 follow-up) The ci.yml `client-tests` job was passing `--tag=v2026.04.0` to the dagger `test-clients` fn, and the dagger client-test fns themselves defaulted to `v2026.04.0` per signature. Both pre-date the v2026.04.2 release-cut. v2026.04.0 doesn't exist on `gerchowl/mat-vis` (refs are just `[v2026.04.2, main]` after the v2026.04.1 sunset cleanup), so the client tests' live blocks fail with `Failed to fetch .../resolve/v2026.04.0/release-manifest.json`. Surfaced on PR #249's CI run (run 25172585927) where the new manifest-driven coverage suite fired the live blocks for the first time and exposed the stale tag. Bumps both the workflow invocation and all five dagger fn defaults (test_client_python/_js/_shell/_rust + test_clients) to v2026.04.2. Future bumps will need to update both surfaces in lock-step until we add a CalVer-injection mechanism (worth filing as a follow-up). --- .dagger/src/mat_vis_ci/main.py | 10 +++++----- .github/workflows/ci.yml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.dagger/src/mat_vis_ci/main.py b/.dagger/src/mat_vis_ci/main.py index 6e0f4216..5698b2ea 100644 --- a/.dagger/src/mat_vis_ci/main.py +++ b/.dagger/src/mat_vis_ci/main.py @@ -272,7 +272,7 @@ async def test_all( async def test_client_python( self, src: Annotated[dagger.Directory, Doc("Project root directory")] | None = None, - tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.0", + tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.2", live: Annotated[ bool, Doc("Set MAT_VIS_LIVE_TESTS=1 + MAT_VIS_LIVE_TAG=tag to enable @live tests (#248)"), @@ -300,7 +300,7 @@ async def test_client_python( async def test_client_js( self, src: Annotated[dagger.Directory, Doc("Project root directory")] | None = None, - tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.0", + tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.2", live: Annotated[ bool, Doc("Set MAT_VIS_LIVE_TESTS=1 + MAT_VIS_LIVE_TAG=tag to enable live tests (#248)"), @@ -325,7 +325,7 @@ async def test_client_js( async def test_client_shell( self, src: Annotated[dagger.Directory, Doc("Project root directory")] | None = None, - tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.0", + tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.2", live: Annotated[ bool, Doc("Set MAT_VIS_LIVE_TESTS=1 + MAT_VIS_LIVE_TAG=tag to enable live tests (#248)"), @@ -351,7 +351,7 @@ async def test_client_shell( async def test_client_rust( self, src: Annotated[dagger.Directory, Doc("Project root directory")] | None = None, - tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.0", + tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.2", live: Annotated[ bool, Doc("Set MAT_VIS_LIVE_TESTS=1 + MAT_VIS_LIVE_TAG=tag to enable live tests (#248)"), @@ -382,7 +382,7 @@ async def test_client_rust( async def test_clients( self, src: Annotated[dagger.Directory, Doc("Project root directory")] | None = None, - tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.0", + tag: Annotated[str, Doc("Release tag to test against")] = "v2026.04.2", live: Annotated[ bool, Doc("Forward MAT_VIS_LIVE_TESTS=1 + MAT_VIS_LIVE_TAG=tag to every client (#248)"), diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8ad32e6..3061d755 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: # in each language container so the @live / liveDescribe blocks # (incl. the #248 manifest-driven coverage matrix) actually run # against prod HF, not the structural-only stubs. - args: test-clients --src=. --tag=v2026.04.0 --live=true + args: test-clients --src=. --tag=v2026.04.2 --live=true # validate-release lives in promote-data-release.yml (pre-promotion gate) # and release-validate.yml (daily drift check). It tests the state of a From 2831bfd78b3166875b8c7d5fbd7a57ea7a04a677 Mon Sep 17 00:00:00 2001 From: gerchowl Date: Thu, 30 Apr 2026 17:15:58 +0200 Subject: [PATCH 2/2] bugfix(test): bump physicallybased proof + LIVE_TAG default to v2026.04.2 (#250 follow-up) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #250's CI fix bumped the workflow + dagger fn defaults from v2026.04.0 to v2026.04.2 but missed two stale tag references in clients/python/test_client.py: - LIVE_TAG default = "v2026.04.1" (a sunset CalVer; refs on prod are [v2026.04.2, main] now). - test_proof_phase_2_fetch_physicallybased_index_from_hf hardcoded tag="v2026.04.1" instead of using LIVE_TAG. Both surfaced when #248's manifest-driven coverage suite finally fired the @live blocks in CI and they 404'd against the deleted v2026.04.1 ref. Two changes: 1. LIVE_TAG default → "v2026.04.2". 2. The proof test now reads LIVE_TAG so it rolls forward with the release tag (env-overridable for staging dispatches). A separate concern surfaced by the same CI failure — bake_scalar_source in src/mat_vis_baker/hf_bake.py doesn't update release-manifest.json (legacy comment says "clients derive from tree", which broke as a contract once #239 made the client read the manifest file directly). Filed as a follow-up; not in this PR's scope. --- clients/python/test_client.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/clients/python/test_client.py b/clients/python/test_client.py index f7272cb9..8b5ee1ed 100644 --- a/clients/python/test_client.py +++ b/clients/python/test_client.py @@ -1279,7 +1279,7 @@ def test_original_check_caches_at_client_level(self, mock_client): ) -LIVE_TAG = os.environ.get("MAT_VIS_LIVE_TAG", "v2026.04.1") +LIVE_TAG = os.environ.get("MAT_VIS_LIVE_TAG", "v2026.04.2") LIVE_SOURCE = "polyhaven" LIVE_TIER = "1k" @@ -1358,9 +1358,14 @@ def test_fetch_nonexistent_material_raises(self, live_client): @live def test_proof_phase_2_fetch_physicallybased_index_from_hf(): - """Scalar catalog for physicallybased is fetchable from HF substrate.""" + """Scalar catalog for physicallybased is fetchable from HF substrate. + + Uses ``LIVE_TAG`` (env-overridable) so this stays current as + the prod release tag rolls forward; #250 surfaced a hardcoded + v2026.04.1 here that broke once that tag was sunset. + """ with tempfile.TemporaryDirectory() as tmp: - client = MatVisClient(tag="v2026.04.1", cache_dir=Path(tmp)) + client = MatVisClient(tag=LIVE_TAG, cache_dir=Path(tmp)) idx = client.index("physicallybased") assert len(idx) >= 50, f"expected ≥50 PB entries, got {len(idx)}" assert all("id" in e and "source" in e for e in idx)