**Epic A — Batch v3** · `journal.py` + `layout.py`. Plan §4.1. New package **`cellpy/batch/`**. **Acceptance** - [ ] `Journal` dataclass (name, project, `pages` as polars with keys-in-columns, session, meta); serialization separated from model. - [ ] `read_journal`/`write_journal` (.json) with a **legacy JSON loader** for the old shape (versioned). - [ ] `journal_from_frame` + custom-JSON readers, **folding #345** (read info from other JSON files + file-search-after-read). - [ ] `layout.BatchPaths`: pure path computation + explicit `ensure_dirs()` — the **only** function that mkdirs (kills the `paginate()` side effect). - [ ] Excel journal read-only. Folds #345. Part of #696.
Epic A — Batch v3 ·
journal.py+layout.py. Plan §4.1. New packagecellpy/batch/.Acceptance
Journaldataclass (name, project,pagesas polars with keys-in-columns, session, meta); serialization separated from model.read_journal/write_journal(.json) with a legacy JSON loader for the old shape (versioned).journal_from_frame+ custom-JSON readers, folding batch - read custom json #345 (read info from other JSON files + file-search-after-read).layout.BatchPaths: pure path computation + explicitensure_dirs()— the only function that mkdirs (kills thepaginate()side effect).Folds #345. Part of #696.