May 25, 2026
Tighter measurement-data validation, broader UCP-to-cycler conversion, Wasserstein cost function
Stronger measurement-data validation and processing
A new strict-mode check,capacity_energy_from_current_power, compares the
reported Discharge/Charge capacity [A.h] and …energy [W.h] columns against a
per-step trapezoidal integral of Current [A] and Power [W], flagging
row-by-row mismatches (10% default tolerance) so a transient mid-step error that
later cancels out is still caught. When the reported charge/discharge columns are
swapped — common in half-cell exports — fix_swapped_charge_discharge_columns
detects and corrects the labels. The current-sign-convention check now weights
each step’s vote by the charge it actually passes (∫|I| dt) instead of its row
count, so a long near-zero-current voltage hold no longer outvotes genuine
discharge pulses and raises a false CURRENT_SIGN_REVERSED.Small-current coin- and half-cell data now processes end-to-end: rest-step
detection scales its threshold to the trace’s peak current (sub-mA currents are
no longer all classified as rest), the auto-flip retry drops stale
capacity/energy columns before recomputing, and caller-supplied Step count
labels survive sign correction. A new generic parquet reader uses the same
alias-based column detection as the CSV reader, and folder: data references now
accept time_series.parquet / steps.parquet (preferred over CSV when both are
present).Broader, validated UCP-to-cycler conversion
The UCP-to-Arbin and UCP-to-Maccor converters handle more end-condition and step types (variable / loop / compound ends, temperature ends, Maccor pause steps) and now validate up front, raising clear errors on features a target cycler genuinely cannot represent instead of emitting files that fail to re-parse.Wasserstein distance cost function
iwp.costs.Wasserstein adds the 1-Wasserstein (earth mover’s) distance as a
data-fitting cost, comparing model output and data as distributions rather than
point-by-point. Available in both the pipeline and schema packages.Studio
Studio
Improvements
- Protocols list loads dramatically faster: the experiment-templates list
endpoint now omits heavy JSONB columns by default (~7.5 KB vs 7.7 MB on 22
templates), with callers opting into
protocol_config,parameters_schema, and similar fields via?include=. - Failed pipelines can be resubmitted from the pipeline details page, which now shows an error banner that deep-links to each failed element; individual elements display an inline error alert.
- Material property dataset plots now have an always-visible vertical legend with units, positioned to the right of the plot.
- Filtering measurements by ID on the project data page now narrows the list —
the
idquery parameter was previously dropped silently, returning every measurement. - Material dataset upload no longer shifts column indices when a CSV has an unnamed leading column, and now requires every column to be named (with a clear error) instead of silently skipping unnamed ones.
- Project membership management, active-organization switching, and parameterized-model deletion now go through the backend API instead of direct database writes, so they behave consistently under row-level security.
Python API
Python API
Improvements
client.auth_check()andclient.whoami()verify which user and organization a configured API key resolves to, backed by a newGET /auth/healthendpoint — useful for debugging wrong-org (403) errors and confirming which key is active.
Protocol Simulator
Protocol Simulator
Improvements
- Maccor protocols with
SubRoutsteps survive UCP YAML round-trips: resolved subroutine steps are namespaced and written back into the YAML, and intra-subroutinegototargets resolve at simulation time, fixing theSubroutine '<name>' not founderror in the parse-then-simulate flow.
Skills
Skills
Improvements
- New
validate-dataskill guides agents through the measurement-data validation and column-fix workflow. - A Codex plugin manifest was added so the Ionworks skills package installs in Codex alongside Claude Code.