Skip to main content
June 8, 2026
Brand-aligned theme refresh, semantic zoom on validation plots, Navigator helper and new data agent skills, tunable solver_kwargs with PyBaMM 26.6 support

Brand-aligned theme refresh

Studio is no longer the unmodified Minimals MUI template — it now follows the Ionworks brand guide. Pink (#FF87B7) drives primary CTAs, selection, focus, and active nav/tabs; green-black (#020E0D) anchors text and neutrals; blue (#0C68E9) is reserved for hyperlinks so links stay obviously clickable. Corners are sharpened to 4px, typography is updated, and JSON viewers, plots, tables, and ID chips have been re-skinned to match. All changes are theme-level — no component or data-flow changes — so every screen lifts at once.

Semantic zoom on pipeline validation plots

Validation plots now fetch their data on demand and decimate server-side based on the visible x-range. Box-zoom into a region re-requests denser data for that window; a step-back zoom and a full-reset control are stacked in a zoom history. Pipeline and datafit jobs gain two new endpoints (/pipelines/validations/{job_id}/plot_data and /pipelines/datafits/{job_id}/plot_data) that return decimated traces with stride sampling, cached for one hour per (job_id, organization_id).

Tunable solver_kwargs with PyBaMM 26.6 support

iwp.Simulation accepts a new solver_kwargs dict that merges over the tuned IonworksSolver defaults — e.g. solver_kwargs={"options": {"compile": True}} flips IDAKLU compilation on for long unified-experiment runs without restating the rest of the solver configuration. It threads through every simulation-backed objective (CurrentDriven, Pulse, CalendarAgeing, CycleAgeing). The workspace also upgrades to PyBaMM 26.6 (first release with the serialisation kernel), with a compatibility sniffer that accepts both the new fully-qualified $type tags and the legacy short type tags so historical and freshly-generated payloads both decode.ionworks.Navigator is a new cached walker over the cell_spec → cell_instance → cell_measurement → steps / time_series hierarchy. It memoises every lookup, paginates automatically, returns name-sorted listings for stable iteration, and copies cached DataFrames so callers can’t corrupt the cache. Two new agent skills land alongside it: build-data-report (multi-section markdown + PDF analysis covering rate capability, DCIR, OCV, GITT, entropic, aging, and gap analysis) and validate-data (a pre-upload gate covering header audit, schema, parquet, and strict measurement validators).
Improvements
  • Cell-measurements list endpoints have been consolidated and now use server-side pagination across project, spec, and instance scopes. The frontend resolves spec metadata from the existing cells store and pre-fetches spec-level filters (spec_name, spec_anode, spec_cathode) separately so the main list query stays cheap.
Fixes
  • Deleting a project no longer shows a misleading “The project you are trying to access does not exist…” toast. The delete confirmation dialog also now requires typing the exact project name to enable the Delete project button, matching the destructive-action pattern used elsewhere.
  • Signed-URL generation for measurement files retries on httpx.ReadTimeout with 0.5 s / 1.0 s backoff; a new batch endpoint replaces the N parallel calls in the file-list path with a single POST. File downloads also retry on JSONDecodeError (raised when the storage gateway returns HTML instead of JSON under load) and surface exhausted attempts as a structured 502.
  • Cell-instance measurements grid no longer renders the previous spec’s rows after navigating between specs; CellSelector shows a skeleton while loading and no longer bails when an unrelated cells fetch is in flight; the ECM measurement selector switched from loading every project measurement into memory to true server-side pagination.
  • The list_for_template drive-cycles endpoint now awaits execute() — previously it raised AttributeError on .data at runtime — and has been upgraded to standard limit / offset pagination.
  • RHFAutocomplete now forwards slotProps (listbox, paper, popper, …) as a proper slotProps object instead of spreading them as flat props that MUI silently ignored.
Improvements
  • skip_objective_callbacks is a new DataFit option that skips the pre- and post-fit objective callbacks, each of which runs an extra full objective simulation purely to capture initial/final results that the server does not surface. Backend datafit jobs now set it by default for faster cluster fits; local users keep the existing callbacks unless they opt in.
  • Configuration errors raised inside ionworkspipeline are now UserConfigurationError (the new name for ConfigurationError) instead of bare ValueError, so the job classifier reliably maps them to CONFIGURATION_ERROR rather than SOLVER_ERROR and the Configuration error UI path lights up correctly.
Improvements
  • client.simulation.get_result() returns a typed SimulationResult dataclass with time_series and steps as DataFrames (polars by default, pandas when set_dataframe_backend("pandas") is active) and metrics as a plain dict, replacing the previous raw-dict response. Callers use attribute access and .columns membership checks instead of dict-key lookups.
Improvements
  • DataLoader.data and DataLoader.steps no longer emit the Polars-migration FutureWarning on every access — the polars return type is now the established default.
Improvements
  • New sim-results SDK skill: fetching time-series and step data from a completed simulation, computing SOC via step-boundary cumulation, identifying step types by mean current, deriving DCIR from pulse steps using an OCV baseline plus onset current, and polars-aware plotting conventions.
  • The parameterize skill now documents electrode geometry (thickness, porosity, particle radius, AM fraction, maximum concentration) as a hard build requirement for DFN/SPMe — a physics-based model cannot be assembled without these structural parameters. Geometry lives on the cell spec’s components (not on a measurement), can come from teardown / metrology / vendor datasheet / literature, and FPBM is no longer offered as “available” for Tier-2 cells that lack it.