> ## 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 05

<Update label="October 5, 2026" description="Measurement tags, cell batches and CAD models, and a lab utilization history">
  ## Tag your measurements

  Measurements can carry free-form tags — "baseline", "rpt", "batch-7" — added the way you
  would in Notion: type to find one of the project's existing tags or create a new one.
  Tags match regardless of case and reuse the project's existing spelling. Click a tag
  chip in any measurement table to filter by it, and a second to narrow further; tag
  several measurements at once; and find measurements by tag in global search. The spec
  and instance pages gain the tag column and filter, plus a type filter.

  Through the API, measurements accept `tags` on create and `PATCH`, lists filter with
  `tags_all` / `tags_any`, `GET /cell_measurements/tags` lists the project's tags with
  usage counts, and `POST /cell_measurements/tags/bulk` adds and removes tags on up to
  1000 measurements.

  ## Cell batches and CAD models

  * **Batches are records of their own.** A cell's manufacturing lot used to be a text
    field on each instance. It is now a batch belonging to a cell specification, with a
    name, notes, manufacture date and properties. Existing batch text has been converted
    into batches. Deleting a batch keeps its instances. **This changes the API:** cell
    instances replace `batch` with a writable `batch_id` and a read-only `batch_name`, and
    batches have their own endpoints under `/cell_specifications/{id}/cell_batches` and
    `/cell_batches/{id}`.
  * **Attach a CAD model to a cell specification** (`.step`, `.iges`, `.stl`, `.obj`,
    `.ply`, `.glb`, `.off`, up to 100 MB). A rendered thumbnail shows on the spec page and
    in the Cells table.

  ## Lab: utilization history and channel checks

  * **A Utilization history page** shows the cycler fleet over time as bars stacked by
    state (occupied, stale, free, out of service), from 30 days to 10 years, daily to
    annually, as a share or as a channel count. Open it from **History** under the
    utilization figure.
  * **Scheduling checks channel ratings.** The Schedule dialog shows the voltage and
    current range the protocol reaches, and flags any channel whose ratings it would
    exceed ("Draws 7.5 A, rated 5 A") or whose ratings are unknown. It warns but does not
    block.
  * **A test request shows what actually happened** once it starts: the channel and window
    it ran on, a link to the measurement it produced, actual against estimated duration,
    and live channel data while it runs. Schedule is now the first row action in the Test
    Scheduler.

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

      * **Simulate a protocol from its own page.** A **Simulate** button runs the saved
        protocol against a cell and model you choose, with its inputs prefilled and
        comma-separated values sweeping. **Full setup** opens the full form with the protocol
        preselected.
      * **Looping protocols no longer need a setting raised.** Max backward jumps now defaults
        to 1000 and has left the simulation forms; a simulation that exceeds it offers **Rerun
        with higher limit**.
      * **Cycles plots for every simulation**, not only Cycle Aging (EIS excepted).
      * **Auto-generated analyses open on a plot suited to their kind**: retention against
        cycle for cycling, capacity against C-rate for a rate test, resistance against SOC for
        a pulse sweep, charge and discharge capacity for formation.
      * **Rate-capability analyses record each step's start and end voltage**, so a step that
        began below the upper cutoff is visible as such rather than looking like poor rate
        capability.
      * **Analysis detection covers more test shapes.** Staircase charges and pulses logged in
        stages are read as one load, GITT and incremental-OCV titrations are found as pulse
        sections, capacity-capped rate tests keep their slow and fast steps, and a record that
        changes voltage window between tests (formation then rate tests, for example) reads
        each test against its own window. Stored analyses have been re-derived.
      * **Invite a member as Member or Admin.** The Members invite box has a role choice
        defaulting to Member; inviting someone who is already a member keeps their role.
      * **Faster time-series loading** for large measurements, which now fetch only the part
        of the file a plot needs.
      * **Deleting a study says its simulations are kept**, and how to delete them first if
        you want to. Study simulation counts stay current.
      * The project members panel says clearly when everyone in the organization is already
        on the project.
      * Simulation actions in study, model and protocol grids now show only when you can
        carry them out.
      * The Cells table gives the name column most of its width; measurement tables beside a
        details card no longer hide their toolbar on a laptop screen.

      **Fixes**

      * **Project Contributors can create pipelines.** Creating one failed for members whose
        organization role was Member.
      * **The protocol generator no longer puts cutoffs on its own safety limits.** A step
        ending on or past the protocol's safety limit is now an error, so a generated test no
        longer aborts in its first cycle.
      * **Older Data Fit and Validation results draw their plots again**, for jobs from before
        March 2026 that showed a legend and no plots.
      * **Adding a time-series plot to a simulation in a study loads it.** It could sit on
        "Loading variables" indefinitely.
      * **Comparing measurements keeps the Cycles tab** when both have cycle data.
      * **Table search is consistent as you type**: a whole word no longer returns more
        loosely related rows than a partial one.
      * **The specification-name filter on the Measurements list applies.** It showed the pill
        but kept every row.
      * A material's **Used by cell specifications** table no longer empties on scroll.
      * The optimizations list and the lab utilization plot fill the page height.
    </Accordion>

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

      * **`iwp.Parameter` is immutable.** The `set_*` methods are replaced by copies:
        `with_bounds`, `with_initial_value`, `with_fitting_scale`, `with_normalize`,
        `with_prior` and `with_initial_guess_distribution`. Assigning `p.bounds` or
        `p.initial_value` raises, naming the method to use instead.
      * **A half-cell `GITTModel` can start from `"Initial voltage [V]"`.** It used to fail,
        or, with a full-cell parameter set, start at the wrong voltage.

      **Fixes**

      * **Objective-level constraints are applied with every SciPy optimizer.**
        `ScipyMinimize` (all methods) and `ScipyShgo` silently ignored them.
      * The regularization docs now state that a penalty contributes `w * fun**2`, not
        `w * fun`, so `fun` should not be squared beforehand.
    </Accordion>

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

      * **Manage memberships from the SDK.** `client.organization` gains `members()`,
        `get_member()`, `invite()`, `set_role()`, `deactivate()`, `reactivate()`,
        `resend_invite()` and `remove()`; `client.project` gains `roles()`, `add_member()`,
        `invite_member()`, `update_member()` and `remove_member()`. Invites take a role and
        default to Member.
      * **`client.analysis.create(..., plots=[...])`** stores plot presets for an analysis,
        validated against its columns.
      * **The MCP server can run simulations**, with `run_simulation`, `run_simulation_batch`
        and `wait_for_simulations`.
      * **`POST /jobs` is retired** and returns `410 Gone` naming the endpoint to use instead:
        `/pipelines`, `/simulations/with-template/batch`, `/optimizations` or the ECM fit
        endpoints.

      **Fixes**

      * **A malformed id returns `400`**, not `500` — for example `client.job.cancel(None)`.
      * **NaN or Infinity in analysis metadata returns `400`** naming the offending key,
        instead of `500`.
    </Accordion>

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

      * **`generate_experiment` splits a CC-CV charge logged as one step** into a CC step and
        a CV step, so long cycling replays stay within the cell's voltage window. Pass
        `split_cc_cv=False` for the previous behaviour.
      * **Step typing works for sub-mA coin-cell data.** Rest and constant-current thresholds
        scale with the cell's rated capacity (pass `cell_spec`), or with the data's own
        current, instead of typing every step as Rest.
      * **Unparseable numbers warn.** Values like `"N/A"` in voltage or current columns are
        reported with the column and examples rather than silently becoming null.
      * **Step labels and groups are removed.** `iwdata.steps.label_*` and `validate` are
        gone, steps no longer carry `Label` / `Group number`, and the `gitt_to_ocp` transform
        is removed (use `rest_to_ocp`).

      **Fixes**

      * **Neware BTSDA flat CSVs** map `Cycle Index` / `Step Index`, so cycles no longer
        collapse into one, and capacity and energy columns read as floats.
      * The empty-column warning from Excel readers is silenced.
    </Accordion>

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

      * **`run-pipelines` replaces `run-simple-pipelines`**, steering fits to regular
        pipelines so they appear in the web app.
      * **`run-simulations`** covers running simulations through the MCP server.
      * **`discover-api`** lists the new membership methods; **`manage-cells`** documents
        analysis plot presets, measurement tags and cell batches; **`process-data`** documents
        passing a cell spec for coin-cell step typing.
    </Accordion>
  </AccordionGroup>
</Update>


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