Skip to main content
May 4, 2026
Full optimization experiment editor, Arbin reader, Maccor coverage, UCP input schema, baseline migration squash

Full editor for optimization experiments

Optimization experiments now use the same protocol editor as the rest of the app. The bare text field has been replaced with a CodeMirror-based editor featuring YAML syntax highlighting, dark-mode support, frontend pre-validation, and the full protocol-builder dialog for picking templates and tuning steps. New protocols pre-load a “Constant Current Charge” template so users have a working starting point.

Iterative metrics for design optimization

Design optimization now supports CyclewiseMetric and StepwiseMetric wrappers end-to-end. The optimization form lets you target a metric on a specific cycle or step with bounded input fields driven by the parsed experiment, mix pipeline variables alongside PyBaMM variables, and round-trips wrapped metrics through save/load. The underlying UCP→PyBaMM parser also fixes a long-standing bug where repeated blocks were flat-expanded, which broke solution.cycles indexing for cycle-wise metrics. Two new templates ship: a simplified Charge optimization and composite system models.

Arbin cycler support

ionworksdata now reads native Arbin exports — CSV, XLSX, and the binary .res format. The .res reader uses mdb-export to extract data from the underlying Access database (no Python MDB library required), sorts rows by DateTime to handle interleaved multi-session recordings, and reads the absolute start time from Global_Table.Start_DateTime. Auto-detection picks the right reader from file headers, and arbin res is also exposed as an explicit reader name.

Maccor protocol coverage

The Maccor parser and simulator now handle several real-world protocol features that previously failed at parse time or during simulation, including per-limit safety gotos, Chg/Dis Func CCCV step types, and robust VAR setvar handling. The Maccor ionworksdata reader also gained support for the compact short-form column header set used by some firmware versions, which previously crashed with ColumnNotFoundError: "Time [s]" and silently dropped capacity/energy columns.

Machine-checkable UCP input schema

The discovery endpoint /discovery/schemas/protocol now exposes a JSON Schema generated from the parser’s own enums, matching the actual YAML authoring format (single-key dicts like {Charge: {...}}) rather than the parsed in-memory shape. Parity tests round-trip 17 good and 6 bad fixtures through both the schema and the parser so they cannot drift. Submitting the legacy kind: shape to POST /protocols/validate now returns a helpful error pointing at the canonical YAML examples, and the discover-api and run-simulations skills show local pre-validation via jsonschema.validate(...).
Improvements
  • Organization ID is now denormalized onto every row that sits under an organization (including join tables), simplifying RLS checks and cross-resource queries.
  • The squashed baseline migration collapses ~100 historical migrations into a single idempotent file, with a CI/CD repair step that handles out-of-order feature-branch deploys on internal environments.
  • The Ionworks Agent tab has been replaced with a static instructions page pointing to the Ionworks Agentic Toolkit; the in-app pydantic-ai chat agent has been removed in favour of the SKILL.md-based workflow.
  • New cell specifications no longer pre-fill a default capacity, so users enter the actual cell capacity from the start.
Fixes
  • Storage permissions are now enforced at the organization level so members of the same org can read each other’s measurement files as expected.
  • created_by_email is now consistently populated on cell-spec, cell-instance, and cell-measurement responses across both get and list endpoints.
  • Simulation usage is aggregated at the organization level (matching the org-level usage limit that the backend already enforces) and is fetched from a dedicated GET /organizations/current/usage endpoint.
Improvements
  • Cost / objective-function layer restructured into focused modules (accumulators, error metrics, normalizers, NaN policies) with several correctness fixes around scalarization, normalization defaults, and partial-solution handling.
  • FunctionParameters are now serialized correctly inside objective and data-fit configs, so configs with function-valued parameters round-trip through JSON.
Fixes
  • Half-cell ECM now exposes anode and cathode potential variables (Anode potential [V], Cathode potential [V]) for plotting and metrics.
  • get_cycle_metrics keeps the Cycle count column name on output instead of renaming it to Cycle number, matching the input convention used throughout the data pipeline.
Improvements
  • validate_measurement_data, CellMeasurement.create, and CellMeasurement.create_or_get accept a skip_checks parameter so callers can relax a single strict validator (e.g. time_gaps) instead of disabling strict mode wholesale. Unknown check names raise ValueError, and the canonical set is exposed as ionworks.validators.STRICT_CHECK_NAMES. validate_strict=True is now the recommended default.
Improvements
  • New Arbin reader covering CSV, XLSX, and native .res exports (see the highlight above).
  • Maccor reader now accepts the compact short-form column header set used by some cycler firmware versions.
Improvements
  • New electrolyte parameterization page with a worked Landesfeind fit example.
  • Optimization experiment editor, iterative metrics, simplified Charge template, and composite system models are documented.
  • Custom variables reference now documents anode/cathode potential exposure on the half-cell ECM (English and Japanese).
  • Maccor native CCCV step type is documented (English and Japanese).
  • Arbin is listed in the supported cyclers table.
  • SEO metadata (keywords, OG tags, tightened descriptions) added across the docs site, including expanded data-fitting guide descriptions.
Improvements
  • Each mirrored package (ionworksdata, ionworks-schema, ionworks-api, iwutil, ionworkspipeline, skills) now ships a per-package CHANGELOG.md in Keep-a-Changelog format, written and validated as part of the release workflows.
  • discover-api and run-simulations skills updated to reference the new UCP input JSON Schema and demonstrate local pre-validation.
  • upload-data skill updated to recommend validate_strict=True and document the new skip_checks parameter.