Status (2026-07-28): tag-ready. Every Stage-4 sub-issue is closed except #164 (live/incremental c.update()), which was deferred to v.2.2. #345 (batch custom-JSON + file search) was split out to the v.2.1.2 patch milestone so it does not block the tag. This umbrella closes when v2.1.0 is tagged.
Stage 4 = the cellpy 2.1 release. 2.0 finalized everything that could not be shimmed (frame schemas, header API, loader contract, on-disk v9 format, metadata, packaging) and deferred the rest behind warn_once shims. 2.1 spends those shims: it lands the batch/collectors redesigns their facades were holding a place for, surfaces engine features that already exist, rebuilds live/incremental on core, and removes every deprecation registered for removal: 2.1.
Single release (patch-release distribution was considered and rejected — Epic E is breaking, so a semver-clean 2.1 carries all of Stage 4).
Plan: architecture-plan/stage4-github-issues.md · coordinating: architecture-plan/cellpy2-architecture-plan.md §Stage 4.
Epic A — Batch v3 (cellpy/batch/)
Epic B — Collectors (cellpy/collect/)
Epic C — Utils waves 3–4
Epic D — F6 feature menu
Epic E — Shim removals (BREAKING)
Epic G / H — Docs + housekeeping
Linked (other milestones): #668 (batch bugs, v1-follow-up) closed-verified by A1/A8/E4; #73 GITT/PITT → v.2.2. Split out: #345 batch custom-JSON → v.2.1.2; #164 live/incremental → v.2.2.
Sequencing
#701 → #706 (collectors need batch.aggregate); #703 + #707 → #716 (can't remove what has no replacement); #705 → #706 (cross-cell bug xfail→fix); #717 early; #720 last. Startable immediately: #713, #714, #715, #709, #164, #710, #721, #718.
Decisions locked (2026-07-26)
bokeh+seaborn dropped (plotly+matplotlib remain) · iterate_batches/process_batch → docs recipes · cellpy.batch + cellpy.collect packages · prms shim removed, c.mass facade kept past 2.1 · SPEED-30 headers parked → 2.2 · #73 GITT/PITT → 2.2.
Status (2026-07-28): tag-ready. Every Stage-4 sub-issue is closed except #164 (live/incremental
c.update()), which was deferred to v.2.2. #345 (batch custom-JSON + file search) was split out to the v.2.1.2 patch milestone so it does not block the tag. This umbrella closes when v2.1.0 is tagged.Stage 4 = the cellpy 2.1 release. 2.0 finalized everything that could not be shimmed (frame schemas, header API, loader contract, on-disk v9 format, metadata, packaging) and deferred the rest behind
warn_onceshims. 2.1 spends those shims: it lands the batch/collectors redesigns their facades were holding a place for, surfaces engine features that already exist, rebuilds live/incremental on core, and removes every deprecation registered forremoval: 2.1.Single release (patch-release distribution was considered and rejected — Epic E is breaking, so a semver-clean 2.1 carries all of Stage 4).
Plan:
architecture-plan/stage4-github-issues.md· coordinating:architecture-plan/cellpy2-architecture-plan.md§Stage 4.Epic A — Batch v3 (
cellpy/batch/)Epic B — Collectors (
cellpy/collect/)Epic C — Utils waves 3–4
c.update()) — deferred to v.2.2Epic D — F6 feature menu
Epic E — Shim removals (BREAKING)
Epic G / H — Docs + housekeeping
Linked (other milestones): #668 (batch bugs, v1-follow-up) closed-verified by A1/A8/E4; #73 GITT/PITT → v.2.2. Split out: #345 batch custom-JSON → v.2.1.2; #164 live/incremental → v.2.2.
Sequencing
#701 → #706(collectors needbatch.aggregate);#703 + #707 → #716(can't remove what has no replacement);#705 → #706(cross-cell bug xfail→fix); #717 early; #720 last. Startable immediately: #713, #714, #715, #709, #164, #710, #721, #718.Decisions locked (2026-07-26)
bokeh+seaborn dropped (plotly+matplotlib remain) ·
iterate_batches/process_batch→ docs recipes ·cellpy.batch+cellpy.collectpackages · prms shim removed,c.massfacade kept past 2.1 · SPEED-30 headers parked → 2.2 · #73 GITT/PITT → 2.2.