> ## 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 08 17

<Update label="August 17, 2026" description="Your own branding in the nav, new projects that arrive stocked with materials, protocol groups and cycler export, and auto-scheduling proposals for the lab">
  ## Your organization in the navigation

  Organizations can now show **their own logo and name** at the top of the
  navigation. An admin uploads a mark and edits the name in **Organization
  settings → Branding**, and the Ionworks lockup moves to the foot of the nav at
  the same size. An optional **dark-mode logo** can be uploaded alongside it; each
  variant falls back to the other, so an organization with a single mark shows it
  in both themes. An organization that hasn't uploaded anything gets a neutral
  placeholder rather than ours — the Ionworks mark is never paired with someone
  else's name. Branding is gated on its own permission, so granting it does not
  hand over anything else about the organization.

  ## New projects arrive with a materials library

  A new project used to start empty, so building a model meant hand-entering
  chemistries and their properties first. Every new project is now pre-populated
  with **27 materials and 55 property datasets** drawn from
  [LiionDB](https://liiondb.com) — the subset that can actually close a full cell,
  supplying every required characterization parameter for the negative electrode,
  positive electrode and electrolyte. Where the same chemistry was measured by two
  different papers, both are kept as separate materials, because they are two
  independent parameterizations. Creating a project also returns faster now: the
  libraries are copied in the background and land moments after the project
  appears.

  ## Group your protocols, and export them to a cycler

  Protocols can now be collected into named **groups** — a formation set, an aging
  campaign, a requested test matrix. Groups are managed from the Protocols page:
  create, rename, describe or delete one, then assign a protocol from its row menu
  or many at once by selecting rows. Deleting a group keeps its protocols and
  simply ungroups them, and says so with a live count before you confirm. The
  protocol table filters by group, with "Ungrouped" available as its own choice.

  A protocol can also be **exported to a cycler format** from its detail page. In
  the process we fixed a data-integrity bug worth knowing about: a protocol with
  unresolved input parameters previously downloaded as a valid-looking Maccor or
  Arbin file carrying a placeholder expression where a current belonged — a file
  that previewed cleanly and failed only once it reached the hardware. Export now
  refuses an unresolved protocol and tells you which inputs need values.

  ## Propose a schedule for a batch of test requests

  Select a set of requested tests and the Test Scheduler will now **propose the
  earliest reservations** that genuinely fit, for you to review and apply. Each
  request takes the earliest free window across the project's in-service channels,
  in the priority order you send them; tests already booked and measurements
  already running are treated as immutable, so nothing on the wall is ever moved.
  Setup, run and teardown all sit inside the reserved window, and the search is
  unbounded in time — a request comes back unscheduled only when no channel in the
  project could ever take it, which is the one case you can act on. Applying a
  batch is all-or-nothing: if a later reservation conflicts, the earlier ones are
  released rather than left half-booked.

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

      * A booked service visit — on a whole cycler or a single channel — now records
        **when it ends**, not just when it starts. A firmware update and a two-week
        send-away calibration are no longer indistinguishable, channel-hours can be
        counted, and a planned test booked on channels that will be out for service can
        be spotted before the work slips.
      * A new **lab operations report** compiles the digest a lab manager asks for on a
        schedule — momentum, utilization now versus 24 hours / 7 days / 30 days ago,
        what came off test overnight, what frees up today, what is queued behind it,
        what is still waiting to be scheduled, and equipment out of service. Eight
        sections, each independently selectable, available as structured data or
        rendered Markdown.
      * **Thermal chambers** can now be recorded as equipment in their own right,
        sitting alongside cyclers under a site rather than beneath one — a chamber
        commonly holds cells driven by several cyclers, or none.
      * The **Agentic Toolkit** can be downloaded as a zip directly from the Agent
        page's *Bring your own agent* tab, for anyone who can't clone the private
        mirror.
      * **Plain-English protocol generation** now understands protocol variables, so
        requests like "discharge, capture the capacity, stop cycling when it drops to
        80%" work. It also gained the parts of the protocol language it previously
        named but couldn't use — safety limit fields, impedance frequency settings,
        rate-of-change and temperature end conditions, and ambient-temperature ramps.
      * Two protocols can now be **compared for semantic equality**, reporting the
        differences that actually affect how a cell is driven rather than differences
        in document shape.
      * The **active-organization picker** in account settings is now searchable and
        sorted by name — focus, type, Enter — instead of a flat list in creation order.
      * **Cell specifications can be found by material**: which cells use a given
        material, and which other cells share a given cell's anode, cathode or
        electrolyte.
      * The project overview's **pipeline list loads substantially faster**.
      * **Last-modified timestamps** are now accurate for designs, models and
        optimization templates. They previously recorded the creation time and never
        moved, which quietly misled anything sorting by recency.

      **Fixes**

      * Two cell specifications in **different projects can now share a name**. Name
        uniqueness was enforced across the whole organization even though a
        specification belongs to exactly one project, so a name taken in one project
        blocked it everywhere. The same fix applies to cell instances.
      * Simulation and fit jobs are now sized against the number of sequential rounds a
        fit really takes and its slowest task, rather than an idealised iteration count
        and an average — work that should have scaled out was being kept on a single
        node.
    </Accordion>

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

      * **Post-fit analysis is now available as pipeline elements** — linear confidence
        intervals and Sobol sensitivity, returning typed results that decode
        client-side without any extra code.
      * Model, objective and calculation options are now **typed rather than free-form
        dictionaries**, so an unrecognised or misspelled option is reported when you
        submit rather than minutes into a run.

      **Fixes**

      * The model-fitting objectives documented `model` as required but accepted an
        objective without one, failing deep in the run instead. A missing model is now
        reported at submission.
      * `DataLoader` silently accepted and ignored unknown options — a misspelled key
        changed your results with no error anywhere. Unknown options are now rejected.
      * A measurement given as a plain string now requires its `file:` / `folder:` /
        `db:` prefix at the point you write it, rather than being accepted and then
        failing at load time.
      * A `null` parameter value is now rejected instead of being serialised into a
        config that cannot run.
      * A weight naming an objective or variable that doesn't exist silently fell back
        to `1.0`, so a fit ran with a weight the user believed was applied. It is now
        an error.
      * Fixed a composite-electrode fitting contract: an electrode's lower excess can
        now be given either as a known per-phase split or as a single
        electrode-level value, with a clear error when neither is supplied, and the
        solved stoichiometry windows are reported back.
      * Fixed a lumped single-electrode model leaking its own options into the
        underlying PyBaMM model.
    </Accordion>

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

      * `client.pipeline` gained **`update`, `cancel` and `delete`**, matching
        `client.simple_pipeline` — a run submitted from Python can now be renamed,
        stopped or removed from Python.
      * **Material property datasets can be written from the client**: create one from
        a DataFrame, replace the stored file while keeping the record, and update or
        delete it — no more reaching past the SDK to raw HTTP.
      * New methods for **finding cell specifications by material** and for listing the
        specs related to a given one by shared anode, cathode or electrolyte.
      * Auto-scheduling proposals and the new booked-service end times are exposed
        through the client.

      **Fixes**

      * Step-summary validation now catches **swapped charge/discharge capacity and
        energy columns**. The swap is symmetric under every check that existed, so a
        file with the pair transposed passed strict validation cleanly — found on real
        uploaded data. A step whose current range picks up a single opposite-sign
        sample from the preceding step no longer abstains from the check either.
    </Accordion>

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

      * A protocol can be **compared with another for semantic equality**, reporting
        the earliest real divergence in how the two would drive a cell.

      **Fixes**

      * A slow step with no explicit duration was **cut off at 24 hours**. The runaway
        guard for a step that never meets its end conditions was capped rather than
        floored, so a genuinely long low-rate step was truncated. Low C-rate steps now
        run to completion.
      * A jump that fires the moment a step is entered is now honoured, instead of the
        step running once first.
    </Accordion>

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

      * **Manage planned measurements** covers requesting auto-scheduling proposals,
        reviewing them and applying them.
      * **Manage equipment** covers the new end times on booked cycler and channel
        service.
      * **Manage cells** covers finding cell specifications by material and listing
        related specifications.
      * New **Manage materials** skill, covering material and property-dataset
        management from the SDK, including the new write methods.
      * **Validate data** covers the swapped capacity/energy column check.
      * **Run simple pipelines** covers requiring a model on the fitting objectives and
        the locator prefix on a string measurement.
    </Accordion>
  </AccordionGroup>
</Update>
