From 5ddb75fe3593541343a7fcc40d4e32632ac07457 Mon Sep 17 00:00:00 2001 From: Davis Vann Bennett Date: Mon, 2 Nov 2026 14:48:49 +0100 Subject: [PATCH 1/2] docs(zarr-metadata): condense the 0.6.0 release notes Replace the ten bugfix fragments of PR 4574 with three, two of them marked breaking, and shorten the PR 4592 fragment to the rename and the names a user is most likely to have imported. The removed detail stays in the pull requests. Bugfix prose drops from about 800 words to 300. Assisted-by: ClaudeCode:claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 --- packages/zarr-metadata/changes/4574.bugfix.1.md | 8 +------- packages/zarr-metadata/changes/4574.bugfix.10.md | 5 ----- packages/zarr-metadata/changes/4574.bugfix.2.md | 5 +---- packages/zarr-metadata/changes/4574.bugfix.3.md | 6 +----- packages/zarr-metadata/changes/4574.bugfix.4.md | 7 ------- packages/zarr-metadata/changes/4574.bugfix.5.md | 11 ----------- packages/zarr-metadata/changes/4574.bugfix.6.md | 8 -------- packages/zarr-metadata/changes/4574.bugfix.7.md | 12 ------------ packages/zarr-metadata/changes/4574.bugfix.8.md | 4 ---- packages/zarr-metadata/changes/4574.bugfix.9.md | 12 ------------ packages/zarr-metadata/changes/4592.removal.md | 11 +---------- 11 files changed, 4 insertions(+), 85 deletions(-) delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.10.md delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.4.md delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.5.md delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.6.md delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.7.md delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.8.md delete mode 100644 packages/zarr-metadata/changes/4574.bugfix.9.md diff --git a/packages/zarr-metadata/changes/4574.bugfix.1.md b/packages/zarr-metadata/changes/4574.bugfix.1.md index 0d387acd14..b49e3cfa85 100644 --- a/packages/zarr-metadata/changes/4574.bugfix.1.md +++ b/packages/zarr-metadata/changes/4574.bugfix.1.md @@ -1,7 +1 @@ -**Breaking:** A problem in a v2 struct dtype is located where the document - writes it. A record's problem was located under a `fields` key the - document does not have, at `("dtype", "fields", 0, 1)`; it is now at - `("dtype", 0, 1)`, and carries the value found there as its `input`. - `declarations()` places each record's type there too. A definition's - functions still find the record types in `nested` at - `("fields", 0, 1)`, their place in the configuration. +**Breaking:** Every problem is now located where the document writes the value. The v2 readers and the v2 models' `from_key_value` locate a problem in the file that holds it, such as `(".zarray", "order")` or `(".zattrs", "x")`, instead of in the merged document, and a v2 array node reading's `at` is now `(".zarray",)`. A problem in a v2 struct record is at `("dtype", 0, 1)` instead of under a `fields` key the document does not have, and a codec's problem is at the configuration the document writes, or at the codec itself when it writes none. diff --git a/packages/zarr-metadata/changes/4574.bugfix.10.md b/packages/zarr-metadata/changes/4574.bugfix.10.md deleted file mode 100644 index e06b2d6d3d..0000000000 --- a/packages/zarr-metadata/changes/4574.bugfix.10.md +++ /dev/null @@ -1,5 +0,0 @@ -Each problem `read_consolidated_metadata_v3` finds in the inline - `consolidated_metadata` member itself, such as a `kind` that is not - `"inline"` or a key that is not a node path, carries the value found at - its location as its `input`, as every other reader's problems do. Its - `input` was unset. diff --git a/packages/zarr-metadata/changes/4574.bugfix.2.md b/packages/zarr-metadata/changes/4574.bugfix.2.md index 4342fc151c..b0a67f448e 100644 --- a/packages/zarr-metadata/changes/4574.bugfix.2.md +++ b/packages/zarr-metadata/changes/4574.bugfix.2.md @@ -1,4 +1 @@ -A v2 dtype written as the string `"struct"` is refused as a string that is - not a NumPy typestr, like any other, instead of being read as a struct - with no records. `struct` is the name the definition of a records array - is filed under, not part of the v2 dtype grammar. +**Breaking:** The v2 readers now agree with the v3 readers. A `.zarray` member the spec does not define may hold `NaN` and the infinities, a `.zmetadata` key that does not name its node's path, such as `/a/.zarray`, is refused instead of being read as the node at `a`, and a `.zgroup` that holds `attributes` is an `invalid_value` rather than an `unknown_key`, so a caller who tolerates unknown keys no longer drops those attributes. diff --git a/packages/zarr-metadata/changes/4574.bugfix.3.md b/packages/zarr-metadata/changes/4574.bugfix.3.md index adec05b00c..b69507e86d 100644 --- a/packages/zarr-metadata/changes/4574.bugfix.3.md +++ b/packages/zarr-metadata/changes/4574.bugfix.3.md @@ -1,5 +1 @@ -A group listed in v3 consolidated metadata whose own document has a problem, - such as attributes that are not an object, is reported for that problem - alone. It was also reported for disagreeing with the outer listing's copy - of the same node, a difference that came only from the problem. A copy - whose only problem is an unknown key is still compared. +Various mistakes in v2 and consolidated metadata are now reported once, at their own location, with the right kind and message. A float where an integer from a fixed set is required, such as `"zarr_format": 2.0`, is an `invalid_type`, and a v2 typestr with a part its family does not take, such as ` Date: Mon, 2 Nov 2026 14:50:28 +0100 Subject: [PATCH 2/2] docs(zarr-metadata): state the codec problem locations and two more renames correctly Roborev caught that the condensed note inverted where a codec's problems land, against tests/v3/test_pipelines.py, and that the rename note dropped declaration_aliases and the with_problems parameter. Assisted-by: ClaudeCode:claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 --- packages/zarr-metadata/changes/4574.bugfix.1.md | 2 +- packages/zarr-metadata/changes/4592.removal.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/zarr-metadata/changes/4574.bugfix.1.md b/packages/zarr-metadata/changes/4574.bugfix.1.md index b49e3cfa85..53a5935723 100644 --- a/packages/zarr-metadata/changes/4574.bugfix.1.md +++ b/packages/zarr-metadata/changes/4574.bugfix.1.md @@ -1 +1 @@ -**Breaking:** Every problem is now located where the document writes the value. The v2 readers and the v2 models' `from_key_value` locate a problem in the file that holds it, such as `(".zarray", "order")` or `(".zattrs", "x")`, instead of in the merged document, and a v2 array node reading's `at` is now `(".zarray",)`. A problem in a v2 struct record is at `("dtype", 0, 1)` instead of under a `fields` key the document does not have, and a codec's problem is at the configuration the document writes, or at the codec itself when it writes none. +**Breaking:** Every problem is now located where the document writes the value. The v2 readers and the v2 models' `from_key_value` locate a problem in the file that holds it, such as `(".zarray", "order")` or `(".zattrs", "x")`, instead of in the merged document, and a v2 array node reading's `at` is now `(".zarray",)`. A problem in a v2 struct record is at `("dtype", 0, 1)` instead of under a `fields` key the document does not have, a codec's missing configuration member, such as the `endian` of a `bytes` codec, is reported inside the configuration it writes, or at `codecs.N.configuration` when it writes none, and a codec handed values it cannot encode is reported at `codecs.N` however it is spelled. diff --git a/packages/zarr-metadata/changes/4592.removal.md b/packages/zarr-metadata/changes/4592.removal.md index 982ec30d05..323ce4de30 100644 --- a/packages/zarr-metadata/changes/4592.removal.md +++ b/packages/zarr-metadata/changes/4592.removal.md @@ -1 +1 @@ -**Breaking:** The value found at an extension point, a data type, chunk grid, chunk key encoding, codec or storage transformer, is now called a *declaration*. The word *field* also meant a key of a metadata object, as in `extra_fields`, so one word meant two things. The public names change with no aliases: `AcceptedField`, `UnclaimedField`, `RefusedField` and `ResolvedField` end in `Declaration`, as do `ZarrV3CodecField` and the other kind-specific `...Field` types; a reading's `fields()` is `declarations()`; a model's `unclaimed_fields` is `unclaimed_declarations`; `ZarrV3MetadataFieldJSON` is `ZarrV3DeclarationJSON`; `field_json_schema_v3` is `declaration_json_schema_v3`; and the JSON Schema `$defs` use the new names. `extra_fields`, `ExtraFieldDefinition`, `ZarrV3ExtensionField` and `StructField` keep their names. +**Breaking:** The value found at an extension point, a data type, chunk grid, chunk key encoding, codec or storage transformer, is now called a *declaration*. The word *field* also meant a key of a metadata object, as in `extra_fields`, so one word meant two things. The public names change with no aliases: `AcceptedField`, `UnclaimedField`, `RefusedField` and `ResolvedField` end in `Declaration`, as do `ZarrV3CodecField` and the other kind-specific `...Field` types; a reading's `fields()` is `declarations()`; a model's `unclaimed_fields` is `unclaimed_declarations`; `ZarrV3MetadataFieldJSON` is `ZarrV3DeclarationJSON`; `field_json_schema_v3` is `declaration_json_schema_v3`; a kind's `field_aliases` is `declaration_aliases`; the first parameter of `with_problems` is `declarations`; and the JSON Schema `$defs` use the new names. `extra_fields`, `ExtraFieldDefinition`, `ZarrV3ExtensionField` and `StructField` keep their names.