> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ionworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026 10 12

<Update label="October 12, 2026" description="A plot drawer for measurements, dashboards you can edit yourself, and metadata filters">
  ## Plot measurements from the table

  The separate comparison page is gone, and so is its 10-measurement limit. Select
  measurements in any measurement table, click **Plot** and pick a plot type: time series
  (with multiple and stacked Y axes), a cycle metric against cycle (optionally relative to a
  reference cycle), voltage against capacity, dQ/dV and dV/dQ, or an analysis when every
  selected measurement has the same kind. A plot type the selection can't support is shown
  disabled with the reason ("4 of 12 have no cycle data").

  The plot opens in a resizable drawer over the table, which stays usable underneath:
  ticking or unticking rows adds or removes measurements from the plot. Closing the drawer
  collapses it to an edge tab, and the plot survives a reload. A finished plot can be
  **saved as a project-wide template**, which then appears as a plot type, or **sent to a
  dashboard** — either for the measurements you picked, or for every measurement matching
  the table's current filters, so new matches appear on their own. A dashboard plot draws
  up to 500 measurements (250 for analysis plots), and the builder says so when a scope is
  larger.

  Your measurement selection now persists across pages, filters, tables and reloads within
  a project, with its actions in the table toolbar. Other paginated tables clear their
  selection when you change page, so a bulk action only ever applies to rows you can see.

  ## Dashboards you can edit yourself

  * **Build a plot without the agent.** A dashboard's **New plot** offers **Build a plot**,
    which starts from the project's measurement table with its search, filters and tags, then
    the same plot types and controls as the drawer, with a live preview. Builder plots can be
    rebuilt in place with **Edit plot**, and each card shows whether it came from the builder
    or the agent.
  * **Change titles, axis labels and colours** from the plot's Configure drawer, including
    five palettes (among them colour-blind-safe and sequential). The agent never overwrites
    your choices; when one of its edits would, the review card lets you keep yours or take
    its version.
  * **See and edit the code behind an agent plot.** **Edit code** (or **View code** without
    edit rights) shows the plot's data plan, transform and parameters with a live preview.
    Save is only enabled once the edited code has run without errors, and a concurrent edit
    is refused rather than overwritten.
  * **Know what a plot shows.** Each plot has an editable one-line description, lists the
    filters that selected its data, and its record count opens a list of the records it
    read (up to 500), grouped by cell, each linking to its page.
  * **Plot cell design data.** Dashboard plots can read electrode and component properties
    (thickness, porosity, loading, active fraction, and separator, electrolyte and case
    properties) and chain from a spec's components to their materials' datasets.

  ## Filter measurements by any metadata

  Measurement tables gain a column for every metadata field on the measurement, its cell
  instance and its cell specification — anode loading, cathode porosity, cycler, ratings,
  material properties and more — all hidden until you show them. Numeric fields filter with
  a range slider over a histogram of the project's values; text fields filter by value. The
  columns panel is searchable and grouped, and CSV export writes these values as columns.
  Column headers are the field's full path in the specification (for example
  `anode.properties.thickness (um)`), the same path a pipeline uses to read it (see
  Pipeline below).

  <AccordionGroup>
    <Accordion title="Studio">
      **Improvements**

      * **Download measurements and analyses as CSV** as well as parquet, at full resolution,
        from a format menu on their download buttons.
      * **Move, resize and dock the agent chat.** Drag the panel or its launcher anywhere,
        resize it from any edge, or dock it to the right so the page reflows beside it.
        Minimized while docked, it becomes an edge tab that shows when a reply is running or
        has finished.
      * **Datasheet fields on cell specifications**: charge and discharge temperature limits,
        maximum pulse current and duration, standard charge and cutoff currents, 1 kHz ACIR,
        DCIR with its pulse length and SOC, and cycle life. The protocol generator uses the
        charge currents, pulse limit and temperature limits.
      * **Section analyses are versioned.** After a measurement is extended or re-exported,
        its analyses show once, labelled with the time their data runs through, with earlier
        versions in a menu and as tabs on the analysis page.
      * **A raw file can update the measurement it belongs to**, extending it when the file
        continues an existing test rather than creating a duplicate.
      * **Raw-data review shows the file beside the measurement it matched**, with both
        spans on one timeline and a different procedure flagged.
      * **Process pending files** on the Raw Data page queues a project's waiting files,
        including ones waiting for their cell.
      * **Drive-cycle uploads for simulations are easier.** Drop several files at once to
        fill matching slots by name, use one profile for every slot, and see each file's
        points, duration and current range as it is checked. An unreadable file is refused on
        its own row, and a protocol missing a drive cycle now fails with a message naming it
        instead of simulating without it.
      * **Formation detection** handles noisy loggers and narrow voltage windows better.
      * **Faster page loads** inside a project, and much faster simulation results for long
        solutions.

      **Fixes**

      * **Projects that have run simulations can be deleted.** Deleting one failed with
        "Invalid reference".
      * **ECM fits and validations with a start or end step work on stored measurements.**
        They were rejected for a missing step column.
      * **Study validation with an open-ended step range** no longer drops steps past the
        first 10,000. A step range on a measurement without step data is now an error.
      * **A rolled cycler file that starts a few seconds before the stored data ends** is
        appended instead of being held for review.
      * **Cancelling a job, simulation, optimization or pipeline you can only view** is now
        refused with a permissions error before anything is stopped.
      * Icons and chips in table cells are vertically centred in every table.
    </Accordion>

    <Accordion title="Pipeline">
      **Improvements**

      * **`DirectEntry` can keep part of a pipeline.** `DirectEntry(pipeline_id=..., keep=[...])`
        takes only the named parameters from a completed pipeline, for example a half-cell fit's
        kinetics without its coin-cell geometry.
      * **`DirectEntry` can read a cell specification.** `DirectEntry(cell_spec_id=...,
        mapping={...})` maps each parameter to a path in the spec (e.g.
        `"anode.properties.thickness"`, `"ratings.capacity"`) and converts each value to the
        unit in the parameter's name, including offset units such as °C to K. `provenance`
        records where each value came from.
      * **`SimplePipeline` is deprecated** in favour of `Pipeline`, which takes the same
        elements. It will be removed no earlier than November 2026; a migration guide is in
        the docs.

      **Fixes**

      * A log-scale fit parameter reached through a chain of parameter links is no longer
        rejected as unused when the links are set out of order.
      * `CycleAgeing` metrics read the right cycle when the solver skips an infeasible
        experiment cycle. Later cycles were shifted by one, reading the wrong values or
        failing the fit.
      * Post-fit validation retries an objective whose worker was lost, instead of dropping it
        from `summary_stats` and `validation_results`.
      * Least-squares fits with an objective initialized from `"Initial voltage [V]"` or
        `"Initial SOC [%]"` no longer stop at their starting point when a fitted parameter also
        changes the initial state.
      * Creating a parameterized model no longer fails when a custom model has a lithiation
        or delithiation parameter without its counterpart.
    </Accordion>

    <Accordion title="Python API">
      **Improvements**

      * **`client.simulation.protocol()` and `protocol_batch()` accept `protocol_id`** to run a
        saved protocol, and `protocol_batch()` accepts `conditions`, an explicit list of runs
        each with its own parameters.
      * **`client.simulation.get_statuses(simulation_ids)`** returns many statuses in one call.
      * **`client.simulation.delete()` and `client.parameterized_model.delete()`**, so a
        project holding either can be cleaned up and deleted from the SDK.
      * **`client.cell_measurement.time_series(..., row_range=(start, stop))`** downloads only
        that window of rows.
      * **Simulation configs are checked for unknown keys.** A misspelt or misplaced key raises
        a `ValueError` naming it, where it was previously ignored.
      * **A pipeline data fit reports its best cost** in `fit.cost`.
      * **`client.simple_pipeline` is deprecated.** Each method warns and names its
        `client.pipeline` equivalent.
      * **`POST /cell_measurements/export` accepts `format="csv"`**, and
        `GET /analyses/{id}/csv` downloads an analysis as CSV.
      * **Analyses created without `columns`** have them filled in from the uploaded file.
    </Accordion>

    <Accordion title="Data Processing">
      **Improvements**

      * **`DataLoader.from_db` with `first_step` / `last_step`** downloads only the rows those
        steps cover instead of the whole time series — a small fraction of the data for one
        cycle of a long test.
    </Accordion>

    <Accordion title="Protocol Simulator">
      **Improvements**

      * **BioLogic `|Q|` limits are supported**, so a partial-discharge drive cycle stops at
        the charge it should. Limits relative to an earlier sequence's charge warn instead of
        being guessed.
      * **A BioLogic protocol whose drive-cycle table doesn't match its step** asks for the
        profile file instead of failing to load.
      * **BT-Test protocols export C-rate step ends.**

      **Fixes**

      * **Current limits in C-rate mode** in BioLogic EC-Lab and BT-Test protocols are read as
        C-rates. A C/20 taper had been read as a current in mA or A.
    </Accordion>

    <Accordion title="Skills">
      **Improvements**

      * **`run-simulations`** covers running a saved protocol by `protocol_id`, explicit run
        lists with `conditions`, `get_statuses()` and `delete()`.
      * **`manage-cells`** covers downloading part of a time series with `row_range`;
        **`manage-projects`** covers deleting parameterized models.
      * **`run-pipelines`** and **`discover-api`** mark `client.simple_pipeline` as deprecated.

      **Fixes**

      * **`manage-projects`** and **`discover-api`** show `client.study` methods with the
        resource ids first and `project_id` last, matching the SDK.
    </Accordion>
  </AccordionGroup>
</Update>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.