Skip to content

Issue tracker cleanup: ~100 of 407 open upstream issues look closable #212

Description

@d-v-b

🤖 AI text below 🤖

To raise the signal-to-noise ratio of the zarr-python issue tracker, all 407 open issues were reviewed and sorted into "closable candidate" vs "keep". This issue collects the ~100 candidates, grouped by the kind of evidence supporting closure.

Method. Ten parallel review passes covered every open issue (body + comments). For bug reports that looked fixed, the issue's reproduction script was run against current main (3.2.2.dev96+ga3992139c); v2-era repros were adapted to the v3 API where the complaint still translates. The bias was conservative: anything that still reproduces, or that is a live feature request/design discussion, was kept and is not listed here (a sample of re-verified still-broken issues is in the appendix). Confidence is labeled per issue — high should be safe to close on sight, medium deserves a quick human glance first.


1. Verified fixed on current main (repro was run) — 38

Issue Conf. Evidence
#216 Object array fill value high Adapted to v3 vlen-bytes dtype: zarr.full(..., dtype=VariableLengthBytes(), fill_value=b"foobar") works for both formats; fill encodes as base64, no JSON TypeError.
#298 Follow symbolic links in DirectoryStore medium v3 LocalStore follows symlinks: symlinked an array dir into another group, members lists it and data reads through the link.
#605 Better error when array/store already exists high Second zarr.create now raises the dedicated, catchable zarr.errors.ContainsArrayError — exactly what was requested.
#962 Passing dask array leads to TypeError medium z[:] = dask_array and zarr.array(dask_array) both succeed on main; the v2 astype(order=...) path that broke is gone.
#1341 ValueError on empty slice after resize() with fsspec store high FsspecStore repro (create (0,), resize, read arr[0:0]/arr[1:1]) runs clean, no ValueError.
#1363 FSStore with simplecache fails on missing chunks medium FsspecStore.from_url("simplecache::file://...") over a sparse array reads fine, missing chunks fill. (Original used HTTP, hence medium.)
#1629 Arrays with padded structured datatypes fail medium The reported TypeError on assignment is gone; data roundtrips equal. Caveat: padding is packed rather than preserved.
#1720 omit chunks on HTTP 400 but not other errors medium v3 FsspecStore only treats FileNotFoundError-family as missing; verified a PermissionError from the fs propagates instead of NaN-filling.
#1795 Deserializing arrays should not trigger load_metadata high Pickled a v3 array, deleted zarr.json from the store, unpickled and read data successfully — metadata travels with the pickle.
#2111 updating attributes breaks zarr.json (dim separator) medium Reopen with mode="a" + update_attributes leaves every non-attributes field of zarr.json byte-identical. (Adapted from the tensorstore-written original.)
#2134 [v3] Structured dtype support medium The issue's exact repro roundtrips on main (shipped via zarr-developers#2874 in 3.1). Maintainers may prefer keeping it as a tracker for residual gaps (zarr-developers#3587).
#2174 nbytes_stored incorrect with dimension_separator="/" high Both . and / separators now report the identical full stored size (262489 vs v2's bogus 391).
#2201 ensure an upper bound on key range medium Untyped range tuples replaced by typed ByteRequest; hypothesis strategy clamps; oversized RangeByteRequest on a 5-byte file returns the 5 bytes, no MemoryError.
#2206 consolidate_metadata(zarr.Group) writes corrupted .zmetadata high Now raises TypeError: Unsupported type for store_like: 'Group' and writes nothing — the requested fail-early behavior.
#2322 v2/v3 metadata encode fill_value bytes differently high Both formats now encode b'X' as base64 'WA=='; the tuple-of-ints divergence is gone.
#2347 [v3] fixed-width unicode string support high dtype="U3" roundtrips as <U3 with metadata FixedLengthUTF32(length=3); no longer coerced to StringDType. d-v-b already noted it was fixed via zarr-developers#2874.
#2394 DOC: compressor kwarg should be documented medium Current create_array docstrings answer both questions asked (default behavior, valid values per zarr format).
#2627 default filters for v2 object dtype are wrong medium The silent wrong-default can no longer occur: dtype='O' now raises an informative ValueError requiring an explicit zarr dtype (matching what the thread favored).
#2699 module 'zarr.storage' has no attribute 'DirectoryStore' high The actionable ask (document the mapping) is done: docs/user-guide/v3_migration.md has the DirectoryStore → LocalStore table row; other questions answered in-thread.
#2706 v3 does not accept stores of type FSMap high The issue's exact snippet now works; make_store_path explicitly handles FSMap, and full write+readback through an FSMap succeeds.
#2773 can write v2-format data that zarr 2.x can't read high The requested firewalling exists: serializer= with zarr_format=2 raises ValueError, and v3-only compressors are rejected for v2 arrays.
#2792 string dtype with 0 fill value inconsistency high Exact repro now returns ['a' 'bb' '' '0' '0'] — consistent, and matches zarr-python 2.18.4 per LDeakin's in-thread reference output.
#2875 getitem fails when fill_value parses as ndarray medium Reconstructed the condition (complex fill stored as [re, im]) for both formats: fill parses to a scalar and reads work, no TypeError. Fixed by the zarr-developers#2874 dtype refactor.
#2979 broken fill_value encoding in consolidated metadata (v2) high .zmetadata now base64-encodes the bytes fill identically to .zarray (QQ== both places) and roundtrips.
#3005 does zarr support big-endian high >i4 create/read works for both v2 and v3 on main; the DataType.from_numpy KeyError path was replaced by the ZDType system (was blocked on zarr-developers#2874, since merged).
#3016 v2 stores written by v3 unreadable by zarr-python 2 (typesize) high Main writes Blosc v2 metadata without typesize; cross-version verified — a store written by main was read back correctly with actual zarr==2.18.3.
#3024 Zarr2→Zarr3 conversion confusion medium The confirmed from_array+resharding bug no longer reproduces (roundtrips for even and uneven shapes); the conversion-guide ask is covered by the migration CLI (zarr-developers#3257) and docs.
#3025 disallow numpy scalars for metadata.fill_value high The alternative d-v-b proposed in-thread shipped: metadata __eq__ compares JSON form, so two NaN-fill arrays now compare equal — the motivating problem is gone.
#3090 docs for dtypes medium docs/user-guide/data_types.md exists with a "List of data types" section and sits in the mkdocs nav, addressing the original ask and the navbar-prominence follow-up.
#3165 Quantize filter in encoding does not work medium The TypeError: Object of type type is not JSON serializable is gone; filters=[Quantize(...)] writes successfully (with a deprecation notice pointing at zarr.codecs.numcodecs.Quantize). Verified via zarr directly, not xarray.
#3168 disallow 0-length fixed-size data types high dtype='U0' now raises ValueError: length must be >= 1, got 0. — the exact option the author said he'd implement.
#3176 V2 PCodec decompression error high The issue's repro (PCodec level 12, zarr_format=2, float64 and float32) reads back clean on main.
#3256 Delta filter AttributeError with astype high Exact failing snippet completes cleanly; reporter also confirmed in-thread it's fixed as of 3.1.3 (numcodecs PR 766).
#3284 expose ZarrFormat in public API high zarr.types.ZarrFormat exists and is in __all__ — exactly the proposed submodule.
#3339 abstraction leakage in codec registration medium register_codec calls are now centralized in src/zarr/codecs/__init__.py (none left in the codec-defining modules); landed via zarr-developers#3376 after the issue was filed.
#3548 Unknown codec 'zarr.codecs.numcodecs.PCodec' high The exact xarray repro (to_zarr with serializer=PCodec(), then open_zarr) roundtrips on main with no UnknownCodecError.
#3588 ZipStore has no attribute '_lock' high Exact repro (store.exists() on a fresh read-mode ZipStore) returns False with no exception.
#3650 resize deletion of outside chunks unbounded medium The exact grow-only repro now completes instantly (_resize skips deletion when only growing). Shrinking is still unbounded, so close only if the growth case was the accepted scope.

2. Resolved in-thread / shipped elsewhere, never closed — 26

Issue Conf. Evidence
#134 Question: Streaming Data medium 2017 question answered (jhamman 2020); dstansby (2024-12-18) explicitly proposed closing absent a concrete request — none ever came.
#736 Join/view over same chunk across sub-groups medium Answered by joshmoore (2021): not supported without a custom Store; reporter acknowledged and thread ended. Targets removed v2 DirectoryStore besides.
#980 Slice without loading entire array medium Usage question answered in-thread (slicing only loads touched chunks); joshmoore (2022-12-02) said it could be closed with doc pointers.
#982 Does initializing store/group/arr load data? medium Fully answered by joshmoore 2022-03-08 ("only metadata"); no follow-up in 4+ years.
#1427 Opening sequentially in write mode overwrites store high d-v-b explained mode='w' is documented overwrite behavior; reporter accepted ("Ah, thank you!"). Residual v2 mode-API drift superseded by the v3 rewrite.
#1487 small 3D tif memmap convert failed medium Root cause was plain-zarr vs OME-Zarr (MoBIE), per joshmoore; follow-up concerned ome-zarr-py performance, which belongs upstream. Dormant since 2023.
#2185 [v3] integration test suite comparing zarr 2 and 3 medium Pre-3.0 planning issue; jhamman (2025-01-01) said the xarray/dask suites gave the needed confidence. 3.0 shipped 18 months ago.
#2507 Way to ask if chunk exists? high Asker confirmed the answer (encode_chunk_key + store.exists): "It does sound like store.exists is what we need though, thanks!"
#2729 multiprocessing fails with JSONDecodeError medium d-v-b diagnosed reading-while-resizing as unsupported concurrent metadata modification; icechunk suggested for transactional needs. No reporter follow-up since 2025-02.
#2790 default zstd codec not in the v3 spec medium The fix rabernat called for (a formal zstd extension spec) shipped — zstd is registered in zarr-developers/zarr-extensions.
#2793 Async errors creating zarr with FsspecStore medium Diagnosed as upstream boto3 1.36 bug (boto3#4398); reporter confirmed rollback fixed it; ecosystem fixes shipped early 2025.
#2809 DOC: create_array(..., data=...) medium PR zarr-developers#2819 added data to Group.create_array; both sync and async signatures now have it, documented. Only optional user-guide examples remain (PR zarr-developers#2890).
#2892 No such file or directory when replacing an array medium Two maintainers couldn't reproduce; diagnosed as a network-volume filesystem race; reporter silent >14 months. Basic delete-and-recreate verified working on main.
#2925 Add Buffer.as_buffer_like method high Shipped via PR zarr-developers#2972: Buffer.as_buffer_like() exists and is used by the obstore store — exactly the requested capability.
#2937 Consolidated-metadata preference per Store high The exact proposed API shipped: Store.supports_consolidated_metadata (PR zarr-developers#3119, "Allow Stores to opt out of consolidated metadata").
#2981 Unclear v3-spec support status in zarr-python 2.x medium Answered definitively by rabernat: 2.x implemented a divergent draft, kept for legacy only; 2.x is EOL so nothing will change.
#2986 Is ArrayV3Metadata public API? medium Question answered by d-v-b ("extremely unlikely we would remove the metadata classes"); filed purely to track the question, dormant since.
#3067 Modify bug report template to use print_debug_info high Shipped: bug_report.yml now includes zarr.print_debug_info() in the reproducer template (PR zarr-developers#3087).
#3185 keys() empty on FsspecStore high Diagnosed as URL-scheme confusion, not a zarr bug; the agreed docs clarification merged as the reporter's own PR zarr-developers#3212.
#3194 How to roundtrip to a ZipStore? medium maxrjones gave the working pattern (reopen in mode='r'); TomNicholas confirmed and moved on.
#3196 SFTP freeze via fsspec medium Diagnosed upstream (paramiko not thread-safe); author confirmed "Using sshfs does indeed solve the problem."
#3254 Order of keys from ArrayV2Metadata.to_dict changed high Author: "I think this issue can probably be closed" — artifact of VirtualiZarr/kerchunk testing; JSON objects unordered by design.
#3323 Unable to access kerchunk file on s3 medium Thread converged on version-mismatch as the cause; confirmed working with matched 2025.7-era fsspec/zarr/s3fs/kerchunk. (Repro needs S3, not run.)
#3463 Icechunk + flask context medium jhamman couldn't reproduce with a full flask+icechunk app and asked for a minimal repro; reporter silent ~10 months (needs-info stale).
#3499 create_dataset was not removed in 3.1.0 high The removal shipped since (zarr-developers#3902); create_dataset no longer exists anywhere in src/zarr. Nothing left to do.
#3516 dask arrays to ZipStore corrupt zip medium Root cause was dask's use of deprecated zarr.create(); dask/dask#12153 merged and released, and the reporter confirmed the create_array path produces a valid zip.

3. Obsolete — targets the removed 2.x codebase/API or long-shipped plans — 32

Issue Conf. Evidence
#264 Future of open...() functions medium 2018 proposal to edit the v2 tutorial; docs fully rewritten for 3.x and open_* deliberately kept. Live successor discussion is zarr-developers#2466.
#295 Optimize LRUStoreCache.contains high LRUStoreCache doesn't exist anywhere in 3.x; the one-line optimization has no target.
#328 Concurrent writes to same chunk (DirectoryStore) medium Targets v2 temp-file writes and the removed synchronizer machinery; neither exists in 3.x.
#384 Storage-API extensions for batch ops/transactions medium A 2019 sketch against the v2 MutableMapping store API; the async v3 Store ABC was redesigned from scratch. Transactions would need a fresh design issue.
#390 Binary encoding of JSON? medium 2019 spec-development question; the v3 spec finalized on JSON. A zarr-specs/ZEP matter, not zarr-python.
#502 Can't reassign into object arrays in a group medium Entirely v2 create_dataset/object_codec API; on main the operation raises an informative dtype-resolution error instead.
#673 Memoryview-safe variable-length arrays medium The v2 object-dtype + VLenArray API doesn't exist in 3.x; for supported dtypes, reads verified writeable on main.
#844 test_format_compatibility fails on big-endian medium The failing test lived in the removed 2.x suite; no such test on main. (Big-endian CI coverage in general is a separate gap.)
#917 DOC: make dev-environment guide copy-pastable high Complaint targets the old virtualenv/py3.8 snippet; contributing guide fully rewritten (hatch/prek), and the reporter said "I have solved the issue."
#1035 bug in save for variable-length arrays medium v2 zarr.save+object_codec bug; 3.x has no object-dtype support (tracked by zarr-developers#2618), so this convenience-function bug doesn't translate.
#1257 zarr.group creates chain of .zgroups with path= medium On main the repro succeeds; explicit parent-group metadata is deliberate, spec-aligned v3 behavior (no implicit groups).
#1375 Read tests fail on big-endian machines high All failures are in the removed 2.x PartialReadBuffer/partial_decompress machinery; zero grep hits on main.
#1442 getitems follow-up work high Action items point at zarr/core.py L1995 in the 2.x codebase; module and implementation removed.
#1567 Missing partial_decompress parameter high The parameter and the whole PartialReadBuffer machinery were removed with 2.x; zero grep hits. Labeled V2.
#1578 FSStore silently returns bogus chunk data on exception medium v2 getitems(on_error="omit") is gone; FsspecStore.get only swallows a narrow configurable allowed_exceptions tuple, so errors propagate.
#1678 Tests fail with zlib-ng high The digest-asserting tests (test_hexdigest) belong to the removed 2.x suite; no test asserts compressed digests on main.
#1731 copy_all does not copy consolidated metadata medium Bug is in the removed 2.x copy_all; on main it's a NotImplementedError stub, so the specific complaint can't translate. Labeled V2.
#1735 Non-deterministic failures in test_open_array/group high The flaky tests (DirectoryStoreV3, _init_creation_kwargs) no longer exist in the 3.x suite.
#1740 h5 to zarr medium Usage question about v2 copy_all (now a stub); author never answered dstansby's 2024 follow-up.
#1823 array_keys recurse option high The v2 array_keys(recurse=True) API is gone; v3 traversal is members(max_depth=...).
#1888 2.18.1: sphinx "reference target not found" high The project no longer uses Sphinx at all (docs migrated to mkdocs-material, PR zarr-developers#3118); nothing to warn.
#1891 2.18.1: pytest fails with numcodecs 0.12.1 medium Entirely about the removed 2.x test suite and 2.x wheel packaging; 2.x is EOL.
#2077 parallel append broken with ProcessSynchronizer medium The 2.x synchronizer machinery was removed; in 3.x the synchronizer kwarg is annotated "not used". The complaint is specifically about the removed API.
#2081 Failure to encode object types with zarr.full medium v2-only object_codec=Pickle() path; v3 object support tracked separately in zarr-developers#2617.
#2130 Tests fail with azure-storage-blob 2.22.0 high Labeled V2, concerns 2.x-branch CI; 3.x has no ABSStore/direct azure dependency.
#2631 Group.create_dataset does not match 2.x API high The deprecated shim was removed entirely (zarr-developers#3902); the signature complaint is moot.
#2982 Can't open group via experimental v3 impl in 2.x high About the dead-end experimental v3 code removed in 3.0; reporter: "I guess you can close this issue."
#3050 create_dataset might call create_array without dtype high create_dataset no longer exists in src (zarr-developers#3902); the corner case cannot occur.
#3171 N5ChunkWrapper bug with uint8 medium zarr.n5 exists only in EOL 2.x; reporter found a workaround in-thread ("solved the problem").
#3313 consolidate_metadata does not scale medium Filed against 2.18.7's key-enumerating implementation; v3 consolidation traverses list_dir on node directories and never enumerates chunk keys.
#3933 Monthly issue metrics report (Apr 2026) medium Auto-generated bot snapshot, zero comments, superseded by newer reports; all older ones were routinely closed.
#4021 Monthly issue metrics report (May 2026) high Same routine bot report; all previous months' reports are closed. (The current one, #4111, can be closed after review too.)

4. Duplicates — 2

Issue Conf. Canonical
#2497 Array / AsyncArray design medium #4027 is the newer, concrete, actively-labeled proposal on the same design question, by the same author.
#2654 should we abstract over v2 and v3 codecs medium #3162 is the newer, concrete plan by the same author covering the same problem (which was re-verified as still unfixed — keep zarr-developers#3162).

5. Likely fixed, not fully verified — 2

Issue Conf. Evidence
#1504 Restricted s3 groups produce zero-filled arrays medium v3 only treats FileNotFoundError-family as missing; verified with a synthetic fs that PermissionError propagates instead of yielding fill values. End-to-end s3/ACL path not run.
#3688 numpy dtype handling in 3.14 typing medium Tracked mypy failures from PR zarr-developers#3564, which merged with an explicit workaround at the exact reported location. Not verified by a full mypy run.

Appendix: suspected-fixed issues re-verified as still broken (deliberately kept open)

These looked closable at first glance but were re-run against main and still reproduce, so they are not close candidates: #156, zarr-developers#710, zarr-developers#828, zarr-developers#1125, zarr-developers#1435, zarr-developers#1706, zarr-developers#2030, zarr-developers#2050, zarr-developers#2214, zarr-developers#2380, zarr-developers#2407, zarr-developers#2451, zarr-developers#2486, zarr-developers#2620, zarr-developers#2705, zarr-developers#2808, zarr-developers#2814, zarr-developers#2831, zarr-developers#2834, zarr-developers#2881, zarr-developers#2919, zarr-developers#2964, zarr-developers#2971, zarr-developers#3018, zarr-developers#3054, zarr-developers#3072, zarr-developers#3162, zarr-developers#3282, zarr-developers#3387, zarr-developers#3415, zarr-developers#3466, zarr-developers#3478, zarr-developers#3495, zarr-developers#3546, zarr-developers#3571, zarr-developers#3576, zarr-developers#3582, zarr-developers#3583, zarr-developers#3595, zarr-developers#3622, zarr-developers#3744, zarr-developers#3868, zarr-developers#3964, zarr-developers#3991, zarr-developers#4032, zarr-developers#4086.

Suggested process: close the ~45 high-confidence entries directly (with a short closing comment linking back here so reporters can object), and spot-check the medium ones — especially zarr-developers#2134 (may be wanted as a tracker), zarr-developers#3650 (shrink case still unbounded), and zarr-developers#2627/zarr-developers#673 (fixed-by-erroring rather than fixed-by-working).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions