Skip to content

Release 0.3.3#55

Merged
Str4vinci merged 19 commits into
mainfrom
release/0.3.3
Jul 2, 2026
Merged

Release 0.3.3#55
Str4vinci merged 19 commits into
mainfrom
release/0.3.3

Conversation

@Str4vinci

Copy link
Copy Markdown
Owner

Release 0.3.3 from develop. Summary: finalizes changelog and version metadata for 0.3.3, includes workflow hardening, bug fixes, SSRN citation metadata, and docs updates. Verification: uv run ruff check breos/ tests/ tools/, uv run ruff format --check breos/ tests/ tools/, uv run pytest tests/ -v (254 passed), uv run python tools/verify_release_artifacts.py, uv run --extra docs sphinx-build -b html docs docs/_build/html.

Str4vinci added 19 commits June 26, 2026 15:31
Back-merge 0.3.2 release into develop
Add the under-submission paper (Rodrigues, Delgado, Mendes, Guimarães) as the
preferred BibTeX citation, keeping the software entry as a secondary option, so
the README matches the preferred-citation block in CITATION.cff.
Lead README citation with the manuscript
- Bump version-pinned install snippet and status text to 0.3.2 (docs install
  command pointed at v0.3.0; index status said 0.3.0; README scope heading).
- Mark roadmap items shipped in 0.3.2: configurable transposition models
  (with ground reflectance / Perez inputs), strict unknown-key config
  validation, and the stop-mutating-input-config cleanup. Declarative config
  schema remains the pending full step.
Sync docs and roadmap to the 0.3.2 release
__post_init__ unconditionally overwrote gamma_pmp with T_Pmax_pct, so the
constructor argument was silently ignored. Only default when gamma_pmp is
None, matching the alpha_sc_abs/beta_voc_abs override pattern.
pvlib.inverter.pvwatts takes pdc0 as the DC-input limit, with the AC
nameplate at eta_inv_nom * pdc0. dc_to_ac passed the intended AC nameplate
(pv_peak / loading ratio) as pdc0, so output clipped ~4% below the rating
used by InverterConfig.size_from_pv, the App energy balance, economics
CAPEX sizing, and the CLI's ac_rating_kw. Derive pdc0 = nameplate / eta so
all paths share one nameplate definition. App results are unchanged (its
DC->AC conversion goes through simulate_energy_balance).
CostParams.sell_price_inflation and the cost_analysis_projection parameter
existed, but there was no config key and neither the App runner nor the
Monte Carlo runner passed it, so the public paths always projected export
revenue with 0.0. Add the config key (default 0.0, bit-for-bit compatible),
validate it, thread it through both projection call sites, expose a
--sell-price-inflation CLI flag, and surface it in the dry-run summary.
Its datasheet points were NMOT ratings (800 W/m2, Mpp=415), but the CEC
single-diode fit in breos.cec_fit interprets Vmp/Imp/Voc/Isc as STC values,
so the entry produced silently wrong model parameters. Configs referencing
it now hit the standard "not found. Available: ..." catalog error;
Suntech_STP550S_STC is the same physical module rated at STC.
BatteryConfig defaulted to 0.80, the optimizer battery-spec fallback to 0.8,
and the App config default to 0.70 — three surfaces, two values. Align on
0.70 (the documented App default). App and CLI behavior is unchanged since
they always pass the config value explicitly; direct BatteryConfig users
relying on the implicit 0.80 now get replacement at 70% SOH and can pass
eol_percentage=0.8 to keep the old threshold.
Prepare 0.3.3 workflow and bug-fix release
@Str4vinci Str4vinci merged commit 2cca302 into main Jul 2, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant