Goal
Migrate copick-utils to the published copick OME-Zarr 0.5 / Zarr v3 contract without duplicating storage policy or changing feature-calculation semantics beyond correcting invalid overlap slice bounds.
This epic targets the copick-utils 2.0 release line.
Project: https://github.com/orgs/copick/projects/1
Current implementation
The implementation is available as a linear stack against v2.0:
Local validation passes 63 tests on the final lock with Pydantic 2.13.4. The final suite also passes on Python 3.11.15/Zarr 3.1.6 and Python 3.12.10/Zarr 3.3.0. Both workflows validate, all pinned pre-commit hooks pass, a wheel plus source distribution build and inspect successfully, and every check is green across all five stacked pull requests.
Implemented scope
- Add an unconditional pull-request matrix on stable Python 3.11 through 3.14, including documentation-only changes.
- Preserve a deterministic pre-migration feature result as a numerical compatibility check.
- Add one explicitly read-only metadata-based level accessor and replace all eight literal-path tomogram readers.
- Keep tomogram and segmentation persistence delegated to copick entities and verify representative canonical Zarr v3 output behavior.
- Preserve all existing
compute_skimage_features(...) arguments and append optional keyword-only chunks=None and shards=None.
- Preserve existing chunk subdivision, scalar overlap, transpose, edge placement, entity-creation timing, and failure behavior.
- Correct the pre-existing trailing-overlap broadcast failure with bounded read/crop/output slices on every axis.
- Assemble one temporary disk-backed feature-major
float32 tensor and delegate exactly one final write to CopickFeatures.from_numpy().
- Reuse the exact-SHA test workflow for releases, build artifacts once, inspect them, and publish those same artifacts with matching artifact-action majors.
Tests are behavior-focused. They do not parse source syntax or assert dependency declaration strings. Broader converter, input-layout, and read-no-mutation coverage remains deferred and is not claimed by this stack.
Remaining final-cutover work
- Complete live local/S3-compatible/Secure Shell/ML Croissant and portal validation as the surrounding ecosystem reaches the same migration point.
- Complete the deferred converter/input-layout coverage matrix.
- Keep Server Message Block optional and non-gating.
- Perform the final README/changelog/ecosystem documentation pass immediately before promotion from
v2.0 to stable.
- Configure the final
v2.0 required checks and validate the published artifacts.
These documentation, ecosystem, and broader coverage checks do not hold up review of the implementation stack.
Acceptance criteria
Explicit non-goals
- No in-place conversion of existing stores.
- No private writer or compatibility layer.
- No equivalence requirement with a whole-volume scikit-image call.
- No support guarantee beyond available temporary-disk capacity.
- No rollback of partially created feature entities.
- No change to command-line partial-failure exit semantics.
- No AST/source-inventory tests or dependency-string tests.
Goal
Migrate copick-utils to the published copick OME-Zarr 0.5 / Zarr v3 contract without duplicating storage policy or changing feature-calculation semantics beyond correcting invalid overlap slice bounds.
This epic targets the copick-utils 2.0 release line.
Project: https://github.com/orgs/copick/projects/1
Current implementation
The implementation is available as a linear stack against
v2.0:Local validation passes 63 tests on the final lock with Pydantic 2.13.4. The final suite also passes on Python 3.11.15/Zarr 3.1.6 and Python 3.12.10/Zarr 3.3.0. Both workflows validate, all pinned pre-commit hooks pass, a wheel plus source distribution build and inspect successfully, and every check is green across all five stacked pull requests.
Implemented scope
compute_skimage_features(...)arguments and append optional keyword-onlychunks=Noneandshards=None.float32tensor and delegate exactly one final write toCopickFeatures.from_numpy().Tests are behavior-focused. They do not parse source syntax or assert dependency declaration strings. Broader converter, input-layout, and read-no-mutation coverage remains deferred and is not claimed by this stack.
Remaining final-cutover work
v2.0to stable.v2.0required checks and validate the published artifacts.These documentation, ecosystem, and broader coverage checks do not hold up review of the implementation stack.
Acceptance criteria
Explicit non-goals