Skip to content

docs: amend 3.3.0 release notes with behavior-change and dependency details - #235

Open
d-v-b wants to merge 5 commits into
mainfrom
docs/3.3.0-release-notes-amendments
Open

docs: amend 3.3.0 release notes with behavior-change and dependency details#235
d-v-b wants to merge 5 commits into
mainfrom
docs/3.3.0-release-notes-amendments

Conversation

@d-v-b

@d-v-b d-v-b commented Jul 22, 2026

Copy link
Copy Markdown
Owner

🤖 AI text below 🤖

Pre-release amendments to the ## 3.3.0 section of docs/release-notes.md, from the 3.3.0 pre-release audit (towncrier fragments are already consumed, so direct edits are correct here):

Lint: pre-commit run markdownlint-cli2 and ci/lint_docs.py both pass.

🤖 Generated with Claude Code

d-v-b added 5 commits July 14, 2026 13:25
* fix: byte-order handling for structured dtypes in the bytes codec

The bytes codec neither byte-swapped structured-dtype fields to its
configured endian on encode (numpy reports byteorder '|' for void
dtypes, so the top-level byteorder comparison never detected a
mismatch) nor honored its endian when decoding, silently corrupting
any structured data whose field byte order differed from the stored
one (e.g. virtual references to external big-endian data).

Encode now detects byte-order mismatches by comparing full dtypes via
newbyteorder, and decode reinterprets raw bytes in the stored byte
order before converting to the data type's declared byte order, so the
stored layout (codec state) and the in-memory layout (array data type)
are independent.

Closes zarr-developers#4141

Assisted-by: ClaudeCode:claude-fable-5

* test: fold structured byte-order cases into existing bytes codec tests

Extend test_endian's parametrization with structured dtypes and
test_bytes_codec_sync_roundtrip with endian/dtype parametrization plus
stored-layout and decoded-dtype assertions, instead of adding parallel
test functions for the same properties.

Assisted-by: ClaudeCode:claude-fable-5

* refactor: rename stored_dtype to view_dtype in BytesCodec decode

The variable is the dtype used to view the raw chunk bytes (byte order
from the codec's endian configuration), not a property of the stored
data or of the returned buffer, which always carries the array's
declared dtype.

Assisted-by: ClaudeCode:claude-fable-5

* docs: note that the decode-side byte-order conversion copies the chunk

Assisted-by: ClaudeCode:claude-fable-5
…etails

Add pre-release clarifications to the 3.3.0 section:

- zarr-developers#4141: note the read-time behavior change for structured-dtype arrays
  written by <= 3.2.1 with an explicitly non-native bytes-codec endian.
- zarr-developers#3417: note that V3 metadata omitting endian for multi-byte dtypes now
  fails at open time with ValueError instead of assuming native order.
- New Misc entry: typing_extensions >= 4.14 is now required (Sentinel),
  and the gpu extra skips CuPy on macOS.
- zarr-developers#3963 / zarr-developers#3968: clarify that enum-specific idioms on the now-string
  attributes raise immediately (no deprecation cycle), while equality
  against enum members still holds.

Assisted-by: ClaudeCode:claude-fable-5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant