**Epic A — Batch v3** · `runner.py` + `result.py` + `store.py`. Plan §4.3–4.4. **Acceptance** - [ ] `load_cell(spec, policy) -> CellResult` — pure-ish: loads one cell, optional recalc, returns cell or exception; no prints, no journal mutation. - [ ] `run(journal, policy, executor="serial")` -> `BatchResult` with per-cell outcome/timing/source; `raise_if_failed()` (strict mode) and `report()`. - [ ] `CellStore(Mapping[str, CellpyCell])` — lazy load on access; `first`/`sample`/`unload`; tab-completion via `_ipython_key_completions_`. **Fixes the `str.lstrip` label-mangling bug** (`xenon_cell`→`enon_cell`). Part of #696.
Epic A — Batch v3 ·
runner.py+result.py+store.py. Plan §4.3–4.4.Acceptance
load_cell(spec, policy) -> CellResult— pure-ish: loads one cell, optional recalc, returns cell or exception; no prints, no journal mutation.run(journal, policy, executor="serial")->BatchResultwith per-cell outcome/timing/source;raise_if_failed()(strict mode) andreport().CellStore(Mapping[str, CellpyCell])— lazy load on access;first/sample/unload; tab-completion via_ipython_key_completions_. Fixes thestr.lstriplabel-mangling bug (xenon_cell→enon_cell).Part of #696.