0.6.0 - 2026-05-18
Release Notes
Added
-
Reserved three new crate names in the workspace as placeholders for
upcoming verticals:cobre-flow(power flow algorithms),cobre-uc
(MILP-based unit commitment for hydrothermal dispatch), and
cobre-emt(electromagnetic transient analysis). Each ships as an
empty library following the existingcobre-tuireservation pattern
and is not yet implemented. -
Five new columns in
simulation/hydros.parquet, populated for every
(stage, block, hydro)row:equivalent_productivity_mw_per_m3s(MW/(m³/s)) — equivalent
productivityρ_eq. ForConstantProductivityand
LinearizedHeadhydros it is the stored input scalar; for FPHA
hydros it is derived from VHA geometry, the specific productivity
ρ_esp, and the reference operating point(V_ref, Q_ref).accumulated_productivity_mw_per_m3s(MW/(m³/s)) — accumulated
productivityρ_acum: the sum ofρ_eqover each hydro and every
plant downstream of it along the cascade.incremental_inflow_energy_mw(MW) — incremental natural inflow
expressed as energy, computed as
ρ_acum · incremental_inflow_m3s.stored_energy_initial_mwh(MWh) — stored reservoir energy at the
start of the block,
(storage_initial_hm3 − min_storage_hm3) · ρ_acum · 10⁶ / 3600.stored_energy_final_mwh(MWh) — stored reservoir energy at the
end of the block, using the same formula with the final storage.
Removed
-
cobre_stochastic::par::fit_par_annual_with_reductionand its
ReducedOrderFitreturn type. The function had been exposed alongside
the wired PAR(p)-A reduction loop incobre-sddpbut was never called
from production code, and itsφ + ψ̂/12"effective coefficient"
contribution check disagreed with the φ-only check used by the actual
estimation pipeline. The wired path
(apply_annual_prepass_reductions→reduce_entity_orders_annual)
remains the single source of truth. -
Column
productivity_mw_per_m3sfromsimulation/hydros.parquet. The
column wasnullfor FPHA hydros and duplicated input for non-FPHA
hydros. It is replaced by the five always-populated energy columns
listed above. -
Inline
productivity_mw_per_m3sfield on
system/hydros.jsongenerationblocks. The per-stage
productivity coefficient is now authored on every
stage_ranges[]orseasons[]entry in
system/hydro_production_models.jsonunder the same key.
Cases that previously omitted
system/hydro_production_models.jsonand relied on the
entity-level scalar must now ship the file with one entry per
hydro. -
Input files
system/scalar_parameter_definitions.parquetand
system/scalar_parameter_values.parquet. Scalar parameters
for generic constraints (@namereferences) are now authored
in a singlesystem/scalar_parameters.jsoncarrying one
object per parameter with akinddiscriminator and
kind-specific payload (value,values, or
computed_spec). -
Several
config.jsonfields whose values were no longer wired to any
downstream consumer:modeling.inflow_non_negativity.penalty_cost(the
per-hydro slack cost is now sourced exclusively from
penalties.json::hydro.inflow_nonnegativity_cost),
training.cut_formulation,training.forward_pass,
simulation.policy_type,simulation.output_mode,simulation.output_path,
and the legacy export flags
(training,cuts,vertices,simulation,forward_detail,
backward_detail,compression) underexports. Any case still carrying
these keys is rejected at parse with anunknown fielderror. -
The
"fixed"value ofestimation.order_selection. Only"pacf"and
"pacf_annual"remain valid; the alias was previously accepted and silently
mapped to"pacf". -
The
versionfield onpenalties.json. The field was parsed but never
consulted; schema-version gating is enforced via the$schemaURL instead.
Changed
-
system/hydro_production_models.json—
productivity_mw_per_m3sis now optional for
constant_productivityandlinearized_headmodels. Omit the
field (or set it tonull) when the value is supplied per stage
bysystem/hydro_energy_productivity.parquet. -
Productivity validation relaxed from strictly positive (
> 0.0)
to non-negative (>= 0.0) forproductivity_mw_per_m3sin
system/hydro_production_models.json,
equivalent_productivity_mw_per_m3sin
system/hydro_energy_productivity.parquet, and
specific_productivity_mw_per_m3s_per_min the same parquet.
A value of0.0is accepted as a planned-outage marker for the
affected(hydro, stage); the LP treats these coefficients as
multipliers, so zero produces zero generation without any
division-by-zero hazard. Negative values are still rejected. -
config.json::modeling.inflow_non_negativity.methodis now a typed
enum with four valid values ("none","truncation","penalty",
"truncation_with_penalty"). Unrecognised strings were previously
silently coerced to"none"; they are now rejected at parse. -
config.json::training.cut_selection.thresholdis consulted only
whenmethod = "level1"(it is the activity-count cutoff for cut
deactivation). The"lml1"and"domination"methods no longer
fall back tothreshold; they now requirememory_windowand
domination_epsilonrespectively, and reject configurations that
omit them.
Breaking Changes
Output schema — simulation/hydros.parquet grows from 31 to 35
columns. The column productivity_mw_per_m3s is removed; five new
non-nullable Float64 columns are added after generation_mwh:
equivalent_productivity_mw_per_m3s,
accumulated_productivity_mw_per_m3s, incremental_inflow_energy_mw,
stored_energy_initial_mwh, stored_energy_final_mwh. The
accompanying variables.csv dictionary file is updated to reflect the
new columns and drops the entry for the removed one.
FPHA validation — Studies that declare a hydro with
generation_model: "fpha" must now supply either VHA geometry plus
specific_productivity_mw_per_m3s_per_m, or (when the optional
system/hydro_energy_productivity.parquet override is in place) a
per-(hydro, stage) equivalent_productivity entry. Cases that
previously loaded with neither source now fail fast at setup time with
an error that names the offending plant and lists the three accepted
remediations.
Hydro productivity authoring — Studies must remove
productivity_mw_per_m3s from every hydros.json generation
block and supply the same value via a
system/hydro_production_models.json entry. For non-FPHA models
(constant_productivity, linearized_head) the field is
positive when present on every stage_ranges[] / seasons[]
entry, and may be omitted (or null) to defer to the parquet
override (see the next entry). The previous opt-in
productivity_override key on those entries is renamed to
productivity_mw_per_m3s; the override semantics (replace the
entity-level base value) no longer apply because there is no
longer an entity-level base value.
Productivity resolution across files — The
equivalent_productivity_mw_per_m3s column in
system/hydro_energy_productivity.parquet now applies to all
hydro generation models, not only FPHA. A row supplying this value
for a non-FPHA hydro is honoured as the equivalent productivity
ρ_eq for that (hydro, stage) instead of being silently ignored.
Studies that supplied a value for the same (hydro, stage) pair
in both system/hydro_production_models.json
(productivity_mw_per_m3s) and system/hydro_energy_productivity.parquet
(equivalent_productivity_mw_per_m3s) are now rejected at load time
with a schema error naming both files. Studies that supplied a value
in neither file for a non-FPHA (hydro, stage) pair are likewise
rejected with a clear coverage-gap error, rather than failing deeper
in the SDDP setup layer.
Scalar parameters file format — The pair of input parquet
files system/scalar_parameter_definitions.parquet and
system/scalar_parameter_values.parquet is removed. Studies
that use scalar parameters in generic constraints must now ship
system/scalar_parameters.json instead. The new file uses one
array entry per parameter with a kind discriminator
(constant, per_stage, seasonal, or computed) and a
kind-specific payload. Authoring order is preserved at parse
time; LP coefficients are unaffected by authoring order
(parameters are looked up by id at LP-build time).
Strict JSON parsing — every input JSON file (config.json,
penalties.json, stages.json, initial_conditions.json, and every
file under system/, constraints/, and scenarios/) now rejects
unknown top-level and per-entry fields with a hard parse error.
Misspellings ("max_outflow" vs "max_outflow_m3s") and stale
configuration keys from earlier releases that previously survived
silently must be fixed before a case will load. The error message
names the unrecognised field.
Migration
- Replace reads of
productivity_mw_per_m3swith
equivalent_productivity_mw_per_m3s. ForConstantProductivityand
LinearizedHeadhydros the numeric value is identical to the
previous column; for FPHA hydros it is the derivedρ_eq
(previouslynull). - Notebooks and dashboards that filtered out the old
nullvalues for
FPHA hydros can now treat all hydros uniformly. - Downstream consumers that need accumulated cascade productivity,
energy-units inflows, or reservoir energy state should read from the
four new columns instead of computing them externally. - Remove
productivity_mw_per_m3sfrom everygenerationblock
insystem/hydros.json; transfer the same numeric value into
the matching entry insystem/hydro_production_models.json
under the same key. - Rename any
productivity_overridekeys in
system/hydro_production_models.jsonto
productivity_mw_per_m3s. The values do not change; the
positive-value validation rule still applies, but the
override-versus-default distinction is gone. - Replace
system/scalar_parameter_definitions.parquetand
system/scalar_parameter_values.parquetwith a single
system/scalar_parameters.json(see the schema at
book/src/schemas/scalar_parameters.schema.jsonand the
authoring guide atbook/src/guide/scalar-parameters.md).
cobre-cli 0.6.0
Install cobre-cli 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/cobre-rs/cobre/releases/download/v0.6.0/cobre-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/cobre-rs/cobre/releases/download/v0.6.0/cobre-cli-installer.ps1 | iex"Download cobre-cli 0.6.0
| File | Platform | Checksum |
|---|---|---|
| cobre-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| cobre-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| cobre-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| cobre-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| cobre-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
cobre-mcp 0.6.0
Install cobre-mcp 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/cobre-rs/cobre/releases/download/v0.6.0/cobre-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/cobre-rs/cobre/releases/download/v0.6.0/cobre-mcp-installer.ps1 | iex"Download cobre-mcp 0.6.0
| File | Platform | Checksum |
|---|---|---|
| cobre-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| cobre-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| cobre-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| cobre-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| cobre-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |