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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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