From f1ab0c7e804ef1909f10244a29740264b0028e96 Mon Sep 17 00:00:00 2001 From: Polichinl Date: Sun, 2 Aug 2026 12:59:19 +0200 Subject: [PATCH] =?UTF-8?q?chore(deps):=20bump=20views-frames=20to=20>=3D1?= =?UTF-8?q?.10.2,<2=20=E2=80=94=20verified=20wire-byte-identical=20first?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit views-frames sits on the byte-producing path: wire/shard.py writes each Hop-B shard through views_frames.io.arrow.save, and the §10 golden fixture is generated the same way. A version bump there is a candidate contract event, so it was checked rather than assumed. Verified in a clean venv at pyarrow 16.1.0 (the pinned version, not this machine's 23.0.1) with views-frames 1.10.2: the fixture generator reproduces ALL FIVE canonical artifacts byte-identically — arrow shard, tap zip, both manifests, sidecar. The committed SHA256SUMS is unchanged and the fixture bytes are untouched. The same venv runs the full suite at 312 passed, 0 failed. The five failures seen locally are purely this machine's pyarrow 23.0.1 against the <17 pin (C-72); they disappear at the pinned version, which is a useful confirmation that the known-failure set really is what it has been claimed to be all along. Lock diff is one package: 1.6.0 -> 1.10.2 plus a docs extra that appeared in the new release's metadata. pyarrow stays at 16.1.0. views-frames 1.10.2 declares pyarrow>=14,<20 for its arrow extra, so the ceiling is compatible. Also corrects the fixture README, which named views_frames 1.0.0 as a pinned tool version. That was stale — the lock had said 1.6.0 for weeks — and it conflated the two dependencies. pyarrow is the version-sensitive one; views_frames is not, and the README now says which is which and what evidence supports it. Co-Authored-By: Claude Opus 5 (1M context) --- poetry.lock | 9 +++++---- pyproject.toml | 2 +- tests/fixtures/wire_contract/README.md | 14 +++++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index 96069ae..3b06a83 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4537,14 +4537,14 @@ dataframe = ["pandas (>=1.5.3,<2.0.0)"] [[package]] name = "views-frames" -version = "1.6.0" +version = "1.10.2" description = "The VIEWS platform data-contract layer: immutable array+identifier frames (numpy only, root of the dependency DAG)." optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "views_frames-1.6.0-py3-none-any.whl", hash = "sha256:bcd09ebf71275f6ad81111dd028fc7e969fc1d514a4364b72f12a3b155d1bf5e"}, - {file = "views_frames-1.6.0.tar.gz", hash = "sha256:081f8f236d9587fe23ed4ae542399f64c0cfe3745b74f37c835a12f905931871"}, + {file = "views_frames-1.10.2-py3-none-any.whl", hash = "sha256:ace7f6a09bdb743edbb39e7e95139a0c647ef7c6100ef4c612a3ce5975078ef0"}, + {file = "views_frames-1.10.2.tar.gz", hash = "sha256:96b4916afe9b64389045043ec1cf05fa2ea9b872ac0d12cb57f0d629ffd88106"}, ] [package.dependencies] @@ -4552,6 +4552,7 @@ numpy = ">=1.26,<3" [package.extras] arrow = ["pyarrow (>=14,<20)"] +docs = ["jupyterlab (>=4,<5)", "matplotlib (>=3.8,<4)", "nbmake (>=1.5,<2)", "pyarrow (>=14,<20)", "scipy (>=1.11,<2)"] [[package]] name = "views-pipeline-core" @@ -4800,4 +4801,4 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<3.15" -content-hash = "5f2d192a6a36dd429b473195ca6dc30424b57aed8890fbce99741895015578ef" +content-hash = "81e3ce9892400ac7a3aa4469015b2695f2d3f9c3cee244e5c56c8fe8fee4077a" diff --git a/pyproject.toml b/pyproject.toml index 87de5af..a704039 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ license = "MIT" [tool.poetry.dependencies] python = ">=3.11,<3.15" views-pipeline-core = ">=2.1.3,<3.0.0" -views-frames = ">=1.0,<2" +views-frames = ">=1.10.2,<2" pyarrow = ">=16.1.0,<17.0.0" [build-system] diff --git a/tests/fixtures/wire_contract/README.md b/tests/fixtures/wire_contract/README.md index 64b6299..83bb000 100644 --- a/tests/fixtures/wire_contract/README.md +++ b/tests/fixtures/wire_contract/README.md @@ -29,6 +29,14 @@ injected fixed literals (`run_id="fixture_run_0"`, `generated_at="2026-07-15T00: ## Regeneration `PYTHONPATH=. python3 scripts/build_wire_fixture.py` — byte-reproducible **with the pinned -tool versions** (numpy per lockfile, `pyarrow 16.1.0`, `views_frames 1.0.0`; parquet bytes -vary across pyarrow versions). The committed bytes + `SHA256SUMS` are canonical regardless. -**A change to this fixture is a change to the contract (§10)** — do not regenerate casually. +tool versions** (numpy per lockfile, `pyarrow 16.1.0`). The committed bytes + `SHA256SUMS` +are canonical regardless. **A change to this fixture is a change to the contract (§10)** — +do not regenerate casually. + +**`pyarrow` is the version-sensitive one; `views_frames` is not.** Parquet bytes vary +across pyarrow versions — that is why the pin is `>=16.1.0,<17.0.0` and why a local +pyarrow 23.x fails byte-parity while CI passes (register **C-72**). `views_frames` sits +above it: the fixture was generated under `1.0.0`, CI has reproduced it continuously under +`1.6.0`, and `1.10.2` was verified to regenerate **all five artifacts byte-identically** +before the pin was raised (2026-08-02). Raising it again does not require regenerating the +fixture — but it does require proving that, the same way.