Pre-Release Notes ================= Unreleased ---------- Domain and input contracts ~~~~~~~~~~~~~~~~~~~~~~~~~~ This pre-release changes the following contracts without compatibility shims: - Values owned by a ``Stream`` and its segment records are read-only. Mutations use explicit stream assignment, indexed-value, or segment-update APIs. - Period weights use one validation policy: omitted trailing weights become ``1.0``; excess, non-finite, negative, and all-zero vectors are rejected. - Structured process-stream and nested thermal-profile inputs reject unknown fields. Process streams accept the canonical ``name`` and ``heat_capacity_flowrate`` spellings only. - Workspace bundles use schema version ``2`` and ``case_input``. Version ``1``, unknown versions, and the retired ``payload`` field are rejected. - Segmented process streams and utilities share the same semantic validation in reports and preparation, including parent aggregate consistency. Private helper ownership ~~~~~~~~~~~~~~~~~~~~~~~~ - Private class helpers are grouped under owner-oriented packages for streams, values, collections, problem tables, problem orchestration, workspaces, and heat exchangers. - Runtime stream-segment, exchanger-period, and exchanger-area-slice record classes are parent-owned implementation details. Construct them through ``Stream`` and ``HeatExchanger`` mappings; ``StreamSegmentSchema`` remains the supported external segment input contract. - The former public record imports and their Python pickle paths are removed without aliases or compatibility shims. - Synthesis schemas now have concrete common, topology, method, task, and result owners. The compatibility-only ``methods``, ``tasks``, and ``results`` modules and the synthesis package re-export barrel are removed. Import concrete owner modules instead; old barrel-qualified pickle paths are unsupported. - Intentional public barrels at ``OpenPinch``, ``OpenPinch.lib``, and ``OpenPinch.lib.schemas`` remain, but their lazy synthesis exports resolve directly to concrete owner modules. - Process-MVR records, multiperiod HPR period cases, dashboard graph state, graph specifications/metadata, and HEN solver runtime records are private to their owning services. Documented parent components, schemas, direct-MVR models, and HEN equation-model classes remain available. Period-native PDM and utility constraints ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PDM decompositions expose ordered ``period_targets`` with explicit period identities and indices. Clipped temperatures and active-stream flags are period-indexed; the retired singular target and clipped-temperature fields do not exist. - Each operating period uses its own utility targets and pinch temperature. Shared topology is the union of streams and matches active in any period, and a pinch side is solved when any period requires it. - Above- and below-pinch amalgamation retains every period's duties, temperatures, approach variables, split fractions, and explicit non-isothermal branch outlet temperatures. - Non-isothermal warm starts normalize hot split fractions across cold matches and cold split fractions across hot matches independently in every period. - Segmented utilities use local per-segment ``dt_cont`` values. The inlet uses the first segment contribution, the solved match outlet uses the traversed segment contribution, and an exact boundary uses the larger adjacent value. Period-native HEN results ~~~~~~~~~~~~~~~~~~~~~~~~~ - ``HeatExchanger`` retains shared topology, design area, and capital fields. Operational duty, activity, approaches, split fractions, and source/sink temperatures are stored in non-empty ordered ``period_states`` containing parent-owned period-state records. - The retired exchanger-level operating scalar fields do not exist. Use ``exchanger.state(period_id)``; omission is accepted only for an exchanger with exactly one period state. - Multiperiod duty, temperature, diagram, export, and controllability queries require ``period_id``. No implicit period-zero selection is provided. - Extraction walks every period array, retains matches active only outside the first period, and prefers explicit non-isothermal branch outlet temperatures. Solved branch split fractions keep downstream duty checks physically valid. Isolated summaries and HPR economics ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Multiperiod summary replay captures one baseline zone and solves every period against a fresh deep copy. The original zone object, cached results, and recorded targeting specification are restored after success or failure. - Shared simulated-HPR candidates are ranked by weighted operating cost plus weighted feasibility penalty plus maximum annualized capital cost. Weighted backend ``obj`` is used only for backends that provide no cost breakdown. - Weighted public HPR summaries average operating fields, use the maximum capital, annualized-capital, compressor-capital, and heat-exchanger-capital fields, and recompute total annualized cost as weighted operating cost plus maximum annualized capital. Non-HPR fields retain weighted averaging.