> ## 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 07 20

<Update label="July 20, 2026" description="The new Lab view for tracking cyclers and channels, measurement analyses, and throughput-based degradation in the ECM">
  ## Lab view — see every cycler and channel at a glance

  A new project-scoped **Lab** dashboard shows all of your test equipment
  organized as sites → cyclers → channels, so you can tell at a glance what's
  running where. The Lab wall lists every cycler with a utilization bar and
  per-state channel counts, filterable by site and by amp/volt rating range.
  Drill into a cycler to see its full channel grid, or into a single channel to
  see exactly which cell is on test, its measurement history, and an editable
  out-of-service toggle with notes.

  Each channel's state — **occupied**, **stale** (a run that stopped updating and
  likely needs attention), **free**, or **out of commission** — is derived from
  the measurements linked to it, so the view stays accurate without any live
  telemetry hookup. Channel cards also show an estimated end time for
  still-running tests when one is available. A set of scheduling rules keeps the
  data honest: two runs can't overlap on the same channel, and a channel can't be
  taken out of commission while a test is active.

  The same equipment picture is available programmatically through the new
  `client.lab` sub-client in the Python SDK — ask for overall utilization, list
  free channels (optionally filtered by required ratings), find stale channels
  that need attention, or look up what's on a specific channel, all from a single
  call.

  ## Measurement analyses

  You can now attach **analyses** to a measurement — a named table of extracted
  features (e.g. ECM parameters from EIS, or LLI/LAM degradation points from RPT
  data) stored alongside the raw measurement. The measurement detail page lists a
  measurement's analyses, and each analysis has its own detail page with a data
  preview, downloadable parquet, and a link back to its source measurement.
  Analyses are fully supported in the Python SDK via the new `client.analysis`
  client (create from a polars/pandas DataFrame, list, fetch data, update,
  delete).

  ## Throughput-based degradation in the ECM

  The Equivalent Circuit Model (`iwp.models.ECM`) gained an opt-in **degradation
  capability**: capacity and internal resistance can now evolve as user-supplied
  functions of capacity throughput (the running integral of |current|), so a
  single simulation can capture fade over the course of a run. Both options
  default to constant, so existing ECM configs are unaffected.

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

      * **Global search** now covers cyclers and channels alongside projects,
        studies, and cells — search from anywhere and jump straight to a channel's
        detail page.
      * The cell specification detail page is now organized into three tabs —
        **Measurements**, **Instances**, and **Parameterized models** — each with
        server-side pagination, filtering, and sorting.
      * Organization admins can now **deactivate a member** to suspend their access
        while preserving their membership and role, then reactivate them later. A
        deactivated user sees a dedicated screen with an option to switch to another
        organization.
      * Materials and components are now scoped to the project of the cell
        specification that references them, keeping each project's parameter data
        within its own boundary.

      **Fixes**

      * Sorting the project measurements grid by the **measurement id** column no
        longer makes every row disappear.
    </Accordion>

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

      * DataFit runs with a Bayesian sampler now return the **full posterior
        sample chain** (per-parameter samples and per-sample costs), not just the
        point estimate, retrievable from the job result.
    </Accordion>

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

      * New `client.lab` sub-client for point-in-time equipment questions:
        overall utilization, free channels (optionally filtered by required amp/volt
        ratings), stale channels needing attention, and what's on a given channel.
      * New `client.analysis` sub-client for creating, listing, fetching, updating,
        and deleting measurement analyses, serializing DataFrames to and from
        parquet transparently.
      * Submitted pipelines can now reference local data with `file:` and `folder:`
        refs; their contents are read and inlined at submit time, and the same
        inline row cap that applies to raw DataFrames is now correctly enforced for
        these refs (a `file:` pointing at a very large CSV no longer slips through).
      * Raw-data upload now uses the same fast signed-URL flow as regular
        measurement uploads.
    </Accordion>

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

      * Arbin **Power Simulation** drive cycles are now supported — they parse into
        a drive-cycle step that can apply a power (W) waveform rather than current,
        and Arbin cumulative capacity/energy counters are modelled correctly across
        steps.

      **Fixes**

      * Arbin `SetValue` steps that read a last-step quantity (e.g.
        `MV_UD1 = LS_CHAN_Discharge_Capacity`, the "measure C/20 capacity then log
        it" idiom) now resolve correctly at simulation time instead of failing with
        an unresolved-variable error, so the downstream steps that depend on that
        value run.
      * Arbin subschedule steps that happen to share a step index and label with a
        step in the parent schedule no longer collide with a duplicate-step-name
        error; each subschedule's steps are kept distinct while still resolving
        `goto` targets correctly.
    </Accordion>
  </AccordionGroup>
</Update>
