BREOS v0.4.0
BREOS 0.4.0 adds opt-in multi-chemistry BLAST-Lite degradation modeling while preserving breos.App as the stable public entrypoint.
Highlights
- Vendors and integrates 14 BLAST-Lite cell degradation models with stable model keys, scientific provenance, experimental-range and aging-horizon warnings, JSON-safe state snapshots, cross-year threading, and replacement reset handling.
- Chemistries include Li-ion LFP, NMC, NCA and LMO.
- Adds public Python and CLI battery-model discovery plus explicit
degradation_engine="blast"/blast_modelconfiguration; the existing native LFP degradation path remains the default. - Guards time-varying BLAST power and sigmoid state updates against trajectory-domain overshoot, preventing NaN failures under varying field profiles and preventing artificial capacity recovery when a sigmoid asymptote shrinks.
- Adds fail-loud
BlastNumericalErrordiagnostics, 15-minute BLAST integration coverage, real multi-replacement runner coverage, varying-profile split/thread equivalence, and deterministic 20-year endurance coverage across every model. - Unifies App dispatch on the PVWatts part-load inverter curve, preserving explicit inverter sharing, clipping, conversion losses, and the versioned energy ledger across PV, battery, economics, emissions, and optimization paths.
- Adds model/profile metadata, configuration migration guidance, strengthened release validation, updated documentation, and a nightly plus release-gated BLAST endurance job.
Upgrade notes
Existing breos.App entry points remain available. Native Naumann/Lam LFP degradation remains the default; BLAST is enabled only when explicitly selected with a valid model key. BLAST models are empirical cell models rather than pack-calibrated field models, and long-horizon or out-of-range operation is reported through structured warnings. The Panasonic NCA model warns after its sourced 300-day aging-data horizon.
BLAST remains intentionally unsupported with Monte Carlo and native resistance-fade dispatch in 0.4.0; those combinations raise instead of silently falling back. Numerical results may also change where the corrected PVWatts part-load inverter treatment replaces flat conversion assumptions.
IMPORTANT: BLAST-Lite's models are fit to 1–3 years of accelerated lab aging and extrapolated to decade-plus lifetimes, so its own authors recommend treating the results as qualitative. They're also cell-level models. Upstream suggests real packs run 20–30% short of cell lifetime, and BREOS applies no such derate. Read the SOH curves as scenarios and not as warranties.
Verification
- Python 3.11–3.14 release CI passed.
- 553 fast tests and 2 slow endurance tests passed, with 7 optional/skipped tests.
- All 14 models completed the deterministic 20-year varying-condition endurance fixture with finite states and bounded SOH.
- Strict lint, formatting, documentation, wheel/sdist build, installed-wheel resource smoke, release provenance, and trusted PyPI publishing checks passed.
Acknowledgements
Thanks to Paul Gasper for the BLAST-Lite suggestion!
See CHANGELOG.md for the complete list of changes.